llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-libc Author: Petr Hosek (petrhosek) <details> <summary>Changes</summary> Provide an option to build libc++ against LLVM libc and set the CMake compile and link options appropriately when the option is enabled. --- Full diff: https://github.com/llvm/llvm-project/pull/99287.diff 7 Files Affected: - (modified) clang/cmake/caches/Fuchsia-stage2.cmake (+2) - (modified) libc/cmake/modules/CheckCompilerFeatures.cmake (+3) - (modified) libc/include/CMakeLists.txt (+3) - (modified) libc/lib/CMakeLists.txt (+4-1) - (modified) libcxx/CMakeLists.txt (+1) - (modified) libcxx/include/CMakeLists.txt (+3) - (modified) libcxx/src/CMakeLists.txt (+10) ``````````diff diff --git a/clang/cmake/caches/Fuchsia-stage2.cmake b/clang/cmake/caches/Fuchsia-stage2.cmake index b4561e6c87ba5..dc9b596b4ba8f 100644 --- a/clang/cmake/caches/Fuchsia-stage2.cmake +++ b/clang/cmake/caches/Fuchsia-stage2.cmake @@ -338,6 +338,7 @@ foreach(target armv6m-unknown-eabi;armv7m-unknown-eabi;armv8m.main-unknown-eabi) set(RUNTIMES_${target}_LIBCXX_CXX_ABI none CACHE STRING "") set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_STATIC ON CACHE BOOL "") + set(RUNTIMES_${target}_LIBCXX_USE_LLVM_LIBC ON CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_LOCALIZATION OFF CACHE BOOL "") @@ -388,6 +389,7 @@ foreach(target riscv32-unknown-elf) set(RUNTIMES_${target}_LIBCXX_CXX_ABI none CACHE STRING "") set(RUNTIMES_${target}_LIBCXX_ENABLE_SHARED OFF CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_STATIC ON CACHE BOOL "") + set(RUNTIMES_${target}_LIBCXX_USE_LLVM_LIBC ON CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_FILESYSTEM OFF CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_RANDOM_DEVICE OFF CACHE BOOL "") set(RUNTIMES_${target}_LIBCXX_ENABLE_LOCALIZATION OFF CACHE BOOL "") diff --git a/libc/cmake/modules/CheckCompilerFeatures.cmake b/libc/cmake/modules/CheckCompilerFeatures.cmake index a6d793d495c45..d64d9de97af3c 100644 --- a/libc/cmake/modules/CheckCompilerFeatures.cmake +++ b/libc/cmake/modules/CheckCompilerFeatures.cmake @@ -102,3 +102,6 @@ check_cxx_compiler_flag("-nostdlib++" LIBC_CC_SUPPORTS_NOSTDLIBPP) # clang-3.0+ check_cxx_compiler_flag("-nostdlibinc" LIBC_CC_SUPPORTS_NOSTDLIBINC) + +# clang-3.0+ +check_cxx_compiler_flag("-nolibc" LIBC_CC_SUPPORTS_NOLIBC) diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt index 2cf7206f3a625..d521e205df8c3 100644 --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -664,6 +664,9 @@ get_all_install_header_targets(all_install_header_targets ${TARGET_PUBLIC_HEADER add_library(libc-headers INTERFACE) add_dependencies(libc-headers ${all_install_header_targets}) target_include_directories(libc-headers SYSTEM INTERFACE ${LIBC_INCLUDE_DIR}) +if(LIBC_CC_SUPPORTS_NOSTDLIBINC) + target_compile_options(libc-headers INTERFACE "-nostdlibinc") +endif() foreach(target IN LISTS all_install_header_targets) get_target_property(header_file ${target} HEADER_FILE_PATH) diff --git a/libc/lib/CMakeLists.txt b/libc/lib/CMakeLists.txt index 37acf3950b460..7e18f35e7d60e 100644 --- a/libc/lib/CMakeLists.txt +++ b/libc/lib/CMakeLists.txt @@ -30,7 +30,10 @@ foreach(archive IN ZIP_LISTS ARCHIVE_OUTPUT_NAME ${archive_0} ) if(LLVM_LIBC_FULL_BUILD) - target_link_libraries(${archive_1} PUBLIC libc-headers) + target_link_libraries(${archive_1} INTERFACE libc-headers) + if(LIBC_CC_SUPPORTS_NOLIBC) + target_link_options(${archive_1} INTERFACE "-nolibc") + endif() if(TARGET libc-startup) add_dependencies(${archive_1} libc-startup) endif() diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index 190a97db9462f..5a568e95b239e 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/CMakeLists.txt @@ -293,6 +293,7 @@ option(LIBCXX_ENABLE_THREADS "Build libc++ with support for threads." ON) option(LIBCXX_ENABLE_MONOTONIC_CLOCK "Build libc++ with support for a monotonic clock. This option may only be set to OFF when LIBCXX_ENABLE_THREADS=OFF." ON) +option(LIBCXX_USE_LLVM_LIBC "Build libc++ against LLVM libc." OFF) option(LIBCXX_HAS_MUSL_LIBC "Build libc++ with support for the Musl C library" OFF) option(LIBCXX_HAS_PTHREAD_API "Ignore auto-detection and force use of pthread API" OFF) option(LIBCXX_HAS_WIN32_THREAD_API "Ignore auto-detection and force use of win32 thread API" OFF) diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt index cd64fe91449c2..31a819932d521 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -1043,6 +1043,9 @@ add_custom_target(generate-cxx-headers ALL DEPENDS ${_all_includes}) add_library(cxx-headers INTERFACE) target_link_libraries(cxx-headers INTERFACE libcxx-abi-headers) +if (LIBCXX_USE_LLVM_LIBC) + target_link_libraries(cxx-headers INTERFACE libc-headers) +endif() add_dependencies(cxx-headers generate-cxx-headers) # It's important that the arch directory be included first so that its header files # which interpose on the default include dir be included instead of the default ones. diff --git a/libcxx/src/CMakeLists.txt b/libcxx/src/CMakeLists.txt index 0ae58a10c879c..536a5a16ad7e1 100644 --- a/libcxx/src/CMakeLists.txt +++ b/libcxx/src/CMakeLists.txt @@ -229,6 +229,11 @@ if (LIBCXX_ENABLE_SHARED) target_link_libraries(cxx_shared PUBLIC libcxx-abi-shared) endif() + # Link against LLVM libc. + if (LIBCXX_USE_LLVM_LIBC) + target_link_libraries(cxx_shared PUBLIC libc libm) + endif() + # Maybe re-export symbols from libc++abi # In particular, we don't re-export the symbols if libc++abi is merged statically # into libc++ because in that case there's no dylib to re-export from. @@ -324,6 +329,11 @@ if (LIBCXX_ENABLE_STATIC) if (LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY) target_link_libraries(cxx_static PRIVATE libcxx-abi-static-objects) endif() + + # Link against LLVM libc. + if (LIBCXX_USE_LLVM_LIBC) + target_link_libraries(cxx_static PUBLIC libc libm) + endif() endif() # Add a meta-target for both libraries. `````````` </details> https://github.com/llvm/llvm-project/pull/99287 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits