1include_directories(../rtl) 2 3add_custom_target(TsanUnitTests) 4set_target_properties(TsanUnitTests PROPERTIES 5 FOLDER "Compiler-RT Tests") 6 7set(TSAN_UNITTEST_CFLAGS 8 ${TSAN_CFLAGS} 9 ${COMPILER_RT_UNITTEST_CFLAGS} 10 ${COMPILER_RT_GTEST_CFLAGS} 11 -I${COMPILER_RT_SOURCE_DIR}/include 12 -I${COMPILER_RT_SOURCE_DIR}/lib 13 -I${COMPILER_RT_SOURCE_DIR}/lib/tsan/rtl 14 -DGTEST_HAS_RTTI=0) 15 16set(TSAN_TEST_ARCH ${TSAN_SUPPORTED_ARCH}) 17if(APPLE) 18 19 # Create a static library for test dependencies. 20 set(TSAN_TEST_RUNTIME_OBJECTS 21 $<TARGET_OBJECTS:RTTsan_dynamic.osx> 22 $<TARGET_OBJECTS:RTInterception.osx> 23 $<TARGET_OBJECTS:RTSanitizerCommon.osx> 24 $<TARGET_OBJECTS:RTSanitizerCommonLibc.osx> 25 $<TARGET_OBJECTS:RTSanitizerCommonCoverage.osx> 26 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.osx> 27 $<TARGET_OBJECTS:RTUbsan.osx>) 28 set(TSAN_TEST_RUNTIME RTTsanTest) 29 add_library(${TSAN_TEST_RUNTIME} STATIC ${TSAN_TEST_RUNTIME_OBJECTS}) 30 set_target_properties(${TSAN_TEST_RUNTIME} PROPERTIES 31 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 32 33 darwin_filter_host_archs(TSAN_SUPPORTED_ARCH TSAN_TEST_ARCH) 34 list(APPEND TSAN_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS}) 35 36 set(LINK_FLAGS "-lc++") 37 list(APPEND LINK_FLAGS ${DARWIN_osx_LINK_FLAGS}) 38 add_weak_symbols("ubsan" LINK_FLAGS) 39 add_weak_symbols("sanitizer_common" LINK_FLAGS) 40else() 41 set(LINK_FLAGS "-fsanitize=thread;-lstdc++;-lm") 42endif() 43 44set(TSAN_RTL_HEADERS) 45foreach (header ${TSAN_HEADERS}) 46 list(APPEND TSAN_RTL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header}) 47endforeach() 48 49# add_tsan_unittest(<name> 50# SOURCES <sources list> 51# HEADERS <extra headers list>) 52macro(add_tsan_unittest testname) 53 cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN}) 54 if(UNIX) 55 foreach(arch ${TSAN_TEST_ARCH}) 56 set(TsanUnitTestsObjects) 57 generate_compiler_rt_tests(TsanUnitTestsObjects TsanUnitTests 58 "${testname}-${arch}-Test" ${arch} 59 SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE} 60 RUNTIME ${TSAN_TEST_RUNTIME} 61 COMPILE_DEPS ${TEST_HEADERS} ${TSAN_RTL_HEADERS} 62 DEPS gtest tsan 63 CFLAGS ${TSAN_UNITTEST_CFLAGS} 64 LINK_FLAGS ${LINK_FLAGS}) 65 endforeach() 66 endif() 67endmacro() 68 69if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT ANDROID) 70 add_subdirectory(rtl) 71 add_subdirectory(unit) 72endif() 73