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