Skip to content

Commit ba007f2

Browse files
committed
[CMake] Use explicit header path when using in-tree libc++ for tests
This is a follow up to D118200 which applies a similar cleanup to headers when using in-tree libc++ to avoid accidentally picking up the system headers. Differential Revision: https://reviews.llvm.org/D128035
1 parent a78f436 commit ba007f2

File tree

11 files changed

+51
-35
lines changed

11 files changed

+51
-35
lines changed

compiler-rt/CMakeLists.txt

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,17 @@ string(REGEX REPLACE "-stdlib=[a-zA-Z+]*" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}
521521
list(APPEND COMPILER_RT_COMMON_CFLAGS ${stdlib_flag})
522522
list(APPEND COMPILER_RT_COMMON_LINK_FLAGS ${stdlib_flag})
523523

524+
# TODO: There's a lot of duplication across lib/*/tests/CMakeLists.txt files,
525+
# move some of the common flags to COMPILER_RT_UNITTEST_CFLAGS.
526+
527+
# Unittests need access to C++ standard library.
528+
string(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS " ${stdlib_flag}")
529+
530+
# When cross-compiling, COMPILER_RT_TEST_COMPILER_CFLAGS help in compilation
531+
# and linking of unittests.
532+
string(REPLACE " " ";" COMPILER_RT_UNITTEST_CFLAGS "${COMPILER_RT_TEST_COMPILER_CFLAGS}")
533+
set(COMPILER_RT_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_CFLAGS})
534+
524535
if(COMPILER_RT_USE_LLVM_UNWINDER)
525536
if (COMPILER_RT_ENABLE_STATIC_UNWINDER)
526537
set(unwinder_target unwind_static)
@@ -583,25 +594,18 @@ if (SANITIZER_TEST_CXX_LIBNAME STREQUAL "libc++")
583594
else()
584595
set(cxx_target cxx_shared)
585596
endif()
586-
list(APPEND SANITIZER_TEST_CXX_LIBRARIES "$<$<BOOL:$<TARGET_NAME_IF_EXISTS:${cxx_target}>>:$<TARGET_LINKER_FILE:${cxx_target}>>")
597+
list(APPEND SANITIZER_TEST_CXX_LIBRARIES "$<$<TARGET_EXISTS:${cxx_target}>:$<TARGET_LINKER_FILE:${cxx_target}>>")
598+
list(APPEND SANITIZER_TEST_CXX_CFLAGS "$<$<TARGET_EXISTS:cxx-headers>:-isystem$<JOIN:$<TARGET_PROPERTY:cxx-headers,INTERFACE_INCLUDE_DIRECTORIES>,$<SEMICOLON>-isystem>>")
599+
# We are using the in tree libc++ so avoid including the default one.
600+
append_list_if(COMPILER_RT_HAS_NOSTDINCXX_FLAG -nostdinc++ COMPILER_RT_UNITTEST_CFLAGS)
601+
append_list_if(COMPILER_RT_HAS_NOSTDLIBXX_FLAG -nostdlib++ COMPILER_RT_UNITTEST_LINK_FLAGS)
587602
else()
588603
append_list_if(COMPILER_RT_HAS_LIBCXX -lc++ SANITIZER_TEST_CXX_LIBRARIES)
589604
endif()
590605
elseif (SANITIZER_TEST_CXX_LIBNAME STREQUAL "libstdc++")
591606
append_list_if(COMPILER_RT_HAS_LIBSTDCXX -lstdc++ SANITIZER_TEST_CXX_LIBRARIES)
592607
endif()
593608

594-
# TODO: There's a lot of duplication across lib/*/tests/CMakeLists.txt files,
595-
# move some of the common flags to COMPILER_RT_UNITTEST_CFLAGS.
596-
597-
# Unittests need access to C++ standard library.
598-
string(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS " ${stdlib_flag}")
599-
600-
# When cross-compiling, COMPILER_RT_TEST_COMPILER_CFLAGS help in compilation
601-
# and linking of unittests.
602-
string(REPLACE " " ";" COMPILER_RT_UNITTEST_CFLAGS "${COMPILER_RT_TEST_COMPILER_CFLAGS}")
603-
set(COMPILER_RT_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_CFLAGS})
604-
605609
# Unittests support.
606610
set(COMPILER_RT_GTEST_PATH ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest)
607611
set(COMPILER_RT_GTEST_SOURCE ${COMPILER_RT_GTEST_PATH}/src/gtest-all.cc)

