CMakeLists.txt revision 0414b25ab6bd328b96bd48a70382954f30894edf
1include(CompilerRTCompile)
2include(CompilerRTUnittests)
3
4set(SANITIZER_UNITTESTS
5  sanitizer_allocator_test.cc
6  sanitizer_common_test.cc
7  sanitizer_flags_test.cc
8  sanitizer_libc_test.cc
9  sanitizer_list_test.cc
10  sanitizer_printf_test.cc
11  sanitizer_stackdepot_test.cc
12  sanitizer_test_main.cc
13  )
14
15include_directories(..)
16include_directories(../..)
17
18# Sanitizer_common unit tests testsuite.
19add_custom_target(SanitizerUnitTests)
20set_target_properties(SanitizerUnitTests PROPERTIES
21  FOLDER "Sanitizer unittests")
22
23# Adds sanitizer tests for architecture.
24macro(add_sanitizer_tests_for_arch arch)
25  get_target_flags_for_arch(${arch} TARGET_FLAGS)
26  set(SANITIZER_TEST_SOURCES ${SANITIZER_UNITTESTS}
27                             ${COMPILER_RT_GTEST_SOURCE})
28  set(SANITIZER_TEST_CFLAGS ${COMPILER_RT_GTEST_INCLUDE_CFLAGS}
29                            -I${COMPILER_RT_SOURCE_DIR}/include
30                            -I${COMPILER_RT_SOURCE_DIR}/lib
31                            -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common
32                            -O2 -g ${TARGET_FLAGS})
33  set(SANITIZER_TEST_LINK_FLAGS -lstdc++ -lpthread ${TARGET_FLAGS})
34  set(SANITIZER_TEST_OBJECTS)
35  foreach(source ${SANITIZER_TEST_SOURCES})
36    get_filename_component(basename ${source} NAME)
37    set(output_obj "${basename}.${arch}.o")
38    clang_compile(${output_obj} ${source}
39                  CFLAGS ${SANITIZER_TEST_CFLAGS}
40                  DEPS gtest ${SANITIZER_RUNTIME_LIBRARIES})
41    list(APPEND SANITIZER_TEST_OBJECTS ${output_obj})
42  endforeach()
43  # Add static library which contains sanitizer_common
44  # object files for given arch.
45  set(SANITIZER_COMMON_LIB "RTSanitizerCommon.test.${arch}")
46  add_library(${SANITIZER_COMMON_LIB} STATIC
47              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>)
48  set_target_properties(${SANITIZER_COMMON_LIB} PROPERTIES
49    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
50  set(SANITIZER_COMMON_LIB_NAME "lib${SANITIZER_COMMON_LIB}.a")
51  add_custom_target(${SANITIZER_COMMON_LIB_NAME}
52    DEPENDS ${SANITIZER_COMMON_LIB})
53  # Add unittest target.
54  set(SANITIZER_TEST_NAME "Sanitizer-${arch}-Test")
55  add_compiler_rt_test(SanitizerUnitTests ${SANITIZER_TEST_NAME}
56                       OBJECTS ${SANITIZER_TEST_OBJECTS}
57                               ${SANITIZER_COMMON_LIB_NAME}
58                       LINK_FLAGS ${SANITIZER_TEST_LINK_FLAGS})
59endmacro()
60
61if("${CMAKE_HOST_SYSTEM}" STREQUAL "${CMAKE_SYSTEM}" AND UNIX AND NOT ANDROID)
62  if(CAN_TARGET_X86_64)
63    add_sanitizer_tests_for_arch(x86_64)
64  endif()
65  if(CAN_TARGET_I386)
66    add_sanitizer_tests_for_arch(i386)
67  endif()
68endif()
69
70# Run unittests as a part of lit testsuite.
71configure_lit_site_cfg(
72  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
73  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
74  )
75
76add_lit_testsuite(check-sanitizer "Running sanitizer library unittests"
77  ${CMAKE_CURRENT_BINARY_DIR}
78  DEPENDS SanitizerUnitTests
79  )
80set_target_properties(check-sanitizer PROPERTIES FOLDER "Sanitizer unittests")
81