455 lines · plain
1# Build for all components of the XRay runtime support library.2 3# XRay runtime library implementation files.4set(XRAY_SOURCES5 xray_buffer_queue.cpp6 xray_init.cpp7 xray_flags.cpp8 xray_interface.cpp9 xray_log_interface.cpp10 xray_utils.cpp11 )12 13set(XRAY_DSO_SOURCES14 xray_dso_init.cpp15 )16 17# Implementation files for all XRay modes.18set(XRAY_FDR_MODE_SOURCES19 xray_fdr_flags.cpp20 xray_fdr_logging.cpp21 )22 23set(XRAY_BASIC_MODE_SOURCES24 xray_basic_flags.cpp25 xray_basic_logging.cpp26 )27 28set(XRAY_PROFILING_MODE_SOURCES29 xray_profile_collector.cpp30 xray_profiling.cpp31 xray_profiling_flags.cpp32 )33 34# Implementation files for all XRay architectures.35set(x86_64_SOURCES36 xray_x86_64.cpp37 xray_trampoline_x86_64.S38 )39 40set(x86_64_DSO_SOURCES41 xray_trampoline_x86_64.S42 )43 44 45set(arm_SOURCES46 xray_arm.cpp47 xray_trampoline_arm.S48 )49 50set(armhf_SOURCES51 ${arm_SOURCES}52 )53 54set(aarch64_SOURCES55 xray_AArch64.cpp56 xray_trampoline_AArch64.S57 )58 59set(aarch64_DSO_SOURCES60 xray_trampoline_AArch64.S61 )62 63set(loongarch64_SOURCES64 xray_loongarch64.cpp65 xray_trampoline_loongarch64.S66 )67 68set(mips_SOURCES69 xray_mips.cpp70 xray_trampoline_mips.S71 )72 73set(mipsel_SOURCES74 xray_mips.cpp75 xray_trampoline_mips.S76 )77 78set(mips64_SOURCES79 xray_mips64.cpp80 xray_trampoline_mips64.S81 )82 83set(mips64el_SOURCES84 xray_mips64.cpp85 xray_trampoline_mips64.S86 )87 88set(powerpc64le_SOURCES89 xray_powerpc64.cpp90 xray_trampoline_powerpc64.cpp91 xray_trampoline_powerpc64_asm.S92 )93 94set(hexagon_SOURCES95 xray_hexagon.cpp96 xray_trampoline_hexagon.S97 )98 99set(riscv32_SOURCES100 xray_riscv.cpp101 xray_trampoline_riscv32.S102 )103 104set(riscv64_SOURCES105 xray_riscv.cpp106 xray_trampoline_riscv64.S107 )108 109 set(s390x_SOURCES110 xray_s390x.cpp111 xray_trampoline_s390x.S112 )113# Enable vector instructions in the assembly file.114set_source_files_properties(xray_trampoline_s390x.S PROPERTIES COMPILE_FLAGS -march=z13)115 116set(XRAY_SOURCE_ARCHS117 arm118 armhf119 aarch64120 hexagon121 mips122 mipsel123 mips64124 mips64el125 powerpc64le126 s390x127 x86_64128 )129 130set(XRAY_IMPL_HEADERS131 xray_allocator.h132 xray_basic_flags.h133 xray_basic_flags.inc134 xray_basic_logging.h135 xray_buffer_queue.h136 xray_defs.h137 xray_fdr_controller.h138 xray_fdr_flags.h139 xray_fdr_flags.inc140 xray_fdr_log_records.h141 xray_fdr_log_writer.h142 xray_fdr_logging.h143 xray_flags.h144 xray_flags.inc145 xray_function_call_trie.h146 xray_interface_internal.h147 xray_powerpc64.inc148 xray_profile_collector.h149 xray_profiling_flags.h150 xray_profiling_flags.inc151 xray_recursion_guard.h152 xray_segmented_array.h153 xray_tsc.h154 xray_utils.h155 xray_x86_64.inc156 )157 158# Create list of all source files for159# consumption by tests.160set(XRAY_ALL_SOURCE_FILES161 ${XRAY_SOURCES}162 ${XRAY_DSO_SOURCES}163 ${XRAY_FDR_MODE_SOURCES}164 ${XRAY_BASIC_MODE_SOURCES}165 ${XRAY_PROFILING_MODE_SOURCES}166 ${x86_64_SOURCES}167 ${x86_64_DSO_SOURCES}168 ${arm_SOURCES}169 ${armhf_SOURCES}170 ${hexagon_SOURCES}171 ${loongarch64_SOURCES}172 ${mips_SOURCES}173 ${mipsel_SOURCES}174 ${mips64_SOURCES}175 ${mips64el_SOURCES}176 ${powerpc64le_SOURCES}177 ${riscv32_SOURCES}178 ${riscv64_SOURCES}179 ${s390x_SOURCES}180 ${XRAY_IMPL_HEADERS}181 )182list(REMOVE_DUPLICATES XRAY_ALL_SOURCE_FILES)183# Make list that uses absolute paths184set(XRAY_ALL_SOURCE_FILES_ABS_PATHS "")185foreach (src_file ${XRAY_ALL_SOURCE_FILES})186 list(APPEND187 XRAY_ALL_SOURCE_FILES_ABS_PATHS188 "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}")189endforeach()190 191 192# Now put it all together...193include_directories(..)194include_directories(../../include)195 196set(XRAY_CFLAGS197 ${COMPILER_RT_COMMON_CFLAGS}198 ${COMPILER_RT_CXX_CFLAGS})199set(XRAY_COMMON_DEFINITIONS SANITIZER_COMMON_NO_REDEFINE_BUILTINS XRAY_HAS_EXCEPTIONS=1)200 201# DSO trampolines need to be compiled with GOT addressing202set(XRAY_COMMON_DEFINITIONS_DSO ${XRAY_COMMON_DEFINITIONS} XRAY_PIC)203 204# Too many existing bugs, needs cleanup.205append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format XRAY_CFLAGS)206 207# We don't need RTTI in XRay, so turn that off.208append_rtti_flag(OFF XRAY_CFLAGS)209 210set(XRAY_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS})211set(XRAY_LINK_LIBS212 ${COMPILER_RT_UNWINDER_LINK_LIBS}213 ${COMPILER_RT_CXX_LINK_LIBS})214 215append_list_if(216 COMPILER_RT_HAS_XRAY_COMPILER_FLAG XRAY_SUPPORTED=1 XRAY_COMMON_DEFINITIONS)217append_list_if(218 COMPILER_RT_BUILD_XRAY_NO_PREINIT XRAY_NO_PREINIT XRAY_COMMON_DEFINITIONS)219 220add_compiler_rt_component(xray)221 222set(XRAY_COMMON_RUNTIME_OBJECT_LIBS223 RTSanitizerCommon224 RTSanitizerCommonLibc)225 226# XRay uses C++ standard library headers.227if (TARGET cxx-headers OR HAVE_LIBCXX)228 set(XRAY_DEPS cxx-headers)229endif()230 231if (APPLE)232 add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)233 add_weak_symbols("xray" WEAK_SYMBOL_LINK_FLAGS)234 235 add_compiler_rt_object_libraries(RTXray236 OS ${XRAY_SUPPORTED_OS}237 ARCHS ${XRAY_SUPPORTED_ARCH}238 SOURCES ${XRAY_SOURCES}239 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}240 CFLAGS ${XRAY_CFLAGS}241 DEFS ${XRAY_COMMON_DEFINITIONS}242 DEPS ${XRAY_DEPS})243 add_compiler_rt_object_libraries(RTXrayDSO244 OS ${XRAY_SUPPORTED_OS}245 ARCHS ${XRAY_DSO_SUPPORTED_ARCH}246 SOURCES ${XRAY_DSO_SOURCES}247 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}248 CFLAGS ${XRAY_CFLAGS}249 DEFS ${XRAY_COMMON_DEFINITIONS_DSO}250 DEPS ${XRAY_DEPS})251 set(XRAY_RTXRAY_ARCH_LIBS "")252 set(XRAY_DSO_RTXRAY_ARCH_LIBS "")253 foreach(arch ${XRAY_SUPPORTED_ARCH})254 if(NOT ${arch} IN_LIST XRAY_SOURCE_ARCHS)255 continue()256 endif()257 add_compiler_rt_object_libraries(RTXray_${arch}258 OS ${XRAY_SUPPORTED_OS}259 ARCHS ${arch}260 SOURCES ${${arch}_SOURCES}261 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}262 CFLAGS ${XRAY_CFLAGS}263 DEFS ${XRAY_COMMON_DEFINITIONS}264 DEPS ${XRAY_DEPS})265 list(APPEND XRAY_RTXRAY_ARCH_LIBS RTXray_${arch})266 if (${arch} IN_LIST XRAY_DSO_SUPPORTED_ARCH)267 add_compiler_rt_object_libraries(RTXrayDSO_${arch}268 OS ${XRAY_SUPPORTED_OS}269 ARCHS ${arch}270 SOURCES ${${arch}_DSO_SOURCES}271 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}272 CFLAGS ${XRAY_CFLAGS}273 DEFS ${XRAY_COMMON_DEFINITIONS_DSO}274 DEPS ${XRAY_DEPS})275 list(APPEND XRAY_DSO_RTXRAY_ARCH_LIBS RTXrayDSO_${arch})276 endif()277 endforeach()278 add_compiler_rt_object_libraries(RTXrayFDR279 OS ${XRAY_SUPPORTED_OS}280 ARCHS ${XRAY_SUPPORTED_ARCH}281 SOURCES ${XRAY_FDR_MODE_SOURCES}282 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}283 CFLAGS ${XRAY_CFLAGS}284 DEFS ${XRAY_COMMON_DEFINITIONS}285 DEPS ${XRAY_DEPS})286 add_compiler_rt_object_libraries(RTXrayBASIC287 OS ${XRAY_SUPPORTED_OS}288 ARCHS ${XRAY_SUPPORTED_ARCH}289 SOURCES ${XRAY_BASIC_MODE_SOURCES}290 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}291 CFLAGS ${XRAY_CFLAGS}292 DEFS ${XRAY_COMMON_DEFINITIONS}293 DEPS ${XRAY_DEPS})294 add_compiler_rt_object_libraries(RTXrayPROFILING295 OS ${XRAY_SUPPORTED_OS}296 ARCHS ${XRAY_SUPPORTED_ARCH}297 SOURCES ${XRAY_PROFILING_MODE_SOURCES}298 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}299 CFLAGS ${XRAY_CFLAGS}300 DEFS ${XRAY_COMMON_DEFINITIONS}301 DEPS ${XRAY_DEPS})302 303 # We only support running on osx for now.304 add_compiler_rt_runtime(clang_rt.xray305 STATIC306 OS ${XRAY_SUPPORTED_OS}307 ARCHS ${XRAY_SUPPORTED_ARCH}308 OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS} RTXray ${XRAY_RTXRAY_ARCH_LIBS}309 CFLAGS ${XRAY_CFLAGS}310 DEFS ${XRAY_COMMON_DEFINITIONS}311 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}312 LINK_LIBS ${XRAY_LINK_LIBS}313 PARENT_TARGET xray)314 add_compiler_rt_runtime(clang_rt.xray-dso315 STATIC316 OS ${XRAY_SUPPORTED_OS}317 ARCHS ${XRAY_DSO_SUPPORTED_ARCH}318 OBJECT_LIBS RTXrayDSO ${XRAY_DSO_RTXRAY_ARCH_LIBS}319 CFLAGS ${XRAY_CFLAGS}320 DEFS ${XRAY_COMMON_DEFINITIONS}321 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}322 LINK_LIBS ${XRAY_LINK_LIBS}323 PARENT_TARGET xray)324 325 add_compiler_rt_runtime(clang_rt.xray-fdr326 STATIC327 OS ${XRAY_SUPPORTED_OS}328 ARCHS ${XRAY_SUPPORTED_ARCH}329 OBJECT_LIBS RTXrayFDR330 CFLAGS ${XRAY_CFLAGS}331 DEFS ${XRAY_COMMON_DEFINITIONS}332 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}333 LINK_LIBS ${XRAY_LINK_LIBS}334 PARENT_TARGET xray)335 add_compiler_rt_runtime(clang_rt.xray-basic336 STATIC337 OS ${XRAY_SUPPORTED_OS}338 ARCHS ${XRAY_SUPPORTED_ARCH}339 OBJECT_LIBS RTXrayBASIC340 CFLAGS ${XRAY_CFLAGS}341 DEFS ${XRAY_COMMON_DEFINITIONS}342 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}343 LINK_LIBS ${XRAY_LINK_LIBS}344 PARENT_TARGET xray)345 add_compiler_rt_runtime(clang_rt.xray-profiling346 STATIC347 OS ${XRAY_SUPPORTED_OS}348 ARCHS ${XRAY_SUPPORTED_ARCH}349 OBJECT_LIBS RTXrayPROFILING350 CFLAGS ${XRAY_CFLAGS}351 DEFS ${XRAY_COMMON_DEFINITIONS}352 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}353 LINK_LIBS ${XRAY_LINK_LIBS}354 PARENT_TARGET xray)355else() # not Apple356 foreach(arch ${XRAY_SUPPORTED_ARCH})357 if(NOT CAN_TARGET_${arch})358 continue()359 endif()360 add_compiler_rt_object_libraries(RTXray361 ARCHS ${arch}362 SOURCES ${XRAY_SOURCES} ${${arch}_SOURCES}363 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}364 CFLAGS ${XRAY_CFLAGS}365 DEFS ${XRAY_COMMON_DEFINITIONS}366 DEPS ${XRAY_DEPS})367 add_compiler_rt_object_libraries(RTXrayFDR368 ARCHS ${arch}369 SOURCES ${XRAY_FDR_MODE_SOURCES}370 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}371 CFLAGS ${XRAY_CFLAGS}372 DEFS ${XRAY_COMMON_DEFINITIONS}373 DEPS ${XRAY_DEPS})374 add_compiler_rt_object_libraries(RTXrayBASIC375 ARCHS ${arch}376 SOURCES ${XRAY_BASIC_MODE_SOURCES}377 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}378 CFLAGS ${XRAY_CFLAGS}379 DEFS ${XRAY_COMMON_DEFINITIONS}380 DEPS ${XRAY_DEPS})381 add_compiler_rt_object_libraries(RTXrayPROFILING382 ARCHS ${arch}383 SOURCES ${XRAY_PROFILING_MODE_SOURCES}384 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}385 CFLAGS ${XRAY_CFLAGS}386 DEFS ${XRAY_COMMON_DEFINITIONS}387 DEPS ${XRAY_DEPS})388 389 # Common XRay archive for instrumented binaries.390 add_compiler_rt_runtime(clang_rt.xray391 STATIC392 ARCHS ${arch}393 CFLAGS ${XRAY_CFLAGS}394 LINK_FLAGS ${XRAY_LINK_FLAGS}395 LINK_LIBS ${XRAY_LINK_LIBS}396 DEFS ${XRAY_COMMON_DEFINITIONS}397 OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS} RTXray398 PARENT_TARGET xray)399 # FDR mode runtime archive (addon for clang_rt.xray)400 add_compiler_rt_runtime(clang_rt.xray-fdr401 STATIC402 ARCHS ${arch}403 CFLAGS ${XRAY_CFLAGS}404 LINK_FLAGS ${XRAY_LINK_FLAGS}405 LINK_LIBS ${XRAY_LINK_LIBS}406 DEFS ${XRAY_COMMON_DEFINITIONS}407 OBJECT_LIBS RTXrayFDR408 PARENT_TARGET xray)409 # Basic mode runtime archive (addon for clang_rt.xray)410 add_compiler_rt_runtime(clang_rt.xray-basic411 STATIC412 ARCHS ${arch}413 CFLAGS ${XRAY_CFLAGS}414 LINK_FLAGS ${XRAY_LINK_FLAGS}415 LINK_LIBS ${XRAY_LINK_LIBS}416 DEFS ${XRAY_COMMON_DEFINITIONS}417 OBJECT_LIBS RTXrayBASIC418 PARENT_TARGET xray)419 # Profiler Mode runtime420 add_compiler_rt_runtime(clang_rt.xray-profiling421 STATIC422 ARCHS ${arch}423 CFLAGS ${XRAY_CFLAGS}424 LINK_FLAGS ${XRAY_LINK_FLAGS}425 LINK_LIBS ${XRAY_LINK_LIBS}426 DEFS ${XRAY_COMMON_DEFINITIONS}427 OBJECT_LIBS RTXrayPROFILING428 PARENT_TARGET xray)429 430 if (${arch} IN_LIST XRAY_DSO_SUPPORTED_ARCH)431 add_compiler_rt_object_libraries(RTXrayDSO432 ARCHS ${arch}433 SOURCES ${XRAY_DSO_SOURCES} ${${arch}_DSO_SOURCES} 434 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS}435 CFLAGS ${XRAY_CFLAGS}436 DEFS ${XRAY_COMMON_DEFINITIONS_DSO}437 DEPS ${XRAY_DEPS})438 # DSO runtime archive439 add_compiler_rt_runtime(clang_rt.xray-dso440 STATIC441 ARCHS ${arch}442 CFLAGS ${XRAY_CFLAGS}443 LINK_FLAGS ${XRAY_LINK_FLAGS}444 LINK_LIBS ${XRAY_LINK_LIBS}445 DEFS ${XRAY_COMMON_DEFINITIONS}446 OBJECT_LIBS RTXrayDSO447 PARENT_TARGET xray)448 endif()449 endforeach()450endif() # not Apple451 452if(COMPILER_RT_INCLUDE_TESTS)453 add_subdirectory(tests)454endif()455