Home | History | Annotate | Line # | Download | only in tests
      1 include_directories(../rtl)
      2 
      3 add_custom_target(TsanUnitTests)
      4 set_target_properties(TsanUnitTests PROPERTIES
      5   FOLDER "Compiler-RT Tests")
      6 
      7 set(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 
     16 set(TSAN_TEST_ARCH ${TSAN_SUPPORTED_ARCH})
     17 if(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)
     40 else()
     41   set(LINK_FLAGS "-fsanitize=thread;-lstdc++;-lm")
     42 endif()
     43 
     44 set(TSAN_RTL_HEADERS)
     45 foreach (header ${TSAN_HEADERS})
     46   list(APPEND TSAN_RTL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header})
     47 endforeach()
     48 
     49 # add_tsan_unittest(<name>
     50 #                   SOURCES <sources list>
     51 #                   HEADERS <extra headers list>)
     52 macro(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()
     67 endmacro()
     68 
     69 if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT ANDROID)
     70   add_subdirectory(rtl)
     71   add_subdirectory(unit)
     72 endif()
     73