CMakeLists.txt revision d9760ab05f99451ffe7528a3e03e98ab67e09383
1# Build for the ThreadSanitizer runtime support library. 2 3include_directories(..) 4 5# SANITIZER_COMMON_CFLAGS contains -fPIC, but it's performance-critical for 6# TSan runtime to be built with -fPIE to reduce the number of register spills. 7set(TSAN_CFLAGS 8 ${SANITIZER_COMMON_CFLAGS} 9 -fPIE 10 -fno-rtti) 11# FIXME: Add support for compile flags: 12# -Wframe-larger-than=512, 13# -Wglobal-constructors, 14# --sysroot=. 15 16if("${CMAKE_BUILD_TYPE}" EQUAL "Release") 17 set(TSAN_COMMON_DEFINITIONS DEBUG=0) 18else() 19 set(TSAN_COMMON_DEFINITIONS DEBUG=1) 20endif() 21 22set(TSAN_SOURCES 23 rtl/tsan_clock.cc 24 rtl/tsan_flags.cc 25 rtl/tsan_fd.cc 26 rtl/tsan_interceptors.cc 27 rtl/tsan_interface_ann.cc 28 rtl/tsan_interface_atomic.cc 29 rtl/tsan_interface.cc 30 rtl/tsan_interface_java.cc 31 rtl/tsan_md5.cc 32 rtl/tsan_mman.cc 33 rtl/tsan_mutex.cc 34 rtl/tsan_mutexset.cc 35 rtl/tsan_report.cc 36 rtl/tsan_rtl.cc 37 rtl/tsan_rtl_mutex.cc 38 rtl/tsan_rtl_report.cc 39 rtl/tsan_rtl_thread.cc 40 rtl/tsan_stat.cc 41 rtl/tsan_suppressions.cc 42 rtl/tsan_symbolize.cc 43 rtl/tsan_sync.cc) 44 45if(APPLE) 46 list(APPEND TSAN_SOURCES rtl/tsan_platform_mac.cc) 47elseif(UNIX) 48 # Assume Linux 49 list(APPEND TSAN_SOURCES 50 rtl/tsan_platform_linux.cc 51 rtl/tsan_symbolize_addr2line_linux.cc) 52endif() 53 54set(TSAN_RUNTIME_LIBRARIES) 55# TSan is currently supported on 64-bit Linux only. 56if(CAN_TARGET_x86_64 AND UNIX AND NOT APPLE) 57 set(TSAN_ASM_SOURCES rtl/tsan_rtl_amd64.S) 58 # Pass ASM file directly to the C++ compiler. 59 set_source_files_properties(${TSAN_ASM_SOURCES} PROPERTIES 60 LANGUAGE C) 61 set(arch "x86_64") 62 add_compiler_rt_static_runtime(clang_rt.tsan-${arch} ${arch} 63 SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES} 64 $<TARGET_OBJECTS:RTInterception.${arch}> 65 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}> 66 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}> 67 CFLAGS ${TSAN_CFLAGS} 68 DEFS ${TSAN_COMMON_DEFINITIONS}) 69 add_sanitizer_rt_symbols(clang_rt.tsan-${arch} rtl/tsan.syms.extra) 70 list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch} 71 clang_rt.tsan-${arch}-symbols) 72endif() 73 74if(LLVM_INCLUDE_TESTS) 75 add_subdirectory(tests) 76endif() 77add_subdirectory(lit_tests) 78