brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 1bc08bb Raw
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