Skip to content

Commit a35a3b7

Browse files
authored
[libc][cmake] Tidy compiler includes (#66783)
We want to activate `llvm-header-guard` (#66477) but the current CMake configuration includes paths that should be `isystem`. This PR restricts the number of `-I` passed to the clang command line and correctly marks the llvm libc include path as `isystem`.
1 parent be8c2df commit a35a3b7

File tree

5 files changed

+28
-43
lines changed

5 files changed

+28
-43
lines changed

libc/CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ endif()
77
include(${LLVM_COMMON_CMAKE_UTILS}/Modules/CMakePolicy.cmake
88
NO_POLICY_SCOPE)
99

10+
# `llvm-project/llvm/CMakeLists.txt` adds the following directive
11+
# `include_directories( ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})`
12+
# We undo it to be able to precisely control what is getting included.
13+
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "")
14+
1015
# Default to C++17
1116
set(CMAKE_CXX_STANDARD 17)
1217

libc/cmake/modules/LLVMLibCObjectRules.cmake

+13-18
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ function(_build_gpu_objects fq_target_name internal_target_name)
151151
${ARGN}
152152
)
153153

154-
set(include_dirs ${LIBC_SOURCE_DIR} ${LIBC_INCLUDE_DIR})
155154
set(common_compile_options ${ADD_GPU_OBJ_COMPILE_OPTIONS})
156155
if(NOT ADD_GPU_OBJ_CXX_STANDARD)
157156
set(ADD_GPU_OBJ_CXX_STANDARD ${CMAKE_CXX_STANDARD})
@@ -189,13 +188,10 @@ function(_build_gpu_objects fq_target_name internal_target_name)
189188
)
190189

