diff --git a/compiler-rt/lib/tsan/CMakeLists.txt b/compiler-rt/lib/tsan/CMakeLists.txt --- a/compiler-rt/lib/tsan/CMakeLists.txt +++ b/compiler-rt/lib/tsan/CMakeLists.txt @@ -114,6 +114,11 @@ set(TSAN_RUNTIME_LIBRARIES) add_compiler_rt_component(tsan) +# TSAN uses headers provided by libcxx (errno.h, stdio.h, ...). +if (TARGET cxx-headers OR HAVE_LIBCXX) + set(TSAN_DEPS cxx-headers) +endif() + if("${CMAKE_C_FLAGS}" MATCHES "-Wno-(error=)?unused-command-line-argument") set(EXTRA_CFLAGS "-Wno-error=unused-command-line-argument ${EXTRA_CFLAGS}") endif() @@ -152,13 +157,15 @@ CFLAGS ${TSAN_RTL_CFLAGS} LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} LINK_LIBS ${TSAN_LINK_LIBS} objc - PARENT_TARGET tsan) + PARENT_TARGET tsan + DEPS ${TSAN_DEPS}) add_compiler_rt_object_libraries(RTTsan_dynamic OS ${TSAN_SUPPORTED_OS} ARCHS ${TSAN_SUPPORTED_ARCH} SOURCES ${TSAN_SOURCES} ${TSAN_CXX_SOURCES} ${TSAN_ASM_SOURCES} ADDITIONAL_HEADERS ${TSAN_HEADERS} - CFLAGS ${TSAN_RTL_CFLAGS}) + CFLAGS ${TSAN_RTL_CFLAGS} + DEPS ${TSAN_DEPS}) # Build and check Go runtime. set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/go/buildgo.sh) @@ -248,7 +255,8 @@ $ ADDITIONAL_HEADERS ${TSAN_HEADERS} CFLAGS ${TSAN_RTL_CFLAGS} - PARENT_TARGET tsan) + PARENT_TARGET tsan + DEPS ${TSAN_DEPS}) add_compiler_rt_runtime(clang_rt.tsan_cxx STATIC ARCHS ${arch} @@ -256,7 +264,8 @@ $ ADDITIONAL_HEADERS ${TSAN_HEADERS} CFLAGS ${TSAN_RTL_CFLAGS} - PARENT_TARGET tsan) + PARENT_TARGET tsan + DEPS ${TSAN_DEPS}) list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch} clang_rt.tsan_cxx-${arch}) add_sanitizer_rt_symbols(clang_rt.tsan