diff --git a/build-libcxx.sh b/build-libcxx.sh index 27bd323..9880379 100755 --- a/build-libcxx.sh +++ b/build-libcxx.sh @@ -16,18 +16,18 @@ set -e -BUILD_STATIC=1 -BUILD_SHARED=1 +BUILD_STATIC=ON +BUILD_SHARED=ON while [ $# -gt 0 ]; do if [ "$1" = "--disable-shared" ]; then - BUILD_SHARED= + BUILD_SHARED=OFF elif [ "$1" = "--enable-shared" ]; then - BUILD_SHARED=1 + BUILD_SHARED=ON elif [ "$1" = "--disable-static" ]; then - BUILD_STATIC= + BUILD_STATIC=OFF elif [ "$1" = "--enable-static" ]; then - BUILD_STATIC=1 + BUILD_STATIC=ON else PREFIX="$1" fi @@ -74,62 +74,44 @@ else BUILDCMD=make fi -build_all() { - type="$1" - CMAKEFLAGS="" - if [ "$type" = "shared" ]; then - SHARED=TRUE - STATIC=FALSE - CMAKEFLAGS="$CMAKEFLAGS -DLIBCXXABI_USE_LLVM_UNWINDER=ON" - else - SHARED=FALSE - STATIC=TRUE - fi +for arch in $ARCHS; do + [ -z "$CLEAN" ] || rm -rf build-$arch + mkdir -p build-$arch + cd build-$arch + cmake \ + ${CMAKE_GENERATOR+-G} "$CMAKE_GENERATOR" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="$PREFIX/$arch-w64-mingw32" \ + -DCMAKE_C_COMPILER=$arch-w64-mingw32-clang \ + -DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \ + -DCMAKE_CXX_COMPILER_TARGET=$arch-w64-windows-gnu \ + -DCMAKE_CROSSCOMPILING=TRUE \ + -DCMAKE_SYSTEM_NAME=Windows \ + -DCMAKE_C_COMPILER_WORKS=TRUE \ + -DCMAKE_CXX_COMPILER_WORKS=TRUE \ + -DLLVM_PATH="$LLVM_PATH" \ + -DCMAKE_AR="$PREFIX/bin/llvm-ar" \ + -DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \ + -DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \ + -DLIBUNWIND_USE_COMPILER_RT=TRUE \ + -DLIBUNWIND_ENABLE_SHARED=$BUILD_SHARED \ + -DLIBUNWIND_ENABLE_STATIC=$BUILD_STATIC \ + -DLIBCXX_USE_COMPILER_RT=ON \ + -DLIBCXX_ENABLE_SHARED=$BUILD_SHARED \ + -DLIBCXX_ENABLE_STATIC=$BUILD_STATIC \ + -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \ + -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DLIBCXX_LIBDIR_SUFFIX="" \ + -DLIBCXX_INCLUDE_TESTS=FALSE \ + -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \ + -DLIBCXXABI_USE_COMPILER_RT=ON \ + -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ + -DLIBCXXABI_ENABLE_SHARED=OFF \ + -DLIBCXXABI_LIBDIR_SUFFIX="" \ + .. - for arch in $ARCHS; do - [ -z "$CLEAN" ] || rm -rf build-$arch-$type - mkdir -p build-$arch-$type - cd build-$arch-$type - cmake \ - ${CMAKE_GENERATOR+-G} "$CMAKE_GENERATOR" \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX="$PREFIX/$arch-w64-mingw32" \ - -DCMAKE_C_COMPILER=$arch-w64-mingw32-clang \ - -DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \ - -DCMAKE_CXX_COMPILER_TARGET=$arch-w64-windows-gnu \ - -DCMAKE_CROSSCOMPILING=TRUE \ - -DCMAKE_SYSTEM_NAME=Windows \ - -DCMAKE_C_COMPILER_WORKS=TRUE \ - -DCMAKE_CXX_COMPILER_WORKS=TRUE \ - -DLLVM_PATH="$LLVM_PATH" \ - -DCMAKE_AR="$PREFIX/bin/llvm-ar" \ - -DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \ - -DLLVM_ENABLE_RUNTIMES="libunwind;libcxxabi;libcxx" \ - -DLIBUNWIND_USE_COMPILER_RT=TRUE \ - -DLIBUNWIND_ENABLE_SHARED=$SHARED \ - -DLIBUNWIND_ENABLE_STATIC=$STATIC \ - -DLIBCXX_USE_COMPILER_RT=ON \ - -DLIBCXX_ENABLE_SHARED=$SHARED \ - -DLIBCXX_ENABLE_STATIC=$STATIC \ - -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \ - -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=TRUE \ - -DLIBCXX_CXX_ABI=libcxxabi \ - -DLIBCXX_LIBDIR_SUFFIX="" \ - -DLIBCXX_INCLUDE_TESTS=FALSE \ - -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \ - -DLIBCXXABI_USE_COMPILER_RT=ON \ - -DLIBCXXABI_ENABLE_SHARED=OFF \ - -DLIBCXXABI_LIBDIR_SUFFIX="" \ - $CMAKEFLAGS \ - .. - - $BUILDCMD ${CORES+-j$CORES} - $BUILDCMD install - cd .. - done -} - -# Build shared first and static afterwards; the headers for static linking also -# work when linking against the DLL, but not vice versa. -[ -z "$BUILD_SHARED" ] || build_all shared -[ -z "$BUILD_STATIC" ] || build_all static + $BUILDCMD ${CORES+-j$CORES} + $BUILDCMD install + cd .. +done