forked from OSchip/llvm-project
[tsan] CMake support for TSan on OS X
Hi, this patch adds a CMake flag called `COMPILER_RT_ENABLE_TSAN_OSX`, which is off by default. If enabled, the build system will be building the OS X version of the TSan runtime library (called `libclang_rt.tsan_osx_dynamic.dylib`). I'll submit patches that fix OS X build errors shortly. This is part of an effort to port TSan to OS X, and it's one the very first steps. Don't expect TSan on OS X to actually work or pass tests at this point. llvm-svn: 251915
This commit is contained in:
parent
115f0f365d
commit
c9249498ce
|
@ -290,6 +290,7 @@ if(APPLE)
|
|||
set(SANITIZER_COMMON_SUPPORTED_OS osx)
|
||||
set(BUILTIN_SUPPORTED_OS osx)
|
||||
set(PROFILE_SUPPORTED_OS osx)
|
||||
set(TSAN_SUPPORTED_OS osx)
|
||||
if(NOT SANITIZER_MIN_OSX_VERSION)
|
||||
string(REGEX MATCH "-mmacosx-version-min=([.0-9]+)"
|
||||
MACOSX_VERSION_MIN_FLAG "${CMAKE_CXX_FLAGS}")
|
||||
|
@ -547,6 +548,13 @@ else()
|
|||
set(COMPILER_RT_HAS_TSAN FALSE)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
option(COMPILER_RT_ENABLE_TSAN_OSX "Enable building TSan for OS X - Experimental" Off)
|
||||
if(COMPILER_RT_ENABLE_TSAN_OSX)
|
||||
set(COMPILER_RT_HAS_TSAN TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND
|
||||
OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows")
|
||||
set(COMPILER_RT_HAS_UBSAN TRUE)
|
||||
|
|
|
@ -83,52 +83,66 @@ set(TSAN_HEADERS
|
|||
set(TSAN_RUNTIME_LIBRARIES)
|
||||
add_custom_target(tsan)
|
||||
|
||||
foreach(arch ${TSAN_SUPPORTED_ARCH})
|
||||
if(arch STREQUAL "x86_64")
|
||||
set(TSAN_ASM_SOURCES rtl/tsan_rtl_amd64.S)
|
||||
# Pass ASM file directly to the C++ compiler.
|
||||
set_source_files_properties(${TSAN_ASM_SOURCES} PROPERTIES
|
||||
LANGUAGE C)
|
||||
# Sanity check for Go runtime.
|
||||
set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh)
|
||||
add_custom_target(GotsanRuntimeCheck
|
||||
COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}"
|
||||
IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT}
|
||||
DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/go
|
||||
COMMENT "Checking TSan Go runtime..."
|
||||
VERBATIM)
|
||||
else()
|
||||
set(TSAN_ASM_SOURCES)
|
||||
endif()
|
||||
if(APPLE)
|
||||
add_compiler_rt_runtime(clang_rt.tsan
|
||||
STATIC
|
||||
ARCHS ${arch}
|
||||
SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES}
|
||||
$<TARGET_OBJECTS:RTInterception.${arch}>
|
||||
$<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
|
||||
$<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
|
||||
$<TARGET_OBJECTS:RTUbsan.${arch}>
|
||||
CFLAGS ${TSAN_RTL_CFLAGS})
|
||||
add_compiler_rt_runtime(clang_rt.tsan_cxx
|
||||
STATIC
|
||||
ARCHS ${arch}
|
||||
SOURCES ${TSAN_CXX_SOURCES}
|
||||
$<TARGET_OBJECTS:RTUbsan_cxx.${arch}>
|
||||
CFLAGS ${TSAN_RTL_CFLAGS})
|
||||
list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch}
|
||||
clang_rt.tsan_cxx-${arch})
|
||||
add_sanitizer_rt_symbols(clang_rt.tsan
|
||||
ARCHS ${arch}
|
||||
EXTRA rtl/tsan.syms.extra)
|
||||
add_sanitizer_rt_symbols(clang_rt.tsan_cxx
|
||||
ARCHS ${arch}
|
||||
EXTRA rtl/tsan.syms.extra)
|
||||
add_dependencies(tsan clang_rt.tsan-${arch}
|
||||
clang_rt.tsan_cxx-${arch}
|
||||
clang_rt.tsan-${arch}-symbols
|
||||
clang_rt.tsan_cxx-${arch}-symbols)
|
||||
endforeach()
|
||||
SHARED
|
||||
OS ${TSAN_SUPPORTED_OS}
|
||||
ARCHS ${TSAN_SUPPORTED_ARCH}
|
||||
SOURCES ${TSAN_SOURCES}
|
||||
OBJECT_LIBS RTInterception
|
||||
RTSanitizerCommon
|
||||
RTSanitizerCommonLibc
|
||||
RTUbsan
|
||||
CFLAGS ${TSAN_RTL_CFLAGS}
|
||||
PARENT_TARGET tsan)
|
||||
else()
|
||||
foreach(arch ${TSAN_SUPPORTED_ARCH})
|
||||
if(arch STREQUAL "x86_64")
|
||||
set(TSAN_ASM_SOURCES rtl/tsan_rtl_amd64.S)
|
||||
# Pass ASM file directly to the C++ compiler.
|
||||
set_source_files_properties(${TSAN_ASM_SOURCES} PROPERTIES
|
||||
LANGUAGE C)
|
||||
# Sanity check for Go runtime.
|
||||
set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh)
|
||||
add_custom_target(GotsanRuntimeCheck
|
||||
COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}"
|
||||
IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT}
|
||||
DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/go
|
||||
COMMENT "Checking TSan Go runtime..."
|
||||
VERBATIM)
|
||||
else()
|
||||
set(TSAN_ASM_SOURCES)
|
||||
endif()
|
||||
add_compiler_rt_runtime(clang_rt.tsan
|
||||
STATIC
|
||||
ARCHS ${arch}
|
||||
SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES}
|
||||
$<TARGET_OBJECTS:RTInterception.${arch}>
|
||||
$<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
|
||||
$<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
|
||||
$<TARGET_OBJECTS:RTUbsan.${arch}>
|
||||
CFLAGS ${TSAN_RTL_CFLAGS})
|
||||
add_compiler_rt_runtime(clang_rt.tsan_cxx
|
||||
STATIC
|
||||
ARCHS ${arch}
|
||||
SOURCES ${TSAN_CXX_SOURCES}
|
||||
$<TARGET_OBJECTS:RTUbsan_cxx.${arch}>
|
||||
CFLAGS ${TSAN_RTL_CFLAGS})
|
||||
list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch}
|
||||
clang_rt.tsan_cxx-${arch})
|
||||
add_sanitizer_rt_symbols(clang_rt.tsan
|
||||
ARCHS ${arch}
|
||||
EXTRA rtl/tsan.syms.extra)
|
||||
add_sanitizer_rt_symbols(clang_rt.tsan_cxx
|
||||
ARCHS ${arch}
|
||||
EXTRA rtl/tsan.syms.extra)
|
||||
add_dependencies(tsan clang_rt.tsan-${arch}
|
||||
clang_rt.tsan_cxx-${arch}
|
||||
clang_rt.tsan-${arch}-symbols
|
||||
clang_rt.tsan_cxx-${arch}-symbols)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
add_dependencies(compiler-rt tsan)
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
set(TSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
|
||||
if(NOT ${COMPILER_RT_DEFAULT_TARGET_ARCH} MATCHES "mips")
|
||||
if(NOT ${COMPILER_RT_DEFAULT_TARGET_ARCH} MATCHES "mips" AND NOT APPLE)
|
||||
list(APPEND TSAN_TEST_DEPS GotsanRuntimeCheck)
|
||||
endif()
|
||||
if(NOT COMPILER_RT_STANDALONE_BUILD)
|
||||
|
|
Loading…
Reference in New Issue