brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.4 KiB · d7d8470 Raw
298 lines · plain
1include_directories(../..)2 3set(TSAN_RTL_CFLAGS ${TSAN_CFLAGS})4append_list_if(COMPILER_RT_HAS_MSSE4_2_FLAG -msse4.2 TSAN_RTL_CFLAGS)5append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=5306               TSAN_RTL_CFLAGS)7append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors8               TSAN_RTL_CFLAGS)9append_list_if(COMPILER_RT_INTERCEPT_LIBDISPATCH ${COMPILER_RT_LIBDISPATCH_CFLAGS}10               TSAN_RTL_CFLAGS)11 12set(TSAN_RTL_DYNAMIC_CFLAGS ${TSAN_RTL_CFLAGS})13list(REMOVE_ITEM TSAN_RTL_DYNAMIC_CFLAGS -fPIE)14 15set(TSAN_DYNAMIC_LINK_LIBS16  ${COMPILER_RT_UNWINDER_LINK_LIBS}17  ${SANITIZER_CXX_ABI_LIBRARIES}18  ${SANITIZER_COMMON_LINK_LIBS})19 20append_list_if(COMPILER_RT_HAS_LIBDL dl TSAN_DYNAMIC_LINK_LIBS)21append_list_if(COMPILER_RT_HAS_LIBM m TSAN_DYNAMIC_LINK_LIBS)22append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread TSAN_DYNAMIC_LINK_LIBS)23 24set(TSAN_SOURCES25  tsan_debugging.cpp26  tsan_external.cpp27  tsan_fd.cpp28  tsan_flags.cpp29  tsan_ignoreset.cpp30  tsan_interceptors_memintrinsics.cpp31  tsan_interceptors_posix.cpp32  tsan_interface.cpp33  tsan_interface_ann.cpp34  tsan_interface_atomic.cpp35  tsan_interface_java.cpp36  tsan_malloc_mac.cpp37  tsan_md5.cpp38  tsan_mman.cpp39  tsan_mutexset.cpp40  tsan_report.cpp41  tsan_rtl.cpp42  tsan_rtl_access.cpp43  tsan_rtl_mutex.cpp44  tsan_rtl_proc.cpp45  tsan_rtl_report.cpp46  tsan_rtl_thread.cpp47  tsan_stack_trace.cpp48  tsan_suppressions.cpp49  tsan_symbolize.cpp50  tsan_sync.cpp51  tsan_vector_clock.cpp52  )53 54set(TSAN_CXX_SOURCES55  tsan_new_delete.cpp56  )57 58set(TSAN_PREINIT_SOURCES59  tsan_preinit.cpp60  )61 62if(APPLE)63  list(APPEND TSAN_SOURCES64    tsan_interceptors_mac.cpp65    tsan_interceptors_mach_vm.cpp66    tsan_platform_mac.cpp67    tsan_platform_posix.cpp68    )69elseif(UNIX)70  # Assume Linux71  list(APPEND TSAN_SOURCES72    tsan_platform_linux.cpp73    tsan_platform_posix.cpp74    )75endif()76 77if(COMPILER_RT_INTERCEPT_LIBDISPATCH)78  list(APPEND TSAN_SOURCES79    tsan_interceptors_libdispatch.cpp80    )81endif()82 83set(TSAN_HEADERS84  tsan_defs.h85  tsan_dense_alloc.h86  tsan_fd.h87  tsan_flags.h88  tsan_flags.inc89  tsan_ignoreset.h90  tsan_ilist.h91  tsan_interceptors.h92  tsan_interface.h93  tsan_interface.inc94  tsan_interface_ann.h95  tsan_interface_java.h96  tsan_mman.h97  tsan_mutexset.h98  tsan_platform.h99  tsan_ppc_regs.h100  tsan_report.h101  tsan_rtl.h102  tsan_shadow.h103  tsan_stack_trace.h104  tsan_suppressions.h105  tsan_symbolize.h106  tsan_sync.h107  tsan_trace.h108  tsan_vector_clock.h109  )110 111set(TSAN_RUNTIME_LIBRARIES)112add_compiler_rt_component(tsan)113 114if("${CMAKE_C_FLAGS}" MATCHES "-Wno-(error=)?unused-command-line-argument")115  set(EXTRA_CFLAGS "-Wno-error=unused-command-line-argument ${EXTRA_CFLAGS}")116endif()117 118if(APPLE)119  # Ideally we would check the SDK version for the actual platform we are120  # building for here.  To make our lifes easier we assume the host SDK setup is121  # sane and use the macOS SDK version as a proxy for aligned SDKs.122  find_darwin_sdk_version(macosx_sdk_version "macosx")123  if ("${macosx_sdk_version}" VERSION_LESS 10.12)124    message(FATAL_ERROR "Building the TSan runtime requires at least macOS SDK 10.12 (or aligned SDK on other platforms)")125  endif()126 127  set(TSAN_ASM_SOURCES128    tsan_rtl_amd64.S129    tsan_rtl_aarch64.S130    )131 132  set(TSAN_LINK_LIBS ${SANITIZER_COMMON_LINK_LIBS})133 134  add_weak_symbols("ubsan" WEAK_SYMBOL_LINK_FLAGS)135  add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)136 137  add_compiler_rt_runtime(clang_rt.tsan138    SHARED139    OS ${TSAN_SUPPORTED_OS}140    ARCHS ${TSAN_SUPPORTED_ARCH}141    SOURCES ${TSAN_SOURCES} ${TSAN_CXX_SOURCES} ${TSAN_ASM_SOURCES}142    ADDITIONAL_HEADERS ${TSAN_HEADERS}143    OBJECT_LIBS RTInterception144                RTSanitizerCommon145                RTSanitizerCommonLibc146                RTSanitizerCommonCoverage147                RTSanitizerCommonSymbolizer148                RTUbsan149    CFLAGS ${TSAN_RTL_CFLAGS}150    LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}151    LINK_LIBS ${TSAN_LINK_LIBS} objc152    PARENT_TARGET tsan)153  add_compiler_rt_object_libraries(RTTsan_dynamic154    OS ${TSAN_SUPPORTED_OS}155    ARCHS ${TSAN_SUPPORTED_ARCH}156    SOURCES ${TSAN_SOURCES} ${TSAN_CXX_SOURCES} ${TSAN_ASM_SOURCES}157    ADDITIONAL_HEADERS ${TSAN_HEADERS}158    CFLAGS ${TSAN_RTL_CFLAGS})159 160  # Build and check Go runtime.161  set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh)162  add_custom_target(GotsanRuntimeCheck163    COMMAND env "CC=${CMAKE_C_COMPILER} ${OSX_SYSROOT_FLAG}"164            EXTRA_CFLAGS=${EXTRA_CFLAGS}165            IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT}166    DEPENDS tsan ${BUILDGO_SCRIPT}167    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go168    COMMENT "Checking TSan Go runtime..."169    VERBATIM)170  set_target_properties(GotsanRuntimeCheck PROPERTIES FOLDER "Compiler-RT/Misc")171else()172  foreach(arch ${TSAN_SUPPORTED_ARCH})173    if(arch STREQUAL "x86_64")174      set(TSAN_ASM_SOURCES175        tsan_rtl_amd64.S176        )177      # Check for Go runtime.178      set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh)179      add_custom_target(GotsanRuntimeCheck180        COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}"181                EXTRA_CFLAGS=${EXTRA_CFLAGS}182                IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT}183        DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT}184        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go185        COMMENT "Checking TSan Go runtime..."186        VERBATIM)187    elseif(arch STREQUAL "aarch64")188      set(TSAN_ASM_SOURCES189        tsan_rtl_aarch64.S190        )191      # Check for Go runtime.192      set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh)193      add_custom_target(GotsanRuntimeCheck194	COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}"195		EXTRA_CFLAGS=${EXTRA_CFLAGS}196		IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT}197	DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT}198	WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go199	COMMENT "Checking TSan Go runtime..."200	VERBATIM)201    elseif(arch MATCHES "powerpc64|powerpc64le")202      set(TSAN_ASM_SOURCES203        tsan_rtl_ppc64.S204        )205      # Check for Go runtime.206      set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh)207      add_custom_target(GotsanRuntimeCheck208	COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}"209		EXTRA_CFLAGS=${EXTRA_CFLAGS}210		IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT}211	DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT}212	WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go213	COMMENT "Checking TSan Go runtime..."214	VERBATIM)215    elseif(arch MATCHES "loongarch64")216      set(TSAN_ASM_SOURCES217        tsan_rtl_loongarch64.S218        )219    elseif(arch MATCHES "mips64|mips64le")220      set(TSAN_ASM_SOURCES221        tsan_rtl_mips64.S222        )223    elseif(arch MATCHES "riscv64")224      set(TSAN_ASM_SOURCES225        tsan_rtl_riscv64.S226        )227    elseif(arch MATCHES "s390x")228      set(TSAN_ASM_SOURCES229        tsan_rtl_s390x.S230        )231      # Check for Go runtime.232      set(BUILDGO_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../go/buildgo.sh)233      add_custom_target(GotsanRuntimeCheck234	COMMAND env "CC=${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}"235		EXTRA_CFLAGS=${EXTRA_CFLAGS}236		IN_TMPDIR=1 SILENT=1 ${BUILDGO_SCRIPT}237	DEPENDS clang_rt.tsan-${arch} ${BUILDGO_SCRIPT}238	WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../go239	COMMENT "Checking TSan Go runtime..."240	VERBATIM)241    else()242      set(TSAN_ASM_SOURCES)243    endif()244    add_compiler_rt_runtime(clang_rt.tsan245      STATIC246      ARCHS ${arch}247      SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES} ${TSAN_PREINIT_SOURCES}248              $<TARGET_OBJECTS:RTInterception.${arch}>249              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>250              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>251              $<TARGET_OBJECTS:RTSanitizerCommonCoverage.${arch}>252              $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.${arch}>253              $<TARGET_OBJECTS:RTSanitizerCommonSymbolizerInternal.${arch}>254              $<TARGET_OBJECTS:RTUbsan.${arch}>255      ADDITIONAL_HEADERS ${TSAN_HEADERS}256      CFLAGS ${TSAN_RTL_CFLAGS}257      PARENT_TARGET tsan)258    add_compiler_rt_runtime(clang_rt.tsan_cxx259      STATIC260      ARCHS ${arch}261      SOURCES ${TSAN_CXX_SOURCES}262      ADDITIONAL_HEADERS ${TSAN_HEADERS}263      CFLAGS ${TSAN_RTL_CFLAGS}264      PARENT_TARGET tsan)265    list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch}266                                       clang_rt.tsan_cxx-${arch})267    add_compiler_rt_runtime(clang_rt.tsan268      SHARED269      ARCHS ${arch}270      SOURCES ${TSAN_SOURCES} ${TSAN_ASM_SOURCES}271              $<TARGET_OBJECTS:RTInterception.${arch}>272              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>273              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>274              $<TARGET_OBJECTS:RTSanitizerCommonCoverage.${arch}>275              $<TARGET_OBJECTS:RTSanitizerCommonSymbolizer.${arch}>276              $<TARGET_OBJECTS:RTSanitizerCommonSymbolizerInternal.${arch}>277              $<TARGET_OBJECTS:RTUbsan.${arch}>278      ADDITIONAL_HEADERS ${TSAN_HEADERS}279      CFLAGS ${TSAN_RTL_DYNAMIC_CFLAGS}280      DEFS SANITIZER_SHARED281      LINK_LIBS ${TSAN_DYNAMIC_LINK_LIBS}282      LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS}283      PARENT_TARGET tsan)284    add_sanitizer_rt_symbols(clang_rt.tsan285      ARCHS ${arch}286      EXTRA tsan.syms.extra)287    add_sanitizer_rt_symbols(clang_rt.tsan_cxx288      ARCHS ${arch}289      EXTRA tsan.syms.extra)290    add_dependencies(tsan clang_rt.tsan-${arch}291                          clang_rt.tsan_cxx-${arch}292                          clang_rt.tsan-${arch}-symbols293                          clang_rt.tsan_cxx-${arch}-symbols)294  endforeach()295endif()296 297 298