CMakeLists.txt revision 392c50d4a56557a51a353509c665188aef115f74
1583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oinclude(CompilerRTCompile)
2583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
3583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oset(SANITIZER_UNITTESTS
4583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_allocator_test.cc
5583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_common_test.cc
6583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_flags_test.cc
7583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_libc_test.cc
8583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_list_test.cc
9583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_mutex_test.cc
10583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_printf_test.cc
11583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_scanf_interceptor_test.cc
12583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_stackdepot_test.cc
13583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  sanitizer_test_main.cc
14583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  )
15583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
16583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oset(SANITIZER_TEST_HEADERS)
17583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oforeach(header ${SANITIZER_HEADERS})
18583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  list(APPEND SANITIZER_TEST_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header})
19583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendforeach()
20583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
21583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oinclude_directories(..)
22583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oinclude_directories(../..)
23583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
24583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# Adds static library which contains sanitizer_common object file
25583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# (universal binary on Mac and arch-specific object files on Linux).
26583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'omacro(add_sanitizer_common_lib library)
27583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  add_library(${library} STATIC ${ARGN})
28583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set_target_properties(${library} PROPERTIES
29583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
30583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendmacro()
31b5ffeadece25f7dca04847dfc013e979fe36e3a6Theodore Ts'o
32b5ffeadece25f7dca04847dfc013e979fe36e3a6Theodore Ts'ofunction(get_sanitizer_common_lib_for_arch arch lib lib_name)
33583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  if(APPLE)
34583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    set(tgt_name "RTSanitizerCommon.test.osx")
35583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  else()
36583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    set(tgt_name "RTSanitizerCommon.test.${arch}")
37cd668fdd11c7dd9607fdd5bb1e8a65e2e120e05fTheodore Ts'o  endif()
380f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o  set(${lib} "${tgt_name}" PARENT_SCOPE)
39583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set(${lib_name} "lib${tgt_name}.a" PARENT_SCOPE)
40b5ffeadece25f7dca04847dfc013e979fe36e3a6Theodore Ts'oendfunction()
41583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
42583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# Sanitizer_common unit tests testsuite.
43583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oadd_custom_target(SanitizerUnitTests)
44583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oset_target_properties(SanitizerUnitTests PROPERTIES
45583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  FOLDER "Sanitizer unittests")
46583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
47583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o# Adds sanitizer tests for architecture.
48efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'omacro(add_sanitizer_tests_for_arch arch)
49583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  get_target_flags_for_arch(${arch} TARGET_FLAGS)
50583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set(SANITIZER_TEST_SOURCES ${SANITIZER_UNITTESTS}
51583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                             ${COMPILER_RT_GTEST_SOURCE})
52583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set(SANITIZER_TEST_CFLAGS ${COMPILER_RT_GTEST_INCLUDE_CFLAGS}
53583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                            -I${COMPILER_RT_SOURCE_DIR}/include
54583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                            -I${COMPILER_RT_SOURCE_DIR}/lib
55efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o                            -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common
56583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                            -O2 -g ${TARGET_FLAGS})
57583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set(SANITIZER_TEST_LINK_FLAGS -lstdc++ -lpthread ${TARGET_FLAGS})
58583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set(SANITIZER_TEST_OBJECTS)
59583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  foreach(source ${SANITIZER_TEST_SOURCES})
60583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    get_filename_component(basename ${source} NAME)
61583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    set(output_obj "${basename}.${arch}.o")
62583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    clang_compile(${output_obj} ${source}
63583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                  CFLAGS ${SANITIZER_TEST_CFLAGS}
64583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                  DEPS gtest ${SANITIZER_RUNTIME_LIBRARIES}
65583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                       ${SANITIZER_TEST_HEADERS})
66583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    list(APPEND SANITIZER_TEST_OBJECTS ${output_obj})
67583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  endforeach()
68583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  get_sanitizer_common_lib_for_arch(${arch} SANITIZER_COMMON_LIB
69583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                                    SANITIZER_COMMON_LIB_NAME)
70583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  # Add unittest target.
71583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set(SANITIZER_TEST_NAME "Sanitizer-${arch}-Test")
72583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  add_compiler_rt_test(SanitizerUnitTests ${SANITIZER_TEST_NAME}
73583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                       OBJECTS ${SANITIZER_TEST_OBJECTS}
74583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                               ${SANITIZER_COMMON_LIB_NAME}
75583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                       DEPS ${SANITIZER_TEST_OBJECTS} ${SANITIZER_COMMON_LIB}
76583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                       LINK_FLAGS ${SANITIZER_TEST_LINK_FLAGS})
77583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendmacro()
78583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
79583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oif(COMPILER_RT_CAN_EXECUTE_TESTS)
80583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  # We use just-built clang to build sanitizer_common unittests, so we must
81583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  # be sure that produced binaries would work.
82583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  if(APPLE)
83583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    add_sanitizer_common_lib("RTSanitizerCommon.test.osx"
84583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                             $<TARGET_OBJECTS:RTSanitizerCommon.osx>)
85583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  else()
86583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    if(CAN_TARGET_x86_64)
87583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o      add_sanitizer_common_lib("RTSanitizerCommon.test.x86_64"
88583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                               $<TARGET_OBJECTS:RTSanitizerCommon.x86_64>)
89583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    endif()
90583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    if(CAN_TARGET_i386)
91583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o      add_sanitizer_common_lib("RTSanitizerCommon.test.i386"
92583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o                               $<TARGET_OBJECTS:RTSanitizerCommon.i386>)
93583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    endif()
94583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  endif()
95583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  if(CAN_TARGET_x86_64)
967c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o    add_sanitizer_tests_for_arch(x86_64)
97583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  endif()
98583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  if(CAN_TARGET_i386)
99583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    add_sanitizer_tests_for_arch(i386)
100583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  endif()
101583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
102583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  # Run unittests as a part of lit testsuite.
1037c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o  configure_lit_site_cfg(
1047c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
1057c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o    ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
1067c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o    )
107583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
108583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  add_lit_testsuite(check-sanitizer "Running sanitizer library unittests"
109583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    ${CMAKE_CURRENT_BINARY_DIR}
110583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    DEPENDS SanitizerUnitTests
111583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    )
112583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set_target_properties(check-sanitizer PROPERTIES FOLDER "Sanitizer unittests")
113583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendif()
114583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o
115583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oif(ANDROID)
116583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  # We assume that unit tests on Android are built in a build
117583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  # tree with fresh Clang as a host compiler.
118583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  add_executable(SanitizerTest
119583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    ${SANITIZER_UNITTESTS}
120583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    ${COMPILER_RT_GTEST_SOURCE}
121583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    $<TARGET_OBJECTS:RTSanitizerCommon.arm.android>
122583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    )
123583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set_target_compile_flags(SanitizerTest
124583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    ${SANITIZER_COMMON_CFLAGS}
125583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    ${COMPILER_RT_GTEST_INCLUDE_CFLAGS}
126583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    -I${COMPILER_RT_SOURCE_DIR}/include
127583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    -I${COMPILER_RT_SOURCE_DIR}/lib
128583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common
129583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    -O2 -g
130583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    )
131583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  # Setup correct output directory and link flags.
132583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  get_unittest_directory(OUTPUT_DIR)
133583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set_target_properties(SanitizerTest PROPERTIES
134583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o    RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIR})
135583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  set_target_link_flags(SanitizerTest ${SANITIZER_TEST_LINK_FLAGS})
136efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o  # Add unit test to test suite.
137583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o  add_dependencies(SanitizerUnitTests SanitizerTest)
138583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oendif()
139583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o