From 74e37173dbfe6ef270d8298c2362c8b88f7dbf88 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Tue, 13 May 2025 13:21:56 +0200 Subject: [PATCH 1/2] Add check for libc++ headers found --- llvm/cmake/modules/HandleLLVMStdlib.cmake | 7 ++++++- llvm/cmake/modules/LLVMConfig.cmake.in | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/llvm/cmake/modules/HandleLLVMStdlib.cmake b/llvm/cmake/modules/HandleLLVMStdlib.cmake index a7e138aa0789b..aab15ed0fea7d 100644 --- a/llvm/cmake/modules/HandleLLVMStdlib.cmake +++ b/llvm/cmake/modules/HandleLLVMStdlib.cmake @@ -2,6 +2,7 @@ # if the user has requested it. include(DetermineGCCCompatible) +include(CheckIncludeFiles) if(NOT DEFINED LLVM_STDLIB_HANDLED) set(LLVM_STDLIB_HANDLED ON) @@ -19,7 +20,11 @@ if(NOT DEFINED LLVM_STDLIB_HANDLED) if(LLVM_COMPILER_IS_GCC_COMPATIBLE) check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB) check_linker_flag(CXX "-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB) - if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB) + cmake_push_check_state() + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -stdlib=libc++") + check_include_files("chrono" CXX_COMPILER_SUPPORTS_STDLIB_CHRONO LANGUAGE CXX) + cmake_pop_check_state() + if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB AND CXX_COMPILER_SUPPORTS_STDLIB_CHRONO) append("-stdlib=libc++" CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS) diff --git a/llvm/cmake/modules/LLVMConfig.cmake.in b/llvm/cmake/modules/LLVMConfig.cmake.in index c15b9576cd5d5..c39c33f0c7793 100644 --- a/llvm/cmake/modules/LLVMConfig.cmake.in +++ b/llvm/cmake/modules/LLVMConfig.cmake.in @@ -55,6 +55,8 @@ endif() set(LLVM_ENABLE_RTTI @LLVM_ENABLE_RTTI@) +set(LLVM_ENABLE_LIBCXX @LLVM_ENABLE_LIBCXX@) + set(LLVM_ENABLE_LIBEDIT @HAVE_LIBEDIT@) if(LLVM_ENABLE_LIBEDIT) find_package(LibEdit) From 27b8798e9ae591799c6df3fcbc47df417bf43159 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Tue, 13 May 2025 17:44:36 +0200 Subject: [PATCH 2/2] Do not inherit CMAKE_REQUIRED_FLAGS --- llvm/cmake/modules/HandleLLVMStdlib.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/llvm/cmake/modules/HandleLLVMStdlib.cmake b/llvm/cmake/modules/HandleLLVMStdlib.cmake index aab15ed0fea7d..dda1caa846dcb 100644 --- a/llvm/cmake/modules/HandleLLVMStdlib.cmake +++ b/llvm/cmake/modules/HandleLLVMStdlib.cmake @@ -20,10 +20,16 @@ if(NOT DEFINED LLVM_STDLIB_HANDLED) if(LLVM_COMPILER_IS_GCC_COMPATIBLE) check_cxx_compiler_flag("-stdlib=libc++" CXX_COMPILER_SUPPORTS_STDLIB) check_linker_flag(CXX "-stdlib=libc++" CXX_LINKER_SUPPORTS_STDLIB) - cmake_push_check_state() + + # Check whether C++ include files are available + # runtimes/CMakeLists.txt adds -nostdlib++ and -nostdinc++ to + # CMAKE_REQUIRED_FLAGS, which are incompatible with -stdlib=libc++; use + # a fresh CMAKE_REQUIRED_FLAGS environment. + cmake_push_check_state(RESET) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -stdlib=libc++") check_include_files("chrono" CXX_COMPILER_SUPPORTS_STDLIB_CHRONO LANGUAGE CXX) cmake_pop_check_state() + if(CXX_COMPILER_SUPPORTS_STDLIB AND CXX_LINKER_SUPPORTS_STDLIB AND CXX_COMPILER_SUPPORTS_STDLIB_CHRONO) append("-stdlib=libc++" CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS