From ba007f20bb4acf95262f49ab527ce35c4a1f5a19 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Fri, 17 Jun 2022 08:11:32 +0000 Subject: [PATCH] [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 --- compiler-rt/CMakeLists.txt | 28 +++++++++++-------- .../cmake/Modules/CompilerRTCompile.cmake | 3 +- compiler-rt/lib/asan/tests/CMakeLists.txt | 4 ++- compiler-rt/lib/gwp_asan/tests/CMakeLists.txt | 5 +++- .../lib/interception/tests/CMakeLists.txt | 4 ++- compiler-rt/lib/memprof/tests/CMakeLists.txt | 1 + compiler-rt/lib/orc/unittests/CMakeLists.txt | 2 +- .../lib/sanitizer_common/tests/CMakeLists.txt | 5 +++- .../lib/scudo/standalone/tests/CMakeLists.txt | 12 ++++---- compiler-rt/lib/tsan/tests/CMakeLists.txt | 20 ++++++------- compiler-rt/lib/xray/tests/CMakeLists.txt | 2 +- 11 files changed, 51 insertions(+), 35 deletions(-) diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt index 405583a7de02..8f9bd931f725 100644 --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -521,6 +521,17 @@ string(REGEX REPLACE "-stdlib=[a-zA-Z+]*" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} list(APPEND COMPILER_RT_COMMON_CFLAGS ${stdlib_flag}) list(APPEND COMPILER_RT_COMMON_LINK_FLAGS ${stdlib_flag}) +# TODO: There's a lot of duplication across lib/*/tests/CMakeLists.txt files, +# move some of the common flags to COMPILER_RT_UNITTEST_CFLAGS. + +# Unittests need access to C++ standard library. +string(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS " ${stdlib_flag}") + +# When cross-compiling, COMPILER_RT_TEST_COMPILER_CFLAGS help in compilation +# and linking of unittests. +string(REPLACE " " ";" COMPILER_RT_UNITTEST_CFLAGS "${COMPILER_RT_TEST_COMPILER_CFLAGS}") +set(COMPILER_RT_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_CFLAGS}) + if(COMPILER_RT_USE_LLVM_UNWINDER) if (COMPILER_RT_ENABLE_STATIC_UNWINDER) set(unwinder_target unwind_static) @@ -583,7 +594,11 @@ if (SANITIZER_TEST_CXX_LIBNAME STREQUAL "libc++") else() set(cxx_target cxx_shared) endif() - list(APPEND SANITIZER_TEST_CXX_LIBRARIES "$<$>:$>") + list(APPEND SANITIZER_TEST_CXX_LIBRARIES "$<$:$>") + list(APPEND SANITIZER_TEST_CXX_CFLAGS "$<$:-isystem$,$-isystem>>") + # We are using the in tree libc++ so avoid including the default one. + append_list_if(COMPILER_RT_HAS_NOSTDINCXX_FLAG -nostdinc++ COMPILER_RT_UNITTEST_CFLAGS) + append_list_if(COMPILER_RT_HAS_NOSTDLIBXX_FLAG -nostdlib++ COMPILER_RT_UNITTEST_LINK_FLAGS) else() append_list_if(COMPILER_RT_HAS_LIBCXX -lc++ SANITIZER_TEST_CXX_LIBRARIES) endif() @@ -591,17 +606,6 @@ elseif (SANITIZER_TEST_CXX_LIBNAME STREQUAL "libstdc++") append_list_if(COMPILER_RT_HAS_LIBSTDCXX -lstdc++ SANITIZER_TEST_CXX_LIBRARIES) endif() -# TODO: There's a lot of duplication across lib/*/tests/CMakeLists.txt files, -# move some of the common flags to COMPILER_RT_UNITTEST_CFLAGS. - -# Unittests need access to C++ standard library. -string(APPEND COMPILER_RT_TEST_COMPILER_CFLAGS " ${stdlib_flag}") - -# When cross-compiling, COMPILER_RT_TEST_COMPILER_CFLAGS help in compilation -# and linking of unittests. -string(REPLACE " " ";" COMPILER_RT_UNITTEST_CFLAGS "${COMPILER_RT_TEST_COMPILER_CFLAGS}") -set(COMPILER_RT_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_CFLAGS}) - # Unittests support. set(COMPILER_RT_GTEST_PATH ${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest) set(COMPILER_RT_GTEST_SOURCE ${COMPILER_RT_GTEST_PATH}/src/gtest-all.cc) diff --git a/compiler-rt/cmake/Modules/CompilerRTCompile.cmake b/compiler-rt/cmake/Modules/CompilerRTCompile.cmake index 1b42f24c08de..64e7acb9afd8 100644 --- a/compiler-rt/cmake/Modules/CompilerRTCompile.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTCompile.cmake @@ -106,7 +106,8 @@ function(clang_compile object_file source) -o "${object_file}" ${source_rpath} MAIN_DEPENDENCY ${source} - DEPENDS ${SOURCE_DEPS}) + DEPENDS ${SOURCE_DEPS} + COMMAND_EXPAND_LISTS) endfunction() # On Darwin, there are no system-wide C++ headers and the just-built clang is diff --git a/compiler-rt/lib/asan/tests/CMakeLists.txt b/compiler-rt/lib/asan/tests/CMakeLists.txt index b2e27f66b731..9b06c613b676 100644 --- a/compiler-rt/lib/asan/tests/CMakeLists.txt +++ b/compiler-rt/lib/asan/tests/CMakeLists.txt @@ -23,6 +23,7 @@ set(ASAN_UNITTEST_HEADERS set(ASAN_UNITTEST_COMMON_CFLAGS ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} + ${SANITIZER_TEST_CXX_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -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 # This will ensure the target linker is used # during cross compilation set(ASAN_UNITTEST_COMMON_LINK_FLAGS - ${COMPILER_RT_UNITTEST_LINK_FLAGS}) + ${COMPILER_RT_UNITTEST_LINK_FLAGS} + ${SANITIZER_TEST_CXX_LIBRARIES}) # -gline-tables-only must be enough for ASan, so use it if possible. if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") diff --git a/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt b/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt index 8b4ee7d553b8..9677c46b0bc0 100644 --- a/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt +++ b/compiler-rt/lib/gwp_asan/tests/CMakeLists.txt @@ -3,6 +3,7 @@ include(CompilerRTCompile) set(GWP_ASAN_UNITTEST_CFLAGS ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} + ${SANITIZER_TEST_CXX_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/lib/ -O2 -g @@ -33,7 +34,9 @@ set(GWP_ASAN_UNIT_TEST_HEADERS add_custom_target(GwpAsanUnitTests) set_target_properties(GwpAsanUnitTests PROPERTIES FOLDER "Compiler-RT Tests") -set(GWP_ASAN_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} -ldl) +set(GWP_ASAN_UNITTEST_LINK_FLAGS + ${COMPILER_RT_UNITTEST_LINK_FLAGS} -ldl + ${SANITIZER_TEST_CXX_LIBRARIES}) list(APPEND GWP_ASAN_UNITTEST_LINK_FLAGS --driver-mode=g++) if(NOT WIN32) list(APPEND GWP_ASAN_UNITTEST_LINK_FLAGS -pthread) diff --git a/compiler-rt/lib/interception/tests/CMakeLists.txt b/compiler-rt/lib/interception/tests/CMakeLists.txt index 8d5c4abb7af0..9778894565e1 100644 --- a/compiler-rt/lib/interception/tests/CMakeLists.txt +++ b/compiler-rt/lib/interception/tests/CMakeLists.txt @@ -13,6 +13,7 @@ set(INTERCEPTION_TEST_HEADERS) set(INTERCEPTION_TEST_CFLAGS_COMMON ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} + ${SANITIZER_TEST_CXX_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/interception @@ -21,7 +22,8 @@ set(INTERCEPTION_TEST_CFLAGS_COMMON -Werror=sign-compare) set(INTERCEPTION_TEST_LINK_FLAGS_COMMON - ${COMPILER_RT_UNITTEST_LINK_FLAGS}) + ${COMPILER_RT_UNITTEST_LINK_FLAGS} + ${SANITIZER_TEST_CXX_LIBRARIES}) # -gline-tables-only must be enough for these tests, so use it if possible. if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") diff --git a/compiler-rt/lib/memprof/tests/CMakeLists.txt b/compiler-rt/lib/memprof/tests/CMakeLists.txt index 9dcad644d098..5dc40ae6c3d3 100644 --- a/compiler-rt/lib/memprof/tests/CMakeLists.txt +++ b/compiler-rt/lib/memprof/tests/CMakeLists.txt @@ -6,6 +6,7 @@ set(MEMPROF_UNITTEST_CFLAGS ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} ${COMPILER_RT_GMOCK_CFLAGS} + ${SANITIZER_TEST_CXX_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/lib/ -O2 -g diff --git a/compiler-rt/lib/orc/unittests/CMakeLists.txt b/compiler-rt/lib/orc/unittests/CMakeLists.txt index 7ebcf153b0ef..a529d776f089 100644 --- a/compiler-rt/lib/orc/unittests/CMakeLists.txt +++ b/compiler-rt/lib/orc/unittests/CMakeLists.txt @@ -37,7 +37,7 @@ set(ORC_TEST_ARCH ${ORC_SUPPORTED_ARCH}) set(ORC_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} ${CMAKE_THREAD_LIBS_INIT} - ${SANITIZER_TEST_CXX_LIBRARIES} + ${COMPILER_RT_CXX_LINK_LIBS} ) if(APPLE) diff --git a/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt b/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt index 826bdc3d7c8a..991b3b571b49 100644 --- a/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt +++ b/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt @@ -62,6 +62,7 @@ set(SANITIZER_TEST_CFLAGS_COMMON ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} ${COMPILER_RT_GMOCK_CFLAGS} + ${SANITIZER_TEST_CXX_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common @@ -71,7 +72,9 @@ set(SANITIZER_TEST_CFLAGS_COMMON -Wno-gnu-zero-variadic-macro-arguments ) -set(SANITIZER_TEST_LINK_FLAGS_COMMON ${COMPILER_RT_UNITTEST_LINK_FLAGS}) +set(SANITIZER_TEST_LINK_FLAGS_COMMON + ${COMPILER_RT_UNITTEST_LINK_FLAGS} + ${SANITIZER_TEST_CXX_LIBRARIES}) # -gline-tables-only must be enough for these tests, so use it if possible. if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") diff --git a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt index b6b60a2c8ada..ec8050de14fb 100644 --- a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt +++ b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt @@ -7,6 +7,7 @@ set_target_properties(ScudoUnitTests PROPERTIES set(SCUDO_UNITTEST_CFLAGS ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} + ${SANITIZER_TEST_CXX_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/scudo/standalone @@ -33,15 +34,14 @@ endif() set(SCUDO_TEST_ARCH ${SCUDO_STANDALONE_SUPPORTED_ARCH}) # gtests requires c++ -set(LINK_FLAGS +set(SCUDO_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} - ${SANITIZER_TEST_CXX_LIBRARIES} - ) -list(APPEND LINK_FLAGS -pthread -no-pie) + ${SANITIZER_TEST_CXX_LIBRARIES}) +list(APPEND SCUDO_UNITTEST_LINK_FLAGS -pthread -no-pie) # Linking against libatomic is required with some compilers check_library_exists(atomic __atomic_load_8 "" COMPILER_RT_HAS_LIBATOMIC) if (COMPILER_RT_HAS_LIBATOMIC) - list(APPEND LINK_FLAGS -latomic) + list(APPEND SCUDO_UNITTEST_LINK_FLAGS -latomic) endif() set(SCUDO_TEST_HEADERS @@ -76,7 +76,7 @@ macro(add_scudo_unittest testname) DEPS llvm_gtest scudo_standalone RUNTIME ${RUNTIME} CFLAGS ${SCUDO_UNITTEST_CFLAGS} - LINK_FLAGS ${LINK_FLAGS}) + LINK_FLAGS ${SCUDO_UNITTEST_LINK_FLAGS}) endforeach() endif() endmacro() diff --git a/compiler-rt/lib/tsan/tests/CMakeLists.txt b/compiler-rt/lib/tsan/tests/CMakeLists.txt index 91702c913592..93ce4db5b559 100644 --- a/compiler-rt/lib/tsan/tests/CMakeLists.txt +++ b/compiler-rt/lib/tsan/tests/CMakeLists.txt @@ -7,6 +7,7 @@ set_target_properties(TsanUnitTests PROPERTIES set(TSAN_UNITTEST_CFLAGS ${COMPILER_RT_UNITTEST_CFLAGS} ${COMPILER_RT_GTEST_CFLAGS} + ${SANITIZER_TEST_CXX_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -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) set(TSAN_TEST_ARCH ${TSAN_SUPPORTED_ARCH}) -set(LINK_FLAGS +set(TSAN_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} - ${SANITIZER_TEST_CXX_LIBRARIES} - ) + ${SANITIZER_TEST_CXX_LIBRARIES}) if(APPLE) @@ -48,13 +48,13 @@ if(APPLE) darwin_filter_host_archs(TSAN_SUPPORTED_ARCH TSAN_TEST_ARCH) list(APPEND TSAN_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS}) - list(APPEND LINK_FLAGS ${DARWIN_osx_LINK_FLAGS}) - add_weak_symbols("ubsan" LINK_FLAGS) - add_weak_symbols("sanitizer_common" LINK_FLAGS) + list(APPEND TSAN_UNITTEST_LINK_FLAGS ${DARWIN_osx_LINK_FLAGS}) + add_weak_symbols("ubsan" TSAN_UNITTEST_LINK_FLAGS) + add_weak_symbols("sanitizer_common" TSAN_UNITTEST_LINK_FLAGS) else() - list(APPEND LINK_FLAGS -fsanitize=thread) - list(APPEND LINK_FLAGS -lm) - list(APPEND LINK_FLAGS ${COMPILER_RT_TEST_LIBDISPATCH_CFLAGS}) + list(APPEND TSAN_UNITTEST_LINK_FLAGS -fsanitize=thread) + list(APPEND TSAN_UNITTEST_LINK_FLAGS -lm) + list(APPEND TSAN_UNITTEST_LINK_FLAGS ${COMPILER_RT_TEST_LIBDISPATCH_CFLAGS}) endif() set(TSAN_RTL_HEADERS) @@ -83,7 +83,7 @@ macro(add_tsan_unittest testname) COMPILE_DEPS ${TEST_HEADERS} ${TSAN_RTL_HEADERS} DEPS ${TSAN_DEPS} CFLAGS ${TSAN_UNITTEST_CFLAGS} - LINK_FLAGS ${LINK_FLAGS}) + LINK_FLAGS ${TSAN_UNITTEST_LINK_FLAGS}) endforeach() endif() endmacro() diff --git a/compiler-rt/lib/xray/tests/CMakeLists.txt b/compiler-rt/lib/xray/tests/CMakeLists.txt index 1d698391fe02..aa4311b82277 100644 --- a/compiler-rt/lib/xray/tests/CMakeLists.txt +++ b/compiler-rt/lib/xray/tests/CMakeLists.txt @@ -50,7 +50,7 @@ set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH}) set(XRAY_UNITTEST_LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS} ${CMAKE_THREAD_LIBS_INIT} - ${SANITIZER_TEST_CXX_LIBRARIES} + ${COMPILER_RT_CXX_LINK_LIBS} ) if (NOT APPLE)