1- include (CompilerRTCompile )
2-
3- set (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-
13- file (GLOB GWP_ASAN_HEADERS ../*.h )
141set (GWP_ASAN_UNITTESTS
15- platform_specific/printf_sanitizer_common .cpp
2+ platform_specific/printf_standalone .cpp
163 alignment.cpp
174 backtrace.cpp
185 basic.cpp
@@ -32,53 +19,63 @@ set(GWP_ASAN_UNITTESTS
3219 utilities.cpp
3320)
3421
35- set (GWP_ASAN_UNIT_TEST_HEADERS
36- ${GWP_ASAN_HEADERS}
37- harness.h)
38-
39- add_custom_target (GwpAsanUnitTests )
40- set_target_properties (GwpAsanUnitTests PROPERTIES FOLDER "Compiler-RT/Tests" )
22+ if (GWP_ASAN_GTEST_SOURCE_DIR )
23+ set (GWP_ASAN_GTEST_ROOT "${GWP_ASAN_GTEST_SOURCE_DIR } " )
24+ if (EXISTS "${GWP_ASAN_GTEST_ROOT} /googletest" )
25+ set (GWP_ASAN_GTEST_ROOT "${GWP_ASAN_GTEST_ROOT} /googletest" )
26+ endif ()
27+ if (NOT EXISTS "${GWP_ASAN_GTEST_ROOT} /include/gtest/gtest.h" OR
28+ NOT EXISTS "${GWP_ASAN_GTEST_ROOT} /src/gtest-all.cc" )
29+ message (FATAL_ERROR
30+ "GWP_ASAN_GTEST_SOURCE_DIR must point to a googletest checkout" )
31+ endif ()
4132
42- set (GWP_ASAN_UNITTEST_LINK_FLAGS
43- ${COMPILER_RT_UNITTEST_LINK_FLAGS} -ldl
44- ${COMPILER_RT_UNWINDER_LINK_LIBS}
45- ${SANITIZER_TEST_CXX_LIBRARIES} )
46- list (APPEND GWP_ASAN_UNITTEST_LINK_FLAGS --driver-mode=g++)
47- if (NOT WIN32 )
48- list (APPEND GWP_ASAN_UNITTEST_LINK_FLAGS -pthread)
49- endif ()
33+ add_library (gwp_asan_gtest STATIC
34+ "${GWP_ASAN_GTEST_ROOT} /src/gtest-all.cc"
35+ )
36+ target_include_directories (gwp_asan_gtest PUBLIC
37+ "${GWP_ASAN_GTEST_ROOT} /include"
38+ "${GWP_ASAN_GTEST_ROOT} "
39+ )
40+ set (GWP_ASAN_GTEST_TARGET gwp_asan_gtest)
41+ else ()
42+ find_package (GTest REQUIRED )
43+ if (TARGET GTest::gtest)
44+ set (GWP_ASAN_GTEST_TARGET GTest::gtest)
45+ elseif (TARGET GTest::GTest)
46+ set (GWP_ASAN_GTEST_TARGET GTest::GTest)
47+ else ()
48+ message (FATAL_ERROR "Could not find a usable GTest target" )
49+ endif ()
50+ endif ()
5051
51- if (COMPILER_RT_DEFAULT_TARGET_ARCH IN_LIST GWP_ASAN_SUPPORTED_ARCH)
52- # GWP-ASan unit tests are only run on the host machine.
53- set (arch ${COMPILER_RT_DEFAULT_TARGET_ARCH} )
52+ add_executable ( gwp_asan_tests
53+ ${GWP_ASAN_UNITTESTS}
54+ )
5455
55- set (GWP_ASAN_TEST_RUNTIME RTGwpAsanTest.${arch} )
56+ target_link_libraries (gwp_asan_tests PRIVATE
57+ RTGwpAsan
58+ RTGwpAsanOptionsParser
59+ RTGwpAsanBacktraceLibc
60+ RTGwpAsanSegvHandler
61+ ${GWP_ASAN_GTEST_TARGET}
62+ )
5663
57- set (GWP_ASAN_TEST_RUNTIME_OBJECTS
58- $<TARGET_OBJECTS :RTGwpAsan .${arch} >
59- $<TARGET_OBJECTS :RTGwpAsanBacktraceSanitizerCommon .${arch} >
60- $<TARGET_OBJECTS :RTGwpAsanSegvHandler .${arch} >
61- $<TARGET_OBJECTS :RTGwpAsanOptionsParser .${arch} >
62- $<TARGET_OBJECTS :RTSanitizerCommon .${arch} >
63- $<TARGET_OBJECTS :RTSanitizerCommonLibc .${arch} >
64- $<TARGET_OBJECTS :RTSanitizerCommonSymbolizer .${arch} >
65- $<TARGET_OBJECTS :RTSanitizerCommonSymbolizerInternal .${arch} >)
64+ target_compile_features (gwp_asan_tests PRIVATE cxx_std_17 )
65+ target_compile_options (gwp_asan_tests PRIVATE
66+ -O0
67+ -g
68+ -fno-omit-frame-pointer
69+ -fno-optimize-sibling-calls
70+ )
6671
67- add_library (${GWP_ASAN_TEST_RUNTIME} STATIC
68- ${GWP_ASAN_TEST_RUNTIME_OBJECTS} )
72+ if (NOT WIN32 )
73+ target_link_libraries (gwp_asan_tests PRIVATE dl pthread )
74+ endif ()
6975
70- set_target_properties ( ${GWP_ASAN_TEST_RUNTIME} PROPERTIES
71- ARCHIVE_OUTPUT_DIRECTORY ${ CMAKE_CURRENT_BINARY_DIR }
72- FOLDER "Compiler-RT/Tests/Runtime" )
76+ if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU" )
77+ target_link_options ( gwp_asan_tests PRIVATE -rdynamic )
78+ endif ( )
7379
74- set (GwpAsanTestObjects)
75- generate_compiler_rt_tests (GwpAsanTestObjects
76- GwpAsanUnitTests "GwpAsan-${arch} -Test" ${arch}
77- SOURCES ${GWP_ASAN_UNITTESTS} ${COMPILER_RT_GTEST_SOURCE}
78- RUNTIME ${GWP_ASAN_TEST_RUNTIME}
79- DEPS ${GWP_ASAN_UNIT_TEST_HEADERS}
80- CFLAGS ${GWP_ASAN_UNITTEST_CFLAGS}
81- LINK_FLAGS ${GWP_ASAN_UNITTEST_LINK_FLAGS} )
82- set_target_properties (GwpAsanUnitTests PROPERTIES
83- RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR } )
84- endif ()
80+ include (GoogleTest )
81+ gtest_discover_tests (gwp_asan_tests )
0 commit comments