summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Hosek <phosek@google.com>2022-03-28 14:12:23 -0700
committerPetr Hosek <phosek@google.com>2022-05-06 14:06:25 -0700
commit203455c85ad03325ce2d77f067f6ac953f2a32ce (patch)
tree9c3bf2ca0137b57d6ec5ad3c96054a4276f8d06d
parent981523b2e4675d4be496a333583b2f728c057d02 (diff)
downloadllvm-203455c85ad03325ce2d77f067f6ac953f2a32ce.tar.gz
[CMake][libcxx] Use target_include_directories for libc++ headers
This is the idiomatic way to handle include directories in CMake. Differential Revision: https://reviews.llvm.org/D122614
-rw-r--r--libcxx/include/CMakeLists.txt10
-rw-r--r--runtimes/CMakeLists.txt11
2 files changed, 13 insertions, 8 deletions
diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
index 6069704fcf07..f24440b3bd42 100644
--- a/libcxx/include/CMakeLists.txt
+++ b/libcxx/include/CMakeLists.txt
@@ -611,14 +611,8 @@ add_custom_target(generate-cxx-headers ALL DEPENDS ${_all_includes})
add_library(cxx-headers INTERFACE)
add_dependencies(cxx-headers generate-cxx-headers ${LIBCXX_CXX_ABI_HEADER_TARGET})
-# TODO: Use target_include_directories once we figure out why that breaks the runtimes build
-if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
- target_compile_options(cxx-headers INTERFACE /I${LIBCXX_GENERATED_INCLUDE_DIR}
- INTERFACE /I${LIBCXX_GENERATED_INCLUDE_TARGET_DIR})
-else()
- target_compile_options(cxx-headers INTERFACE -I${LIBCXX_GENERATED_INCLUDE_DIR}
- INTERFACE -I${LIBCXX_GENERATED_INCLUDE_TARGET_DIR})
-endif()
+target_include_directories(cxx-headers INTERFACE ${LIBCXX_GENERATED_INCLUDE_DIR}
+ ${LIBCXX_GENERATED_INCLUDE_TARGET_DIR})
if (LIBCXX_INSTALL_HEADERS)
foreach(file ${files})
diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt
index 1783e0114291..2d7f853a9ac2 100644
--- a/runtimes/CMakeLists.txt
+++ b/runtimes/CMakeLists.txt
@@ -92,6 +92,17 @@ include(LLVMCheckCompilerLinkerFlag)
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
+# CMake omits default compiler include paths, but in runtimes build, we use
+# -nostdinc and -nostdinc++ and control include paths manually so this behavior
+# is undesirable. Resetting CMAKE_{LANG}_IMPLICIT_INCLUDE_DIRECTORIES disables
+# this behavior. See https://gitlab.kitware.com/cmake/cmake/-/issues/19227 for
+# further details no this topic.
+#
+# TODO: We may want to consider filtering out only the paths that are within
+# the toolchain installation and leaving the system paths.
+set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "")
+set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "")
+set(CMAKE_ASM_IMPLICIT_INCLUDE_DIRECTORIES "")
check_c_compiler_flag("" LLVM_RUNTIMES_LINKING_WORKS)
if (NOT LLVM_RUNTIMES_LINKING_WORKS)