diff --git a/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt b/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt index 7249e772c2ac5..26d17ce6f14a7 100644 --- a/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt +++ b/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.13.4) project(custom-libcxx C CXX) # Build static libcxxabi. +set(LIBCXXABI_STANDALONE_BUILD 1) set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "") set(LIBCXXABI_ENABLE_EXCEPTIONS ON CACHE BOOL "") set(LIBCXXABI_HERMETIC_STATIC_LIBRARY ON CACHE STRING "") @@ -10,6 +11,7 @@ set(LIBCXXABI_INCLUDE_TESTS OFF CACHE BOOL "") add_subdirectory(${COMPILER_RT_LIBCXXABI_PATH} ${CMAKE_CURRENT_BINARY_DIR}/cxxabi) # Build static libcxx without exceptions. +set(LIBCXX_STANDALONE_BUILD 1) set(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY OFF CACHE BOOL "") set(LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") set(LIBCXX_ENABLE_EXCEPTIONS OFF CACHE BOOL "") diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 6c031d1656fe0..a1017d91f36a8 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -82,6 +82,10 @@ include(CheckCCompilerFlag) # these flags. if (NOT MSVC) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nostdinc++ -nostdlib++") + + if (LLVM_EXTERNAL_LIBCXX_SOURCE_DIR AND "libcxx" IN_LIST LLVM_ENABLE_RUNTIMES) + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -isystem ${LLVM_EXTERNAL_LIBCXX_SOURCE_DIR}/include") + endif() endif() # Avoid checking whether the compiler is working. @@ -92,6 +96,9 @@ include(AddLLVM) include(HandleLLVMOptions) include(FindPythonInterp) +# Remove the -nostdlib++ option we've added earlier. +string(REPLACE "-nostdlib++" "" CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + # Use libtool instead of ar if you are both on an Apple host, and targeting Apple. if(CMAKE_HOST_APPLE AND APPLE) include(UseLibtool) @@ -107,11 +114,12 @@ foreach(entry ${runtimes}) string(REPLACE "-" "_" canon_name ${projName}) string(TOUPPER ${canon_name} canon_name) - # TODO: compiler-rt has to use standalone build for now. We tried to remove - # this in D57992 but this broke the build because compiler-rt assumes that - # LLVM and Clang are configured in the same build to set up dependencies. We - # should clean up the compiler-rt build and remove this eventually. - if ("${canon_name}" STREQUAL "COMPILER_RT") + # The subdirectories need to treat this as standalone builds. D57992 tried + # to get rid of this, but the runtimes treat *_STANDALONE_BUILD=OFF as if + # llvm & clang are configured in the same CMake, and setup dependencies + # against their targets. OpenMP has fixed the issue so we don't set the + # variable. + if (NOT ${canon_name} STREQUAL "OPENMP") set(${canon_name}_STANDALONE_BUILD ON) endif()