[libcxx-commits] [PATCH] D122614: [CMake][libcxx] Use target_include_directories for libc++ headers
Petr Hosek via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Jun 12 15:10:31 PDT 2022
phosek updated this revision to Diff 436256.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D122614/new/
https://reviews.llvm.org/D122614
Files:
libcxx/include/CMakeLists.txt
runtimes/CMakeLists.txt
Index: runtimes/CMakeLists.txt
===================================================================
--- runtimes/CMakeLists.txt
+++ runtimes/CMakeLists.txt
@@ -92,6 +92,26 @@
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. Filtering CMAKE_{LANG}_IMPLICIT_INCLUDE_DIRECTORIES to remove
+# paths that are inside the build directory disables this behavior.
+#
+# See https://gitlab.kitware.com/cmake/cmake/-/issues/19227 for further details.
+
+function(filter_prefixed list prefix outvar)
+ foreach(str ${list})
+ string(FIND "${str}" "${prefix}" out)
+ if(NOT "${out}" EQUAL 0)
+ list(APPEND result ${str})
+ endif()
+ endforeach()
+ set(${outvar} ${result} PARENT_SCOPE)
+endfunction()
+
+filter_prefixed("${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}" ${LLVM_BINARY_DIR} CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES)
+filter_prefixed("${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}" ${LLVM_BINARY_DIR} CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES)
+filter_prefixed("${CMAKE_ASM_IMPLICIT_INCLUDE_DIRECTORIES}" ${LLVM_BINARY_DIR} CMAKE_ASM_IMPLICIT_INCLUDE_DIRECTORIES)
check_c_compiler_flag("" LLVM_RUNTIMES_LINKING_WORKS)
if (NOT LLVM_RUNTIMES_LINKING_WORKS)
Index: libcxx/include/CMakeLists.txt
===================================================================
--- libcxx/include/CMakeLists.txt
+++ libcxx/include/CMakeLists.txt
@@ -613,14 +613,8 @@
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})
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D122614.436256.patch
Type: text/x-patch
Size: 2440 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20220612/9d7a4454/attachment.bin>
More information about the libcxx-commits
mailing list