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}) 17 18set(LINK_FLAGS ${COMPILER_RT_UNITTEST_LINK_FLAGS}) 19foreach(lib ${SANITIZER_TEST_CXX_LIBRARIES}) 20 list(APPEND LINK_FLAGS -l${lib}) 21endforeach() 22 23if(APPLE) 24 25 # Create a static library for test dependencies. 26 set(TSAN_TEST_RUNTIME_OBJECTS 27 $<TARGET_OBJECTS:RTTsan_dynamic.osx> 28 $<TARGET_OBJECTS:RTInterception.osx> 29 $<TARGET_OBJECTS:RTSanitizerCommon.osx> 30 $<TARGET_OBJECTS:RTSanitizerCommonLibc.osx> 31 $<TARGET_OBJECTS:RTSanitizerCommonCoverage.osx> 32 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.osx> 33 $<TARGET_OBJECTS:RTUbsan.osx>) 34 set(TSAN_TEST_RUNTIME RTTsanTest) 35 add_library(${TSAN_TEST_RUNTIME} STATIC ${TSAN_TEST_RUNTIME_OBJECTS}) 36 set_target_properties(${TSAN_TEST_RUNTIME} PROPERTIES 37 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 38 39 darwin_filter_host_archs(TSAN_SUPPORTED_ARCH TSAN_TEST_ARCH) 40 list(APPEND TSAN_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS}) 41 42 list(APPEND LINK_FLAGS ${DARWIN_osx_LINK_FLAGS}) 43 add_weak_symbols("ubsan" LINK_FLAGS) 44 add_weak_symbols("sanitizer_common" LINK_FLAGS) 45else() 46 list(APPEND LINK_FLAGS -fsanitize=thread) 47 list(APPEND LINK_FLAGS -lm) 48 list(APPEND LINK_FLAGS ${COMPILER_RT_TEST_LIBDISPATCH_CFLAGS}) 49endif() 50 51set(TSAN_RTL_HEADERS) 52foreach (header ${TSAN_HEADERS}) 53 list(APPEND TSAN_RTL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header}) 54endforeach() 55 56# add_tsan_unittest(<name> 57# SOURCES <sources list> 58# HEADERS <extra headers list>) 59macro(add_tsan_unittest testname) 60 cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN}) 61 if(UNIX) 62 foreach(arch ${TSAN_TEST_ARCH}) 63 set(TsanUnitTestsObjects) 64 generate_compiler_rt_tests(TsanUnitTestsObjects TsanUnitTests 65 "${testname}-${arch}-Test" ${arch} 66 SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE} 67 RUNTIME ${TSAN_TEST_RUNTIME} 68 COMPILE_DEPS ${TEST_HEADERS} ${TSAN_RTL_HEADERS} 69 DEPS gtest tsan 70 CFLAGS ${TSAN_UNITTEST_CFLAGS} 71 LINK_FLAGS ${LINK_FLAGS}) 72 endforeach() 73 endif() 74endmacro() 75 76if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT ANDROID) 77 add_subdirectory(rtl) 78 add_subdirectory(unit) 79endif() 80