compiler-rt/cmake/Modules/CompilerRTCompile.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ function(clang_compile object_file source)
106106
-o "${object_file}"
107107
${source_rpath}
108108
MAIN_DEPENDENCY ${source}
109-
DEPENDS ${SOURCE_DEPS})
109+
DEPENDS ${SOURCE_DEPS}
110+
COMMAND_EXPAND_LISTS)
110111
endfunction()
111112

112113
# On Darwin, there are no system-wide C++ headers and the just-built clang is

compiler-rt/lib/asan/tests/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ set(ASAN_UNITTEST_HEADERS
2323
set(ASAN_UNITTEST_COMMON_CFLAGS
2424
${COMPILER_RT_UNITTEST_CFLAGS}
2525
${COMPILER_RT_GTEST_CFLAGS}
26+
${SANITIZER_TEST_CXX_CFLAGS}
2627
-I${COMPILER_RT_SOURCE_DIR}/include
2728
-I${COMPILER_RT_SOURCE_DIR}/lib
2829
-I${COMPILER_RT_SOURCE_DIR}/lib/asan
@@ -36,7 +37,8 @@ append_list_if(COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG -Wno-variadic-macros ASAN_U
3637
# This will ensure the target linker is used
3738
# during cross compilation
3839
set(ASAN_UNITTEST_COMMON_LINK_FLAGS
39-
${COMPILER_RT_UNITTEST_LINK_FLAGS})
40+
${COMPILER_RT_UNITTEST_LINK_FLAGS}
41+
${SANITIZER_TEST_CXX_LIBRARIES})
4042

4143
# -gline-tables-only must be enough for ASan, so use it if possible.
4244
if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang")

compiler-rt/lib/gwp_asan/tests/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ include(CompilerRTCompile)
33
set(GWP_ASAN_UNITTEST_CFLAGS
44
${COMPILER_RT_UNITTEST_CFLAGS}
55
${COMPILER_RT_GTEST_CFLAGS}
6+
${SANITIZER_TEST_CXX_CFLAGS}
67
-I${COMPILER_RT_SOURCE_DIR}/lib/
78
-O2
89
-g
@@ -33,7 +34,9 @@ set(GWP_ASAN_UNIT_TEST_HEADERS
3334
add_custom_target(GwpAsanUnitTests)
3435
set_target_properties(GwpAsanUnitTests PROPERTIES FOLDER "Compiler-RT Tests")
3536

36-
set(GWP_ASAN_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} -ldl)
37+
set(GWP_ASAN_UNITTEST_LINK_FLAGS
38+
${COMPILER_RT_UNITTEST_LINK_FLAGS} -ldl
39+
${SANITIZER_TEST_CXX_LIBRARIES})
3740
list(APPEND GWP_ASAN_UNITTEST_LINK_FLAGS --driver-mode=g++)
3841
if(NOT WIN32)
3942
list(APPEND GWP_ASAN_UNITTEST_LINK_FLAGS -pthread)

compiler-rt/lib/interception/tests/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ set(INTERCEPTION_TEST_HEADERS)
1313
set(INTERCEPTION_TEST_CFLAGS_COMMON
1414
${COMPILER_RT_UNITTEST_CFLAGS}
1515
${COMPILER_RT_GTEST_CFLAGS}
16+
${SANITIZER_TEST_CXX_CFLAGS}
1617
-I${COMPILER_RT_SOURCE_DIR}/include
1718
-I${COMPILER_RT_SOURCE_DIR}/lib
1819
-I${COMPILER_RT_SOURCE_DIR}/lib/interception
@@ -21,7 +22,8 @@ set(INTERCEPTION_TEST_CFLAGS_COMMON
2122
-Werror=sign-compare)
2223

2324
set(INTERCEPTION_TEST_LINK_FLAGS_COMMON
24-
${COMPILER_RT_UNITTEST_LINK_FLAGS})
25+
${COMPILER_RT_UNITTEST_LINK_FLAGS}
26+
${SANITIZER_TEST_CXX_LIBRARIES})
2527

2628
# -gline-tables-only must be enough for these tests, so use it if possible.
2729
if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang")

compiler-rt/lib/memprof/tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ set(MEMPROF_UNITTEST_CFLAGS
66
${COMPILER_RT_UNITTEST_CFLAGS}
77
${COMPILER_RT_GTEST_CFLAGS}
88
${COMPILER_RT_GMOCK_CFLAGS}
9+
${SANITIZER_TEST_CXX_CFLAGS}
910
-I${COMPILER_RT_SOURCE_DIR}/lib/
1011
-O2
1112
-g

compiler-rt/lib/orc/unittests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ set(ORC_TEST_ARCH ${ORC_SUPPORTED_ARCH})
3737
set(ORC_UNITTEST_LINK_FLAGS
3838
${COMPILER_RT_UNITTEST_LINK_FLAGS}
3939
${CMAKE_THREAD_LIBS_INIT}
40-
${SANITIZER_TEST_CXX_LIBRARIES}
40+
${COMPILER_RT_CXX_LINK_LIBS}
4141
)
4242

4343
if(APPLE)

compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ set(SANITIZER_TEST_CFLAGS_COMMON
6262
${COMPILER_RT_UNITTEST_CFLAGS}
6363
${COMPILER_RT_GTEST_CFLAGS}
6464
${COMPILER_RT_GMOCK_CFLAGS}
65+
${SANITIZER_TEST_CXX_CFLAGS}
6566
-I${COMPILER_RT_SOURCE_DIR}/include
6667
-I${COMPILER_RT_SOURCE_DIR}/lib
6768
-I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common
@@ -71,7 +72,9 @@ set(SANITIZER_TEST_CFLAGS_COMMON
7172
-Wno-gnu-zero-variadic-macro-arguments
7273
)
7374

74-
set(SANITIZER_TEST_LINK_FLAGS_COMMON ${COMPILER_RT_UNITTEST_LINK_FLAGS})
75+
set(SANITIZER_TEST_LINK_FLAGS_COMMON
76+
${COMPILER_RT_UNITTEST_LINK_FLAGS}
77+
${SANITIZER_TEST_CXX_LIBRARIES})
7578

7679
# -gline-tables-only must be enough for these tests, so use it if possible.
7780
if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang")

compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ set_target_properties(ScudoUnitTests PROPERTIES
77
set(SCUDO_UNITTEST_CFLAGS
88
${COMPILER_RT_UNITTEST_CFLAGS}
99
${COMPILER_RT_GTEST_CFLAGS}
10+
${SANITIZER_TEST_CXX_CFLAGS}
1011
-I${COMPILER_RT_SOURCE_DIR}/include
1112
-I${COMPILER_RT_SOURCE_DIR}/lib
1213
-I${COMPILER_RT_SOURCE_DIR}/lib/scudo/standalone
@@ -33,15 +34,14 @@ endif()
3334
set(SCUDO_TEST_ARCH ${SCUDO_STANDALONE_SUPPORTED_ARCH})
3435

3536
# gtests requires c++
36-
set(LINK_FLAGS
37+
set(SCUDO_UNITTEST_LINK_FLAGS
3738
${COMPILER_RT_UNITTEST_LINK_FLAGS}
38-
${SANITIZER_TEST_CXX_LIBRARIES}
39-
)
40-
list(APPEND LINK_FLAGS -pthread -no-pie)
39+
${SANITIZER_TEST_CXX_LIBRARIES})
40+
list(APPEND SCUDO_UNITTEST_LINK_FLAGS -pthread -no-pie)
4141
# Linking against libatomic is required with some compilers
4242
check_library_exists(atomic __atomic_load_8 "" COMPILER_RT_HAS_LIBATOMIC)
4343
if (COMPILER_RT_HAS_LIBATOMIC)
44-
list(APPEND LINK_FLAGS -latomic)
44+
list(APPEND SCUDO_UNITTEST_LINK_FLAGS -latomic)
4545
endif()
4646

4747
set(SCUDO_TEST_HEADERS
@@ -76,7 +76,7 @@ macro(add_scudo_unittest testname)
7676
DEPS llvm_gtest scudo_standalone
7777
RUNTIME ${RUNTIME}
7878
CFLAGS ${SCUDO_UNITTEST_CFLAGS}
79-
LINK_FLAGS ${LINK_FLAGS})
79+
LINK_FLAGS ${SCUDO_UNITTEST_LINK_FLAGS})
8080
endforeach()
8181
endif()
8282
endmacro()

compiler-rt/lib/tsan/tests/CMakeLists.txt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ set_target_properties(TsanUnitTests PROPERTIES
77
set(TSAN_UNITTEST_CFLAGS
88
${COMPILER_RT_UNITTEST_CFLAGS}
99
${COMPILER_RT_GTEST_CFLAGS}
10+
${SANITIZER_TEST_CXX_CFLAGS}
1011
-I${COMPILER_RT_SOURCE_DIR}/include
1112
-I${COMPILER_RT_SOURCE_DIR}/lib
1213
-I${COMPILER_RT_SOURCE_DIR}/lib/tsan/rtl
@@ -24,10 +25,9 @@ append_list_if(COMPILER_RT_HAS_MSSE4_2_FLAG -msse4.2 TSAN_UNITTEST_CFLAGS)
2425

2526
set(TSAN_TEST_ARCH ${TSAN_SUPPORTED_ARCH})
2627

27-
set(LINK_FLAGS
28+
set(TSAN_UNITTEST_LINK_FLAGS
2829
${COMPILER_RT_UNITTEST_LINK_FLAGS}
29-
${SANITIZER_TEST_CXX_LIBRARIES}
30-
)
30+
${SANITIZER_TEST_CXX_LIBRARIES})
3131

3232
if(APPLE)
3333

@@ -48,13 +48,13 @@ if(APPLE)
4848
darwin_filter_host_archs(TSAN_SUPPORTED_ARCH TSAN_TEST_ARCH)
4949
list(APPEND TSAN_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS})
5050

51-
list(APPEND LINK_FLAGS ${DARWIN_osx_LINK_FLAGS})
52-
add_weak_symbols("ubsan" LINK_FLAGS)
53-
add_weak_symbols("sanitizer_common" LINK_FLAGS)
51+
list(APPEND TSAN_UNITTEST_LINK_FLAGS ${DARWIN_osx_LINK_FLAGS})
52+
add_weak_symbols("ubsan" TSAN_UNITTEST_LINK_FLAGS)
53+
add_weak_symbols("sanitizer_common" TSAN_UNITTEST_LINK_FLAGS)
5454
else()
55-
list(APPEND LINK_FLAGS -fsanitize=thread)
56-
list(APPEND LINK_FLAGS -lm)
57-
list(APPEND LINK_FLAGS ${COMPILER_RT_TEST_LIBDISPATCH_CFLAGS})
55+
list(APPEND TSAN_UNITTEST_LINK_FLAGS -fsanitize=thread)
56+
list(APPEND TSAN_UNITTEST_LINK_FLAGS -lm)
57+
list(APPEND TSAN_UNITTEST_LINK_FLAGS ${COMPILER_RT_TEST_LIBDISPATCH_CFLAGS})
5858
endif()
5959

6060
set(TSAN_RTL_HEADERS)
@@ -83,7 +83,7 @@ macro(add_tsan_unittest testname)
8383
COMPILE_DEPS ${TEST_HEADERS} ${TSAN_RTL_HEADERS}
8484
DEPS ${TSAN_DEPS}
8585
CFLAGS ${TSAN_UNITTEST_CFLAGS}
86-
LINK_FLAGS ${LINK_FLAGS})
86+
LINK_FLAGS ${TSAN_UNITTEST_LINK_FLAGS})
8787
endforeach()
8888
endif()
8989
endmacro()

compiler-rt/lib/xray/tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH})
5050
set(XRAY_UNITTEST_LINK_FLAGS
5151
${COMPILER_RT_UNITTEST_LINK_FLAGS}
5252
${CMAKE_THREAD_LIBS_INIT}
53-
${SANITIZER_TEST_CXX_LIBRARIES}
53+
${COMPILER_RT_CXX_LINK_LIBS}
5454
)
5555

5656
if (NOT APPLE)

0 commit comments

Comments
 (0)