1include(CompilerRTCompile) 2 3set(GWP_ASAN_UNITTEST_CFLAGS 4 ${COMPILER_RT_UNITTEST_CFLAGS} 5 ${COMPILER_RT_GTEST_CFLAGS} 6 ${SANITIZER_TEST_CXX_CFLAGS} 7 -std=c++17 8 -I${COMPILER_RT_SOURCE_DIR}/lib/ 9 -O2 10 -g 11 -fno-omit-frame-pointer) 12 13file(GLOB GWP_ASAN_HEADERS ../*.h) 14set(GWP_ASAN_UNITTESTS 15 platform_specific/printf_sanitizer_common.cpp 16 alignment.cpp 17 backtrace.cpp 18 basic.cpp 19 compression.cpp 20 iterate.cpp 21 crash_handler_api.cpp 22 driver.cpp 23 mutex_test.cpp 24 slot_reuse.cpp 25 thread_contention.cpp 26 harness.cpp 27 enable_disable.cpp 28 late_init.cpp 29 options.cpp 30 recoverable.cpp) 31 32set(GWP_ASAN_UNIT_TEST_HEADERS 33 ${GWP_ASAN_HEADERS} 34 harness.h) 35 36add_custom_target(GwpAsanUnitTests) 37set_target_properties(GwpAsanUnitTests PROPERTIES FOLDER "Compiler-RT Tests") 38 39set(GWP_ASAN_UNITTEST_LINK_FLAGS 40 ${COMPILER_RT_UNITTEST_LINK_FLAGS} -ldl 41 ${COMPILER_RT_UNWINDER_LINK_LIBS} 42 ${SANITIZER_TEST_CXX_LIBRARIES}) 43list(APPEND GWP_ASAN_UNITTEST_LINK_FLAGS --driver-mode=g++) 44if(NOT WIN32) 45 list(APPEND GWP_ASAN_UNITTEST_LINK_FLAGS -pthread) 46endif() 47 48if(COMPILER_RT_DEFAULT_TARGET_ARCH IN_LIST GWP_ASAN_SUPPORTED_ARCH) 49 # GWP-ASan unit tests are only run on the host machine. 50 set(arch ${COMPILER_RT_DEFAULT_TARGET_ARCH}) 51 52 set(GWP_ASAN_TEST_RUNTIME RTGwpAsanTest.${arch}) 53 54 set(GWP_ASAN_TEST_RUNTIME_OBJECTS 55 $<TARGET_OBJECTS:RTGwpAsan.${arch}> 56 $<TARGET_OBJECTS:RTGwpAsanBacktraceSanitizerCommon.${arch}> 57 $<TARGET_OBJECTS:RTGwpAsanSegvHandler.${arch}> 58 $<TARGET_OBJECTS:RTGwpAsanOptionsParser.${arch}> 59 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}> 60 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}> 61 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.${arch}>) 62 63 add_library(${GWP_ASAN_TEST_RUNTIME} STATIC 64 ${GWP_ASAN_TEST_RUNTIME_OBJECTS}) 65 66 set_target_properties(${GWP_ASAN_TEST_RUNTIME} PROPERTIES 67 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 68 FOLDER "Compiler-RT Runtime tests") 69 70 set(GwpAsanTestObjects) 71 generate_compiler_rt_tests(GwpAsanTestObjects 72 GwpAsanUnitTests "GwpAsan-${arch}-Test" ${arch} 73 SOURCES ${GWP_ASAN_UNITTESTS} ${COMPILER_RT_GTEST_SOURCE} 74 RUNTIME ${GWP_ASAN_TEST_RUNTIME} 75 DEPS llvm_gtest ${GWP_ASAN_UNIT_TEST_HEADERS} 76 CFLAGS ${GWP_ASAN_UNITTEST_CFLAGS} 77 LINK_FLAGS ${GWP_ASAN_UNITTEST_LINK_FLAGS}) 78 set_target_properties(GwpAsanUnitTests PROPERTIES 79 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 80endif() 81