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