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