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