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 13# Implementation files for all XRay modes. 14set(XRAY_FDR_MODE_SOURCES 15 xray_fdr_flags.cpp 16 xray_fdr_logging.cpp 17 ) 18 19set(XRAY_BASIC_MODE_SOURCES 20 xray_basic_flags.cpp 21 xray_basic_logging.cpp 22 ) 23 24set(XRAY_PROFILING_MODE_SOURCES 25 xray_profile_collector.cpp 26 xray_profiling.cpp 27 xray_profiling_flags.cpp 28 ) 29 30# Implementation files for all XRay architectures. 31set(x86_64_SOURCES 32 xray_x86_64.cpp 33 xray_trampoline_x86_64.S 34 ) 35 36set(arm_SOURCES 37 xray_arm.cpp 38 xray_trampoline_arm.S 39 ) 40 41set(armhf_SOURCES 42 ${arm_SOURCES} 43 ) 44 45set(aarch64_SOURCES 46 xray_AArch64.cpp 47 xray_trampoline_AArch64.S 48 ) 49 50set(mips_SOURCES 51 xray_mips.cpp 52 xray_trampoline_mips.S 53 ) 54 55set(mipsel_SOURCES 56 xray_mips.cpp 57 xray_trampoline_mips.S 58 ) 59 60set(mips64_SOURCES 61 xray_mips64.cpp 62 xray_trampoline_mips64.S 63 ) 64 65set(mips64el_SOURCES 66 xray_mips64.cpp 67 xray_trampoline_mips64.S 68 ) 69 70set(powerpc64le_SOURCES 71 xray_powerpc64.cpp 72 xray_trampoline_powerpc64.cpp 73 xray_trampoline_powerpc64_asm.S 74 ) 75 76set(hexagon_SOURCES 77 xray_hexagon.cpp 78 xray_trampoline_hexagon.S 79 ) 80 81set(XRAY_IMPL_HEADERS 82 xray_allocator.h 83 xray_basic_flags.h 84 xray_basic_flags.inc 85 xray_basic_logging.h 86 xray_buffer_queue.h 87 xray_defs.h 88 xray_fdr_controller.h 89 xray_fdr_flags.h 90 xray_fdr_flags.inc 91 xray_fdr_log_records.h 92 xray_fdr_log_writer.h 93 xray_fdr_logging.h 94 xray_flags.h 95 xray_flags.inc 96 xray_function_call_trie.h 97 xray_interface_internal.h 98 xray_powerpc64.inc 99 xray_profile_collector.h 100 xray_profiling_flags.h 101 xray_profiling_flags.inc 102 xray_recursion_guard.h 103 xray_segmented_array.h 104 xray_tsc.h 105 xray_utils.h 106 xray_x86_64.inc 107 ) 108 109# Create list of all source files for 110# consumption by tests. 111set(XRAY_ALL_SOURCE_FILES 112 ${XRAY_SOURCES} 113 ${XRAY_FDR_MODE_SOURCES} 114 ${XRAY_BASIC_MODE_SOURCES} 115 ${XRAY_PROFILING_MODE_SOURCES} 116 ${x86_64_SOURCES} 117 ${arm_SOURCES} 118 ${armhf_SOURCES} 119 ${hexagon_SOURCES} 120 ${mips_SOURCES} 121 ${mipsel_SOURCES} 122 ${mips64_SOURCES} 123 ${mips64el_SOURCES} 124 ${powerpc64le_SOURCES} 125 ${XRAY_IMPL_HEADERS} 126 ) 127list(REMOVE_DUPLICATES XRAY_ALL_SOURCE_FILES) 128# Make list that uses absolute paths 129set(XRAY_ALL_SOURCE_FILES_ABS_PATHS "") 130foreach (src_file ${XRAY_ALL_SOURCE_FILES}) 131 list(APPEND 132 XRAY_ALL_SOURCE_FILES_ABS_PATHS 133 "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}") 134endforeach() 135 136 137# Now put it all together... 138include_directories(..) 139include_directories(../../include) 140 141set(XRAY_CFLAGS 142 ${COMPILER_RT_COMMON_CFLAGS} 143 ${COMPILER_RT_CXX_CFLAGS}) 144set(XRAY_COMMON_DEFINITIONS XRAY_HAS_EXCEPTIONS=1) 145 146# Too many existing bugs, needs cleanup. 147append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format XRAY_CFLAGS) 148 149# We don't need RTTI in XRay, so turn that off. 150append_rtti_flag(OFF XRAY_CFLAGS) 151 152set(XRAY_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS}) 153set(XRAY_LINK_LIBS 154 ${COMPILER_RT_UNWINDER_LINK_LIBS} 155 ${COMPILER_RT_CXX_LINK_LIBS}) 156 157append_list_if( 158 COMPILER_RT_HAS_XRAY_COMPILER_FLAG XRAY_SUPPORTED=1 XRAY_COMMON_DEFINITIONS) 159append_list_if( 160 COMPILER_RT_BUILD_XRAY_NO_PREINIT XRAY_NO_PREINIT XRAY_COMMON_DEFINITIONS) 161 162add_compiler_rt_component(xray) 163 164set(XRAY_COMMON_RUNTIME_OBJECT_LIBS 165 RTSanitizerCommon 166 RTSanitizerCommonLibc) 167 168# XRay uses C++ standard library headers. 169if (TARGET cxx-headers OR HAVE_LIBCXX) 170 set(XRAY_DEPS cxx-headers) 171endif() 172 173if (APPLE) 174 add_asm_sources(XRAY_ASM_SOURCES xray_trampoline_x86_64.S) 175 176 add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS) 177 add_weak_symbols("xray" WEAK_SYMBOL_LINK_FLAGS) 178 179 add_compiler_rt_object_libraries(RTXray 180 OS ${XRAY_SUPPORTED_OS} 181 ARCHS ${XRAY_SUPPORTED_ARCH} 182 SOURCES ${XRAY_SOURCES} ${x86_64_SOURCES} 183 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 184 CFLAGS ${XRAY_CFLAGS} 185 DEFS ${XRAY_COMMON_DEFINITIONS} 186 DEPS ${XRAY_DEPS}) 187 add_compiler_rt_object_libraries(RTXrayFDR 188 OS ${XRAY_SUPPORTED_OS} 189 ARCHS ${XRAY_SUPPORTED_ARCH} 190 SOURCES ${XRAY_FDR_MODE_SOURCES} 191 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 192 CFLAGS ${XRAY_CFLAGS} 193 DEFS ${XRAY_COMMON_DEFINITIONS} 194 DEPS ${XRAY_DEPS}) 195 add_compiler_rt_object_libraries(RTXrayBASIC 196 OS ${XRAY_SUPPORTED_OS} 197 ARCHS ${XRAY_SUPPORTED_ARCH} 198 SOURCES ${XRAY_BASIC_MODE_SOURCES} 199 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 200 CFLAGS ${XRAY_CFLAGS} 201 DEFS ${XRAY_COMMON_DEFINITIONS} 202 DEPS ${XRAY_DEPS}) 203 add_compiler_rt_object_libraries(RTXrayPROFILING 204 OS ${XRAY_SUPPORTED_OS} 205 ARCHS ${XRAY_SUPPORTED_ARCH} 206 SOURCES ${XRAY_PROFILING_MODE_SOURCES} 207 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 208 CFLAGS ${XRAY_CFLAGS} 209 DEFS ${XRAY_COMMON_DEFINITIONS} 210 DEPS ${XRAY_DEPS}) 211 212 # We only support running on osx for now. 213 add_compiler_rt_runtime(clang_rt.xray 214 STATIC 215 OS ${XRAY_SUPPORTED_OS} 216 ARCHS ${XRAY_SUPPORTED_ARCH} 217 OBJECT_LIBS RTXray 218 RTSanitizerCommon 219 RTSanitizerCommonLibc 220 CFLAGS ${XRAY_CFLAGS} 221 DEFS ${XRAY_COMMON_DEFINITIONS} 222 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 223 LINK_LIBS ${XRAY_LINK_LIBS} 224 PARENT_TARGET xray) 225 add_compiler_rt_runtime(clang_rt.xray-fdr 226 STATIC 227 OS ${XRAY_SUPPORTED_OS} 228 ARCHS ${XRAY_SUPPORTED_ARCH} 229 OBJECT_LIBS RTXrayFDR 230 CFLAGS ${XRAY_CFLAGS} 231 DEFS ${XRAY_COMMON_DEFINITIONS} 232 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 233 LINK_LIBS ${XRAY_LINK_LIBS} 234 PARENT_TARGET xray) 235 add_compiler_rt_runtime(clang_rt.xray-basic 236 STATIC 237 OS ${XRAY_SUPPORTED_OS} 238 ARCHS ${XRAY_SUPPORTED_ARCH} 239 OBJECT_LIBS RTXrayBASIC 240 CFLAGS ${XRAY_CFLAGS} 241 DEFS ${XRAY_COMMON_DEFINITIONS} 242 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 243 LINK_LIBS ${XRAY_LINK_LIBS} 244 PARENT_TARGET xray) 245 add_compiler_rt_runtime(clang_rt.xray-profiling 246 STATIC 247 OS ${XRAY_SUPPORTED_OS} 248 ARCHS ${XRAY_SUPPORTED_ARCH} 249 OBJECT_LIBS RTXrayPROFILING 250 CFLAGS ${XRAY_CFLAGS} 251 DEFS ${XRAY_COMMON_DEFINITIONS} 252 LINK_FLAGS ${XRAY_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 253 LINK_LIBS ${XRAY_LINK_LIBS} 254 PARENT_TARGET xray) 255else() # not Apple 256 foreach(arch ${XRAY_SUPPORTED_ARCH}) 257 if(NOT CAN_TARGET_${arch}) 258 continue() 259 endif() 260 add_compiler_rt_object_libraries(RTXray 261 ARCHS ${arch} 262 SOURCES ${XRAY_SOURCES} ${${arch}_SOURCES} 263 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 264 CFLAGS ${XRAY_CFLAGS} 265 DEFS ${XRAY_COMMON_DEFINITIONS} 266 DEPS ${XRAY_DEPS}) 267 add_compiler_rt_object_libraries(RTXrayFDR 268 ARCHS ${arch} 269 SOURCES ${XRAY_FDR_MODE_SOURCES} 270 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 271 CFLAGS ${XRAY_CFLAGS} 272 DEFS ${XRAY_COMMON_DEFINITIONS} 273 DEPS ${XRAY_DEPS}) 274 add_compiler_rt_object_libraries(RTXrayBASIC 275 ARCHS ${arch} 276 SOURCES ${XRAY_BASIC_MODE_SOURCES} 277 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 278 CFLAGS ${XRAY_CFLAGS} 279 DEFS ${XRAY_COMMON_DEFINITIONS} 280 DEPS ${XRAY_DEPS}) 281 add_compiler_rt_object_libraries(RTXrayPROFILING 282 ARCHS ${arch} 283 SOURCES ${XRAY_PROFILING_MODE_SOURCES} 284 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 285 CFLAGS ${XRAY_CFLAGS} 286 DEFS ${XRAY_COMMON_DEFINITIONS} 287 DEPS ${XRAY_DEPS}) 288 289 # Common XRay archive for instrumented binaries. 290 add_compiler_rt_runtime(clang_rt.xray 291 STATIC 292 ARCHS ${arch} 293 CFLAGS ${XRAY_CFLAGS} 294 LINK_FLAGS ${XRAY_LINK_FLAGS} 295 LINK_LIBS ${XRAY_LINK_LIBS} 296 DEFS ${XRAY_COMMON_DEFINITIONS} 297 OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS} RTXray 298 PARENT_TARGET xray) 299 # FDR mode runtime archive (addon for clang_rt.xray) 300 add_compiler_rt_runtime(clang_rt.xray-fdr 301 STATIC 302 ARCHS ${arch} 303 CFLAGS ${XRAY_CFLAGS} 304 LINK_FLAGS ${XRAY_LINK_FLAGS} 305 LINK_LIBS ${XRAY_LINK_LIBS} 306 DEFS ${XRAY_COMMON_DEFINITIONS} 307 OBJECT_LIBS RTXrayFDR 308 PARENT_TARGET xray) 309 # Basic mode runtime archive (addon for clang_rt.xray) 310 add_compiler_rt_runtime(clang_rt.xray-basic 311 STATIC 312 ARCHS ${arch} 313 CFLAGS ${XRAY_CFLAGS} 314 LINK_FLAGS ${XRAY_LINK_FLAGS} 315 LINK_LIBS ${XRAY_LINK_LIBS} 316 DEFS ${XRAY_COMMON_DEFINITIONS} 317 OBJECT_LIBS RTXrayBASIC 318 PARENT_TARGET xray) 319 # Profiler Mode runtime 320 add_compiler_rt_runtime(clang_rt.xray-profiling 321 STATIC 322 ARCHS ${arch} 323 CFLAGS ${XRAY_CFLAGS} 324 LINK_FLAGS ${XRAY_LINK_FLAGS} 325 LINK_LIBS ${XRAY_LINK_LIBS} 326 DEFS ${XRAY_COMMON_DEFINITIONS} 327 OBJECT_LIBS RTXrayPROFILING 328 PARENT_TARGET xray) 329 endforeach() 330endif() # not Apple 331 332if(COMPILER_RT_INCLUDE_TESTS) 333 add_subdirectory(tests) 334endif() 335