97 lines · plain
1include_directories(../rtl)2 3add_custom_target(TsanUnitTests)4set_target_properties(TsanUnitTests PROPERTIES5 FOLDER "Compiler-RT Tests")6 7set(TSAN_UNITTEST_CFLAGS8 ${COMPILER_RT_UNITTEST_CFLAGS}9 ${COMPILER_RT_GTEST_CFLAGS}10 ${SANITIZER_TEST_CXX_CFLAGS}11 -I${COMPILER_RT_SOURCE_DIR}/include12 -I${COMPILER_RT_SOURCE_DIR}/lib13 -I${COMPILER_RT_SOURCE_DIR}/lib/tsan/rtl14 -DSANITIZER_COMMON_NO_REDEFINE_BUILTINS15 -DGTEST_HAS_RTTI=016 -fno-rtti17)18 19if(COMPILER_RT_TSAN_DEBUG_OUTPUT)20 # Need to match these flags with the runtime.21 list(APPEND TSAN_UNITTEST_CFLAGS -DTSAN_COLLECT_STATS=122 -DTSAN_DEBUG_OUTPUT=2)23endif()24 25append_list_if(COMPILER_RT_HAS_MSSE4_2_FLAG -msse4.2 TSAN_UNITTEST_CFLAGS)26 27set(TSAN_TEST_ARCH ${TSAN_SUPPORTED_ARCH})28 29set(TSAN_UNITTEST_LINK_FLAGS30 ${COMPILER_RT_UNITTEST_LINK_FLAGS}31 ${COMPILER_RT_UNWINDER_LINK_LIBS}32 ${SANITIZER_TEST_CXX_LIBRARIES})33 34if(APPLE)35 36 # Create a static library for test dependencies.37 set(TSAN_TEST_RUNTIME_OBJECTS38 $<TARGET_OBJECTS:RTTsan_dynamic.osx>39 $<TARGET_OBJECTS:RTInterception.osx>40 $<TARGET_OBJECTS:RTSanitizerCommon.osx>41 $<TARGET_OBJECTS:RTSanitizerCommonLibc.osx>42 $<TARGET_OBJECTS:RTSanitizerCommonCoverage.osx>43 $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.osx>44 $<TARGET_OBJECTS:RTUbsan.osx>)45 set(TSAN_TEST_RUNTIME RTTsanTest)46 add_library(${TSAN_TEST_RUNTIME} STATIC ${TSAN_TEST_RUNTIME_OBJECTS})47 set_target_properties(${TSAN_TEST_RUNTIME} PROPERTIES48 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})49 50 darwin_filter_host_archs(TSAN_SUPPORTED_ARCH TSAN_TEST_ARCH)51 list(APPEND TSAN_UNITTEST_CFLAGS ${DARWIN_osx_CFLAGS})52 53 list(APPEND TSAN_UNITTEST_LINK_FLAGS ${DARWIN_osx_LINK_FLAGS})54 add_weak_symbols("ubsan" TSAN_UNITTEST_LINK_FLAGS)55 add_weak_symbols("sanitizer_common" TSAN_UNITTEST_LINK_FLAGS)56else()57 list(APPEND TSAN_UNITTEST_LINK_FLAGS -fsanitize=thread)58 list(APPEND TSAN_UNITTEST_LINK_FLAGS -lm)59 list(APPEND TSAN_UNITTEST_LINK_FLAGS ${COMPILER_RT_TEST_LIBDISPATCH_CFLAGS})60endif()61 62set(TSAN_RTL_HEADERS)63foreach (header ${TSAN_HEADERS})64 list(APPEND TSAN_RTL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header})65endforeach()66 67set(TSAN_DEPS tsan)68# TSan uses C++ standard library headers.69if (TARGET cxx-headers OR HAVE_LIBCXX)70 list(APPEND TSAN_DEPS cxx-headers)71endif()72 73# add_tsan_unittest(<name>74# SOURCES <sources list>75# HEADERS <extra headers list>)76macro(add_tsan_unittest testname)77 cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN})78 if(UNIX)79 foreach(arch ${TSAN_TEST_ARCH})80 set(TsanUnitTestsObjects)81 generate_compiler_rt_tests(TsanUnitTestsObjects TsanUnitTests82 "${testname}-${arch}-Test" ${arch}83 SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE}84 RUNTIME ${TSAN_TEST_RUNTIME}85 COMPILE_DEPS ${TEST_HEADERS} ${TSAN_RTL_HEADERS}86 DEPS ${TSAN_DEPS}87 CFLAGS ${TSAN_UNITTEST_CFLAGS}88 LINK_FLAGS ${TSAN_UNITTEST_LINK_FLAGS})89 endforeach()90 endif()91endmacro()92 93if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT ANDROID)94 add_subdirectory(rtl)95 add_subdirectory(unit)96endif()97