From ea3ff51d2ca57816411cda80e3b6f63214d75ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Fri, 23 Oct 2020 09:39:26 +0300 Subject: [PATCH] build-libcxx: Configure libcxx and generate headers before building libcxxabi This fixes building with the latest versions, where the headers strictly need __config_site to be available. --- build-libcxx.sh | 90 +++++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/build-libcxx.sh b/build-libcxx.sh index abe170e..c15c62e 100755 --- a/build-libcxx.sh +++ b/build-libcxx.sh @@ -125,46 +125,8 @@ build_all() { done cd .. - cd libcxxabi - for arch in $ARCHS; do - [ -z "$CLEAN" ] || rm -rf build-$arch-$type - mkdir -p build-$arch-$type - cd build-$arch-$type - if [ "$type" = "shared" ]; then - LIBCXXABI_VISIBILITY_FLAGS="-D_LIBCPP_BUILDING_LIBRARY= -U_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" - else - LIBCXXABI_VISIBILITY_FLAGS="-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" - fi - 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_CROSSCOMPILING=TRUE \ - -DCMAKE_SYSTEM_NAME=Windows \ - -DCMAKE_C_COMPILER_WORKS=TRUE \ - -DCMAKE_CXX_COMPILER_WORKS=TRUE \ - -DLLVM_PATH="$LLVM_PATH" \ - -DLLVM_COMPILER_CHECKED=TRUE \ - -DCMAKE_AR="$PREFIX/bin/llvm-ar" \ - -DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \ - -DLIBCXXABI_USE_COMPILER_RT=ON \ - -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ - -DLIBCXXABI_ENABLE_THREADS=ON \ - -DLIBCXXABI_TARGET_TRIPLE=$arch-w64-mingw32 \ - -DLIBCXXABI_ENABLE_SHARED=OFF \ - -DLIBCXXABI_LIBCXX_INCLUDES=../../libcxx/include \ - -DLIBCXXABI_LIBDIR_SUFFIX="" \ - -DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=OFF \ - -DCXX_SUPPORTS_CXX_STD=TRUE \ - -DCMAKE_CXX_FLAGS="$LIBCXXABI_VISIBILITY_FLAGS -D_LIBCPP_HAS_THREAD_API_WIN32" \ - .. - $BUILDCMD ${CORES+-j$CORES} - cd .. - done - cd .. - + # Configure, but don't build, libcxx, so that libcxxabi has + # proper headers to refer to cd libcxx for arch in $ARCHS; do [ -z "$CLEAN" ] || rm -rf build-$arch-$type @@ -212,6 +174,54 @@ build_all() { -DCMAKE_SHARED_LINKER_FLAGS="-lunwind" \ -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=FALSE \ .. + $BUILDCMD ${CORES+-j$CORES} generate-cxx-headers + cd .. + done + cd .. + + cd libcxxabi + for arch in $ARCHS; do + [ -z "$CLEAN" ] || rm -rf build-$arch-$type + mkdir -p build-$arch-$type + cd build-$arch-$type + if [ "$type" = "shared" ]; then + LIBCXXABI_VISIBILITY_FLAGS="-D_LIBCPP_BUILDING_LIBRARY= -U_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" + else + LIBCXXABI_VISIBILITY_FLAGS="-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" + fi + 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_CROSSCOMPILING=TRUE \ + -DCMAKE_SYSTEM_NAME=Windows \ + -DCMAKE_C_COMPILER_WORKS=TRUE \ + -DCMAKE_CXX_COMPILER_WORKS=TRUE \ + -DLLVM_PATH="$LLVM_PATH" \ + -DLLVM_COMPILER_CHECKED=TRUE \ + -DCMAKE_AR="$PREFIX/bin/llvm-ar" \ + -DCMAKE_RANLIB="$PREFIX/bin/llvm-ranlib" \ + -DLIBCXXABI_USE_COMPILER_RT=ON \ + -DLIBCXXABI_ENABLE_EXCEPTIONS=ON \ + -DLIBCXXABI_ENABLE_THREADS=ON \ + -DLIBCXXABI_TARGET_TRIPLE=$arch-w64-mingw32 \ + -DLIBCXXABI_ENABLE_SHARED=OFF \ + -DLIBCXXABI_LIBCXX_INCLUDES=../../libcxx/build-$arch-$type/include/c++/v1 \ + -DLIBCXXABI_LIBDIR_SUFFIX="" \ + -DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=OFF \ + -DCXX_SUPPORTS_CXX_STD=TRUE \ + -DCMAKE_CXX_FLAGS="$LIBCXXABI_VISIBILITY_FLAGS -D_LIBCPP_HAS_THREAD_API_WIN32" \ + .. + $BUILDCMD ${CORES+-j$CORES} + cd .. + done + cd .. + + cd libcxx + for arch in $ARCHS; do + cd build-$arch-$type $BUILDCMD ${CORES+-j$CORES} $BUILDCMD install if [ "$type" = "shared" ]; then