191190
target_compile_options(${gpu_target_name} PRIVATE ${compile_options})
192-
target_include_directories(${gpu_target_name} PRIVATE ${include_dirs})
191+
target_include_directories(${gpu_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
192+
target_include_directories(${gpu_target_name} PRIVATE ${LIBC_SOURCE_DIR})
193193
target_compile_definitions(${gpu_target_name} PRIVATE LIBC_COPT_PUBLIC_PACKAGING)
194-
set_target_properties(
195-
${gpu_target_name}
196-
PROPERTIES
197-
CXX_STANDARD ${ADD_GPU_OBJ_CXX_STANDARD}
198-
)
194+
set_target_properties(${gpu_target_name} PROPERTIES CXX_STANDARD ${ADD_GPU_OBJ_CXX_STANDARD})
199195
if(ADD_GPU_OBJ_DEPENDS)
200196
add_dependencies(${gpu_target_name} ${ADD_GPU_OBJ_DEPENDS})
201197
endif()
@@ -261,7 +257,8 @@ function(_build_gpu_objects fq_target_name internal_target_name)
261257
target_compile_options(${fq_target_name} PRIVATE
262258
"SHELL:-Xclang -fembed-offload-object=${packaged_gpu_binary}")
263259
endforeach()
264-
target_include_directories(${fq_target_name} PRIVATE ${include_dirs})
260+
target_include_directories(${fq_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
261+
target_include_directories(${fq_target_name} PRIVATE ${LIBC_SOURCE_DIR})
265262
add_dependencies(${fq_target_name}
266263
${full_deps_list} ${packaged_gpu_names} ${stub_target_name})
267264

@@ -285,7 +282,8 @@ function(_build_gpu_objects fq_target_name internal_target_name)
285282
get_nvptx_compile_options(nvptx_options ${LIBC_GPU_TARGET_ARCHITECTURE})
286283
target_compile_options(${internal_target_name} PRIVATE ${nvptx_options})
287284
endif()
288-
target_include_directories(${internal_target_name} PRIVATE ${include_dirs})
285+
target_include_directories(${internal_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
286+
target_include_directories(${internal_target_name} PRIVATE ${LIBC_SOURCE_DIR})
289287
if(full_deps_list)
290288
add_dependencies(${internal_target_name} ${full_deps_list})
291289
endif()
@@ -369,12 +367,8 @@ function(create_object_library fq_target_name)
369367
${ADD_OBJECT_SRCS}
370368
${ADD_OBJECT_HDRS}
371369
)
372-
target_include_directories(
373-
${fq_target_name}
374-
PRIVATE
375-
${LIBC_SOURCE_DIR}
376-
${LIBC_INCLUDE_DIR}
377-
)
370+
target_include_directories(${fq_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
371+
target_include_directories(${fq_target_name} PRIVATE ${LIBC_SOURCE_DIR})
378372
target_compile_options(${fq_target_name} PRIVATE ${compile_options})
379373
endif()
380374

@@ -633,7 +627,6 @@ function(create_entrypoint_object fq_target_name)
633627
"${ADD_ENTRYPOINT_OBJ_FLAGS}"
634628
${ADD_ENTRYPOINT_OBJ_COMPILE_OPTIONS}
635629
)
636-
set(include_dirs ${LIBC_SOURCE_DIR} ${LIBC_INCLUDE_DIR})
637630
get_fq_deps_list(fq_deps_list ${ADD_ENTRYPOINT_OBJ_DEPENDS})
638631
set(full_deps_list ${fq_deps_list} libc.src.__support.common)
639632

@@ -670,7 +663,8 @@ function(create_entrypoint_object fq_target_name)
670663
${ADD_ENTRYPOINT_OBJ_HDRS}
671664
)
672665
target_compile_options(${internal_target_name} BEFORE PRIVATE ${common_compile_options})
673-
target_include_directories(${internal_target_name} PRIVATE ${include_dirs})
666+
target_include_directories(${internal_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
667+
target_include_directories(${internal_target_name} PRIVATE ${LIBC_SOURCE_DIR})
674668
add_dependencies(${internal_target_name} ${full_deps_list})
675669
target_link_libraries(${internal_target_name} ${full_deps_list})
676670

@@ -684,7 +678,8 @@ function(create_entrypoint_object fq_target_name)
684678
${ADD_ENTRYPOINT_OBJ_HDRS}
685679
)
686680
target_compile_options(${fq_target_name} BEFORE PRIVATE ${common_compile_options} -DLIBC_COPT_PUBLIC_PACKAGING)
687-
target_include_directories(${fq_target_name} PRIVATE ${include_dirs})
681+
target_include_directories(${fq_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
682+
target_include_directories(${fq_target_name} PRIVATE ${LIBC_SOURCE_DIR})
688683
add_dependencies(${fq_target_name} ${full_deps_list})
689684
target_link_libraries(${fq_target_name} ${full_deps_list})
690685
endif()

libc/cmake/modules/LLVMLibCTestRules.cmake

+8-24
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,8 @@ function(create_libc_unittest fq_target_name)
148148
${LIBC_UNITTEST_SRCS}
149149
${LIBC_UNITTEST_HDRS}
150150
)
151-
target_include_directories(
152-
${fq_build_target_name}
153-
PRIVATE
154-
${LIBC_SOURCE_DIR}
155-
${LIBC_INCLUDE_DIR}
156-
)
151+
target_include_directories(${fq_build_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
152+
target_include_directories(${fq_build_target_name} PRIVATE ${LIBC_SOURCE_DIR})
157153
target_compile_options(
158154
${fq_build_target_name}
159155
PRIVATE -fpie ${LIBC_COMPILE_OPTIONS_DEFAULT}
@@ -386,12 +382,8 @@ function(add_libc_fuzzer target_name)
386382
${LIBC_FUZZER_SRCS}
387383
${LIBC_FUZZER_HDRS}
388384
)
389-
target_include_directories(
390-
${fq_target_name}
391-
PRIVATE
392-
${LIBC_SOURCE_DIR}
393-
${LIBC_INCLUDE_DIR}
394-
)
385+
target_include_directories(${fq_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
386+
target_include_directories(${fq_target_name} PRIVATE ${LIBC_SOURCE_DIR})
395387

396388
target_link_libraries(${fq_target_name} PRIVATE
397389
${link_object_files}
@@ -516,12 +508,8 @@ function(add_integration_test test_name)
516508
)
517509
set_target_properties(${fq_build_target_name}
518510
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
519-
target_include_directories(
520-
${fq_build_target_name}
521-
PRIVATE
522-
${LIBC_SOURCE_DIR}
523-
${LIBC_INCLUDE_DIR}
524-
)
511+
target_include_directories(${fq_build_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
512+
target_include_directories(${fq_build_target_name} PRIVATE ${LIBC_SOURCE_DIR})
525513
target_compile_options(${fq_build_target_name}
526514
PRIVATE -fpie -ffreestanding -fno-exceptions -fno-rtti ${INTEGRATION_TEST_COMPILE_OPTIONS})
527515
# The GPU build requires overriding the default CMake triple and architecture.
@@ -683,12 +671,8 @@ function(add_libc_hermetic_test test_name)
683671
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
684672
#OUTPUT_NAME ${fq_target_name}
685673
)
686-
target_include_directories(
687-
${fq_build_target_name}
688-
PRIVATE
689-
${LIBC_SOURCE_DIR}
690-
${LIBC_INCLUDE_DIR}
691-
)
674+
target_include_directories(${fq_build_target_name} SYSTEM PRIVATE ${LIBC_INCLUDE_DIR})
675+
target_include_directories(${fq_build_target_name} PRIVATE ${LIBC_SOURCE_DIR})
692676
target_compile_options(${fq_build_target_name}
693677
PRIVATE ${LIBC_HERMETIC_TEST_COMPILE_OPTIONS} ${HERMETIC_TEST_COMPILE_OPTIONS})
694678

libc/utils/HdrGen/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ add_tablegen(libc-hdrgen LIBC
1414
PublicAPICommand.h
1515
)
1616

17-
target_include_directories(libc-hdrgen PRIVATE ${LIBC_SOURCE_DIR})
17+
target_include_directories(libc-hdrgen PRIVATE ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})
1818
target_link_libraries(libc-hdrgen PRIVATE LibcTableGenUtil)
1919

2020
add_subdirectory(PrototypeTestGen)

libc/utils/LibcTableGenUtil/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ add_llvm_library(
66
LINK_COMPONENTS Support TableGen
77
)
88
target_include_directories(LibcTableGenUtil PUBLIC ${LIBC_SOURCE_DIR})
9+
target_include_directories(LibcTableGenUtil PRIVATE ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_INCLUDE_DIR})

0 commit comments

Comments
 (0)