1# Build for all components of the XRay runtime support library. 2 3# XRay runtime library implementation files. 4set(XRAY_SOURCES 5 xray_buffer_queue.cpp 6 xray_init.cpp 7 xray_flags.cpp 8 xray_interface.cpp 9 xray_log_interface.cpp 10 xray_utils.cpp 11 ) 12 13set(XRAY_DSO_SOURCES 14 xray_dso_init.cpp 15 ) 16 17# Implementation files for all XRay modes. 18set(XRAY_FDR_MODE_SOURCES 19 xray_fdr_flags.cpp 20 xray_fdr_logging.cpp 21 ) 22 23set(XRAY_BASIC_MODE_SOURCES 24 xray_basic_flags.cpp 25 xray_basic_logging.cpp 26 ) 27 28set(XRAY_PROFILING_MODE_SOURCES 29 xray_profile_collector.cpp 30 xray_profiling.cpp 31 xray_profiling_flags.cpp 32 ) 33 34# Implementation files for all XRay architectures. 35set(x86_64_SOURCES 36 xray_x86_64.cpp 37 xray_trampoline_x86_64.S 38 ) 39 40set(x86_64_DSO_SOURCES 41 xray_trampoline_x86_64.S 42 ) 43 44 45set(arm_SOURCES 46 xray_arm.cpp 47 xray_trampoline_arm.S 48 ) 49 50set(armhf_SOURCES 51 ${arm_SOURCES} 52 ) 53 54set(aarch64_SOURCES 55 xray_AArch64.cpp 56 xray_trampoline_AArch64.S 57 ) 58 59set(aarch64_DSO_SOURCES 60 xray_trampoline_AArch64.S 61 ) 62 63set(loongarch64_SOURCES 64 xray_loongarch64.cpp 65 xray_trampoline_loongarch64.S 66 ) 67 68set(mips_SOURCES 69 xray_mips.cpp 70 xray_trampoline_mips.S 71 ) 72 73set(mipsel_SOURCES 74 xray_mips.cpp 75 xray_trampoline_mips.S 76 ) 77 78set(mips64_SOURCES 79 xray_mips64.cpp 80 xray_trampoline_mips64.S 81 ) 82 83set(mips64el_SOURCES 84 xray_mips64.cpp 85 xray_trampoline_mips64.S 86 ) 87 88set(powerpc64le_SOURCES 89 xray_powerpc64.cpp 90 xray_trampoline_powerpc64.cpp 91 xray_trampoline_powerpc64_asm.S 92 ) 93 94set(hexagon_SOURCES 95 xray_hexagon.cpp 96 xray_trampoline_hexagon.S 97 ) 98 99set(riscv32_SOURCES 100 xray_riscv.cpp 101 xray_trampoline_riscv32.S 102 ) 103 104set(riscv64_SOURCES 105 xray_riscv.cpp 106 xray_trampoline_riscv64.S 107 ) 108 109set(XRAY_SOURCE_ARCHS 110 arm 111 armhf 112 aarch64 113 hexagon 114 mips 115 mipsel 116 mips64 117 mips64el 118 powerpc64le 119 x86_64 120 ) 121 122set(XRAY_IMPL_HEADERS 123 xray_allocator.h 124 xray_basic_flags.h 125 xray_basic_flags.inc 126 xray_basic_logging.h 127 xray_buffer_queue.h 128 xray_defs.h 129 xray_fdr_controller.h 130 xray_fdr_flags.h 131 xray_fdr_flags.inc 132 xray_fdr_log_records.h 133 xray_fdr_log_writer.h 134 xray_fdr_logging.h 135 xray_flags.h 136 xray_flags.inc 137 xray_function_call_trie.h 138 xray_interface_internal.h 139 xray_powerpc64.inc 140 xray_profile_collector.h 141 xray_profiling_flags.h 142 xray_profiling_flags.inc 143 xray_recursion_guard.h 144 xray_segmented_array.h 145 xray_tsc.h 146 xray_utils.h 147 xray_x86_64.inc 148 ) 149 150# Create list of all source files for 151# consumption by tests. 152set(XRAY_ALL_SOURCE_FILES 153 ${XRAY_SOURCES} 154 ${XRAY_DSO_SOURCES} 155 ${XRAY_FDR_MODE_SOURCES} 156 ${XRAY_BASIC_MODE_SOURCES} 157 ${XRAY_PROFILING_MODE_SOURCES} 158 ${x86_64_SOURCES} 159 ${x86_64_DSO_SOURCES} 160 ${arm_SOURCES} 161 ${armhf_SOURCES} 162 ${hexagon_SOURCES} 163 ${loongarch64_SOURCES} 164 ${mips_SOURCES} 165 ${mipsel_SOURCES} 166 ${mips64_SOURCES} 167 ${mips64el_SOURCES} 168 ${powerpc64le_SOURCES} 169 ${riscv32_SOURCES} 170 ${riscv64_SOURCES} 171 ${XRAY_IMPL_HEADERS} 172 ) 173list(REMOVE_DUPLICATES XRAY_ALL_SOURCE_FILES) 174# Make list that uses absolute paths 175set(XRAY_ALL_SOURCE_FILES_ABS_PATHS "") 176foreach (src_file ${XRAY_ALL_SOURCE_FILES}) 177 list(APPEND 178 XRAY_ALL_SOURCE_FILES_ABS_PATHS 179 "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}") 180endforeach() 181 182 183# Now put it all together... 184include_directories(..) 185include_directories(../../include) 186 187set(XRAY_CFLAGS 188 ${COMPILER_RT_COMMON_CFLAGS} 189 ${COMPILER_RT_CXX_CFLAGS}) 190set(XRAY_COMMON_DEFINITIONS SANITIZER_COMMON_NO_REDEFINE_BUILTINS XRAY_HAS_EXCEPTIONS=1) 191 192# DSO trampolines need to be compiled with GOT addressing 193set(XRAY_COMMON_DEFINITIONS_DSO ${XRAY_COMMON_DEFINITIONS} XRAY_PIC) 194 195# Too many existing bugs, needs cleanup. 196append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format XRAY_CFLAGS) 197 198# We don't need RTTI in XRay, so turn that off. 199append_rtti_flag(OFF XRAY_CFLAGS) 200 201set(XRAY_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS}) 202set(XRAY_LINK_LIBS 203 ${COMPILER_RT_UNWINDER_LINK_LIBS} 204 ${COMPILER_RT_CXX_LINK_LIBS}) 205 206append_list_if( 207 COMPILER_RT_HAS_XRAY_COMPILER_FLAG XRAY_SUPPORTED=1 XRAY_COMMON_DEFINITIONS) 208append_list_if( 209 COMPILER_RT_BUILD_XRAY_NO_PREINIT XRAY_NO_PREINIT XRAY_COMMON_DEFINITIONS) 210 211add_compiler_rt_component(xray) 212 213set(XRAY_COMMON_RUNTIME_OBJECT_LIBS 214 RTSanitizerCommon 215 RTSanitizerCommonLibc) 216 217# XRay uses C++ standard library headers. 218if (TARGET cxx-headers OR HAVE_LIBCXX) 219 set(XRAY_DEPS cxx-headers) 220endif() 221 222if (APPLE) 223 add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS) 224 add_weak_symbols("xray" WEAK_SYMBOL_LINK_FLAGS) 225 226 add_compiler_rt_object_libraries(RTXray 227 OS ${XRAY_SUPPORTED_OS} 228 ARCHS ${XRAY_SUPPORTED_ARCH} 229 SOURCES ${XRAY_SOURCES} 230 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 231 CFLAGS ${XRAY_CFLAGS} 232 DEFS ${XRAY_COMMON_DEFINITIONS} 233 DEPS ${XRAY_DEPS}) 234 add_compiler_rt_object_libraries(RTXrayDSO 235 OS ${XRAY_SUPPORTED_OS} 236 ARCHS ${XRAY_DSO_SUPPORTED_ARCH} 237 SOURCES ${XRAY_DSO_SOURCES} 238 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 239 CFLAGS ${XRAY_CFLAGS} 240 DEFS ${XRAY_COMMON_DEFINITIONS_DSO} 241 DEPS ${XRAY_DEPS}) 242 set(XRAY_RTXRAY_ARCH_LIBS "") 243 set(XRAY_DSO_RTXRAY_ARCH_LIBS "") 244 foreach(arch ${XRAY_SUPPORTED_ARCH}) 245 if(NOT ${arch} IN_LIST XRAY_SOURCE_ARCHS) 246 continue() 247 endif() 248 add_compiler_rt_object_libraries(RTXray_${arch} 249 OS ${XRAY_SUPPORTED_OS} 250 ARCHS ${arch} 251 SOURCES ${${arch}_SOURCES} 252 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 253 CFLAGS ${XRAY_CFLAGS} 254 DEFS ${XRAY_COMMON_DEFINITIONS} 255 DEPS ${XRAY_DEPS}) 256 list(APPEND XRAY_RTXRAY_ARCH_LIBS RTXray_${arch}) 257 if (${arch} IN_LIST XRAY_DSO_SUPPORTED_ARCH) 258 add_compiler_rt_object_libraries(RTXrayDSO_${arch} 259 OS ${XRAY_SUPPORTED_OS} 260 ARCHS ${arch} 261 SOURCES ${${arch}_DSO_SOURCES} 262 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 263 CFLAGS ${XRAY_CFLAGS} 264 DEFS ${XRAY_COMMON_DEFINITIONS_DSO} 265 DEPS ${XRAY_DEPS}) 266 list(APPEND XRAY_DSO_RTXRAY_ARCH_LIBS RTXrayDSO_${arch}) 267 endif() 268 endforeach() 269 add_compiler_rt_object_libraries(RTXrayFDR 270 OS ${XRAY_SUPPORTED_OS} 271 ARCHS ${XRAY_SUPPORTED_ARCH} 272 SOURCES ${XRAY_FDR_MODE_SOURCES} 273 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 274 CFLAGS ${XRAY_CFLAGS} 275 DEFS ${XRAY_COMMON_DEFINITIONS} 276 DEPS ${XRAY_DEPS}) 277 add_compiler_rt_object_libraries(RTXrayBASIC 278 OS ${XRAY_SUPPORTED_OS} 279 ARCHS ${XRAY_SUPPORTED_ARCH} 280 SOURCES ${XRAY_BASIC_MODE_SOURCES} 281 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 282 CFLAGS ${XRAY_CFLAGS} 283 DEFS ${XRAY_COMMON_DEFINITIONS} 284 DEPS ${XRAY_DEPS}) 285 add_compiler_rt_object_libraries(RTXrayPROFILING 286 OS ${XRAY_SUPPORTED_OS} 287 ARCHS ${XRAY_SUPPORTED_ARCH} 288 SOURCES ${XRAY_PROFILING_MODE_SOURCES} 289 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 290 CFLAGS ${XRAY_CFLAGS} 291 DEFS ${XRAY_COMMON_DEFINITIONS} 292 DEPS ${XRAY_DEPS}) 293 294 # We only support running on osx for now. 295 add_compiler_rt_runtime(clang_rt.xray 296 STATIC 297 OS ${XRAY_SUPPORTED_OS} 298 ARCHS ${XRAY_SUPPORTED_ARCH} 299 OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS} RTXray ${XRAY_RTXRAY_ARCH_LIBS} 300 CFLAGS ${XRAY_CFLAGS} 301 DEFS ${XRAY_COMMON_DEFINITIONS} 302 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 303 LINK_LIBS ${XRAY_LINK_LIBS} 304 PARENT_TARGET xray) 305 add_compiler_rt_runtime(clang_rt.xray-dso 306 STATIC 307 OS ${XRAY_SUPPORTED_OS} 308 ARCHS ${XRAY_DSO_SUPPORTED_ARCH} 309 OBJECT_LIBS RTXrayDSO ${XRAY_DSO_RTXRAY_ARCH_LIBS} 310 CFLAGS ${XRAY_CFLAGS} 311 DEFS ${XRAY_COMMON_DEFINITIONS} 312 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 313 LINK_LIBS ${XRAY_LINK_LIBS} 314 PARENT_TARGET xray) 315 316 add_compiler_rt_runtime(clang_rt.xray-fdr 317 STATIC 318 OS ${XRAY_SUPPORTED_OS} 319 ARCHS ${XRAY_SUPPORTED_ARCH} 320 OBJECT_LIBS RTXrayFDR 321 CFLAGS ${XRAY_CFLAGS} 322 DEFS ${XRAY_COMMON_DEFINITIONS} 323 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 324 LINK_LIBS ${XRAY_LINK_LIBS} 325 PARENT_TARGET xray) 326 add_compiler_rt_runtime(clang_rt.xray-basic 327 STATIC 328 OS ${XRAY_SUPPORTED_OS} 329 ARCHS ${XRAY_SUPPORTED_ARCH} 330 OBJECT_LIBS RTXrayBASIC 331 CFLAGS ${XRAY_CFLAGS} 332 DEFS ${XRAY_COMMON_DEFINITIONS} 333 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 334 LINK_LIBS ${XRAY_LINK_LIBS} 335 PARENT_TARGET xray) 336 add_compiler_rt_runtime(clang_rt.xray-profiling 337 STATIC 338 OS ${XRAY_SUPPORTED_OS} 339 ARCHS ${XRAY_SUPPORTED_ARCH} 340 OBJECT_LIBS RTXrayPROFILING 341 CFLAGS ${XRAY_CFLAGS} 342 DEFS ${XRAY_COMMON_DEFINITIONS} 343 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 344 LINK_LIBS ${XRAY_LINK_LIBS} 345 PARENT_TARGET xray) 346else() # not Apple 347 foreach(arch ${XRAY_SUPPORTED_ARCH}) 348 if(NOT CAN_TARGET_${arch}) 349 continue() 350 endif() 351 add_compiler_rt_object_libraries(RTXray 352 ARCHS ${arch} 353 SOURCES ${XRAY_SOURCES} ${${arch}_SOURCES} 354 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 355 CFLAGS ${XRAY_CFLAGS} 356 DEFS ${XRAY_COMMON_DEFINITIONS} 357 DEPS ${XRAY_DEPS}) 358 add_compiler_rt_object_libraries(RTXrayFDR 359 ARCHS ${arch} 360 SOURCES ${XRAY_FDR_MODE_SOURCES} 361 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 362 CFLAGS ${XRAY_CFLAGS} 363 DEFS ${XRAY_COMMON_DEFINITIONS} 364 DEPS ${XRAY_DEPS}) 365 add_compiler_rt_object_libraries(RTXrayBASIC 366 ARCHS ${arch} 367 SOURCES ${XRAY_BASIC_MODE_SOURCES} 368 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 369 CFLAGS ${XRAY_CFLAGS} 370 DEFS ${XRAY_COMMON_DEFINITIONS} 371 DEPS ${XRAY_DEPS}) 372 add_compiler_rt_object_libraries(RTXrayPROFILING 373 ARCHS ${arch} 374 SOURCES ${XRAY_PROFILING_MODE_SOURCES} 375 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 376 CFLAGS ${XRAY_CFLAGS} 377 DEFS ${XRAY_COMMON_DEFINITIONS} 378 DEPS ${XRAY_DEPS}) 379 380 # Common XRay archive for instrumented binaries. 381 add_compiler_rt_runtime(clang_rt.xray 382 STATIC 383 ARCHS ${arch} 384 CFLAGS ${XRAY_CFLAGS} 385 LINK_FLAGS ${XRAY_LINK_FLAGS} 386 LINK_LIBS ${XRAY_LINK_LIBS} 387 DEFS ${XRAY_COMMON_DEFINITIONS} 388 OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS} RTXray 389 PARENT_TARGET xray) 390 # FDR mode runtime archive (addon for clang_rt.xray) 391 add_compiler_rt_runtime(clang_rt.xray-fdr 392 STATIC 393 ARCHS ${arch} 394 CFLAGS ${XRAY_CFLAGS} 395 LINK_FLAGS ${XRAY_LINK_FLAGS} 396 LINK_LIBS ${XRAY_LINK_LIBS} 397 DEFS ${XRAY_COMMON_DEFINITIONS} 398 OBJECT_LIBS RTXrayFDR 399 PARENT_TARGET xray) 400 # Basic mode runtime archive (addon for clang_rt.xray) 401 add_compiler_rt_runtime(clang_rt.xray-basic 402 STATIC 403 ARCHS ${arch} 404 CFLAGS ${XRAY_CFLAGS} 405 LINK_FLAGS ${XRAY_LINK_FLAGS} 406 LINK_LIBS ${XRAY_LINK_LIBS} 407 DEFS ${XRAY_COMMON_DEFINITIONS} 408 OBJECT_LIBS RTXrayBASIC 409 PARENT_TARGET xray) 410 # Profiler Mode runtime 411 add_compiler_rt_runtime(clang_rt.xray-profiling 412 STATIC 413 ARCHS ${arch} 414 CFLAGS ${XRAY_CFLAGS} 415 LINK_FLAGS ${XRAY_LINK_FLAGS} 416 LINK_LIBS ${XRAY_LINK_LIBS} 417 DEFS ${XRAY_COMMON_DEFINITIONS} 418 OBJECT_LIBS RTXrayPROFILING 419 PARENT_TARGET xray) 420 421 if (${arch} IN_LIST XRAY_DSO_SUPPORTED_ARCH) 422 add_compiler_rt_object_libraries(RTXrayDSO 423 ARCHS ${arch} 424 SOURCES ${XRAY_DSO_SOURCES} ${${arch}_DSO_SOURCES} 425 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 426 CFLAGS ${XRAY_CFLAGS} 427 DEFS ${XRAY_COMMON_DEFINITIONS_DSO} 428 DEPS ${XRAY_DEPS}) 429 # DSO runtime archive 430 add_compiler_rt_runtime(clang_rt.xray-dso 431 STATIC 432 ARCHS ${arch} 433 CFLAGS ${XRAY_CFLAGS} 434 LINK_FLAGS ${XRAY_LINK_FLAGS} 435 LINK_LIBS ${XRAY_LINK_LIBS} 436 DEFS ${XRAY_COMMON_DEFINITIONS} 437 OBJECT_LIBS RTXrayDSO 438 PARENT_TARGET xray) 439 endif() 440 endforeach() 441endif() # not Apple 442 443if(COMPILER_RT_INCLUDE_TESTS) 444 add_subdirectory(tests) 445endif() 446