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(XRAY_IMPL_HEADERS 77 xray_allocator.h 78 xray_basic_flags.h 79 xray_basic_flags.inc 80 xray_basic_logging.h 81 xray_buffer_queue.h 82 xray_defs.h 83 xray_fdr_controller.h 84 xray_fdr_flags.h 85 xray_fdr_flags.inc 86 xray_fdr_log_records.h 87 xray_fdr_log_writer.h 88 xray_fdr_logging.h 89 xray_flags.h 90 xray_flags.inc 91 xray_function_call_trie.h 92 xray_interface_internal.h 93 xray_powerpc64.inc 94 xray_profile_collector.h 95 xray_profiling_flags.h 96 xray_profiling_flags.inc 97 xray_recursion_guard.h 98 xray_segmented_array.h 99 xray_tsc.h 100 xray_utils.h 101 xray_x86_64.inc 102 ) 103 104# Create list of all source files for 105# consumption by tests. 106set(XRAY_ALL_SOURCE_FILES 107 ${XRAY_SOURCES} 108 ${XRAY_FDR_MODE_SOURCES} 109 ${XRAY_BASIC_MODE_SOURCES} 110 ${XRAY_PROFILING_MODE_SOURCES} 111 ${x86_64_SOURCES} 112 ${arm_SOURCES} 113 ${armhf_SOURCES} 114 ${mips_SOURCES} 115 ${mipsel_SOURCES} 116 ${mips64_SOURCES} 117 ${mips64el_SOURCES} 118 ${powerpc64le_SOURCES} 119 ${XRAY_IMPL_HEADERS} 120 ) 121list(REMOVE_DUPLICATES XRAY_ALL_SOURCE_FILES) 122# Make list that uses absolute paths 123set(XRAY_ALL_SOURCE_FILES_ABS_PATHS "") 124foreach (src_file ${XRAY_ALL_SOURCE_FILES}) 125 list(APPEND 126 XRAY_ALL_SOURCE_FILES_ABS_PATHS 127 "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}") 128endforeach() 129 130 131# Now put it all together... 132include_directories(..) 133include_directories(../../include) 134 135set(XRAY_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 136set(XRAY_COMMON_DEFINITIONS XRAY_HAS_EXCEPTIONS=1) 137 138# We don't need RTTI in XRay, so turn that off. 139append_rtti_flag(OFF XRAY_CFLAGS) 140 141append_list_if( 142 COMPILER_RT_HAS_XRAY_COMPILER_FLAG XRAY_SUPPORTED=1 XRAY_COMMON_DEFINITIONS) 143append_list_if( 144 COMPILER_RT_BUILD_XRAY_NO_PREINIT XRAY_NO_PREINIT XRAY_COMMON_DEFINITIONS) 145 146add_compiler_rt_component(xray) 147 148set(XRAY_COMMON_RUNTIME_OBJECT_LIBS 149 RTSanitizerCommon 150 RTSanitizerCommonLibc) 151 152if (TARGET cxx-headers OR HAVE_LIBCXX) 153 set(XRAY_DEPS cxx-headers) 154endif() 155 156if (APPLE) 157 set(XRAY_LINK_LIBS ${SANITIZER_COMMON_LINK_LIBS}) 158 add_asm_sources(XRAY_ASM_SOURCES xray_trampoline_x86_64.S) 159 160 add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS) 161 add_weak_symbols("xray" WEAK_SYMBOL_LINK_FLAGS) 162 163 add_compiler_rt_object_libraries(RTXray 164 OS ${XRAY_SUPPORTED_OS} 165 ARCHS ${XRAY_SUPPORTED_ARCH} 166 SOURCES ${XRAY_SOURCES} ${x86_64_SOURCES} 167 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 168 CFLAGS ${XRAY_CFLAGS} 169 DEFS ${XRAY_COMMON_DEFINITIONS} 170 DEPS ${XRAY_DEPS}) 171 add_compiler_rt_object_libraries(RTXrayFDR 172 OS ${XRAY_SUPPORTED_OS} 173 ARCHS ${XRAY_SUPPORTED_ARCH} 174 SOURCES ${XRAY_FDR_MODE_SOURCES} 175 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 176 CFLAGS ${XRAY_CFLAGS} 177 DEFS ${XRAY_COMMON_DEFINITIONS} 178 DEPS ${XRAY_DEPS}) 179 add_compiler_rt_object_libraries(RTXrayBASIC 180 OS ${XRAY_SUPPORTED_OS} 181 ARCHS ${XRAY_SUPPORTED_ARCH} 182 SOURCES ${XRAY_BASIC_MODE_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(RTXrayPROFILING 188 OS ${XRAY_SUPPORTED_OS} 189 ARCHS ${XRAY_SUPPORTED_ARCH} 190 SOURCES ${XRAY_PROFILING_MODE_SOURCES} 191 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 192 CFLAGS ${XRAY_CFLAGS} 193 DEFS ${XRAY_COMMON_DEFINITIONS} 194 DEPS ${XRAY_DEPS}) 195 196 # We only support running on osx for now. 197 add_compiler_rt_runtime(clang_rt.xray 198 STATIC 199 OS ${XRAY_SUPPORTED_OS} 200 ARCHS ${XRAY_SUPPORTED_ARCH} 201 OBJECT_LIBS RTXray 202 RTSanitizerCommon 203 RTSanitizerCommonLibc 204 CFLAGS ${XRAY_CFLAGS} 205 DEFS ${XRAY_COMMON_DEFINITIONS} 206 LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 207 LINK_LIBS ${XRAY_LINK_LIBS} 208 PARENT_TARGET xray) 209 add_compiler_rt_runtime(clang_rt.xray-fdr 210 STATIC 211 OS ${XRAY_SUPPORTED_OS} 212 ARCHS ${XRAY_SUPPORTED_ARCH} 213 OBJECT_LIBS RTXrayFDR 214 CFLAGS ${XRAY_CFLAGS} 215 DEFS ${XRAY_COMMON_DEFINITIONS} 216 LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 217 LINK_LIBS ${XRAY_LINK_LIBS} 218 PARENT_TARGET xray) 219 add_compiler_rt_runtime(clang_rt.xray-basic 220 STATIC 221 OS ${XRAY_SUPPORTED_OS} 222 ARCHS ${XRAY_SUPPORTED_ARCH} 223 OBJECT_LIBS RTXrayBASIC 224 CFLAGS ${XRAY_CFLAGS} 225 DEFS ${XRAY_COMMON_DEFINITIONS} 226 LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 227 LINK_LIBS ${XRAY_LINK_LIBS} 228 PARENT_TARGET xray) 229 add_compiler_rt_runtime(clang_rt.xray-profiling 230 STATIC 231 OS ${XRAY_SUPPORTED_OS} 232 ARCHS ${XRAY_SUPPORTED_ARCH} 233 OBJECT_LIBS RTXrayPROFILING 234 CFLAGS ${XRAY_CFLAGS} 235 DEFS ${XRAY_COMMON_DEFINITIONS} 236 LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS} 237 LINK_LIBS ${XRAY_LINK_LIBS} 238 PARENT_TARGET xray) 239else() # not Apple 240 foreach(arch ${XRAY_SUPPORTED_ARCH}) 241 if(NOT CAN_TARGET_${arch}) 242 continue() 243 endif() 244 add_compiler_rt_object_libraries(RTXray 245 ARCHS ${arch} 246 SOURCES ${XRAY_SOURCES} ${${arch}_SOURCES} 247 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 248 CFLAGS ${XRAY_CFLAGS} 249 DEFS ${XRAY_COMMON_DEFINITIONS} 250 DEPS ${XRAY_DEPS}) 251 add_compiler_rt_object_libraries(RTXrayFDR 252 ARCHS ${arch} 253 SOURCES ${XRAY_FDR_MODE_SOURCES} 254 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 255 CFLAGS ${XRAY_CFLAGS} 256 DEFS ${XRAY_COMMON_DEFINITIONS} 257 DEPS ${XRAY_DEPS}) 258 add_compiler_rt_object_libraries(RTXrayBASIC 259 ARCHS ${arch} 260 SOURCES ${XRAY_BASIC_MODE_SOURCES} 261 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 262 CFLAGS ${XRAY_CFLAGS} 263 DEFS ${XRAY_COMMON_DEFINITIONS} 264 DEPS ${XRAY_DEPS}) 265 add_compiler_rt_object_libraries(RTXrayPROFILING 266 ARCHS ${arch} 267 SOURCES ${XRAY_PROFILING_MODE_SOURCES} 268 ADDITIONAL_HEADERS ${XRAY_IMPL_HEADERS} 269 CFLAGS ${XRAY_CFLAGS} 270 DEFS ${XRAY_COMMON_DEFINITIONS} 271 DEPS ${XRAY_DEPS}) 272 273 # Common XRay archive for instrumented binaries. 274 add_compiler_rt_runtime(clang_rt.xray 275 STATIC 276 ARCHS ${arch} 277 CFLAGS ${XRAY_CFLAGS} 278 DEFS ${XRAY_COMMON_DEFINITIONS} 279 OBJECT_LIBS ${XRAY_COMMON_RUNTIME_OBJECT_LIBS} RTXray 280 PARENT_TARGET xray) 281 # FDR mode runtime archive (addon for clang_rt.xray) 282 add_compiler_rt_runtime(clang_rt.xray-fdr 283 STATIC 284 ARCHS ${arch} 285 CFLAGS ${XRAY_CFLAGS} 286 DEFS ${XRAY_COMMON_DEFINITIONS} 287 OBJECT_LIBS RTXrayFDR 288 PARENT_TARGET xray) 289 # Basic mode runtime archive (addon for clang_rt.xray) 290 add_compiler_rt_runtime(clang_rt.xray-basic 291 STATIC 292 ARCHS ${arch} 293 CFLAGS ${XRAY_CFLAGS} 294 DEFS ${XRAY_COMMON_DEFINITIONS} 295 OBJECT_LIBS RTXrayBASIC 296 PARENT_TARGET xray) 297 # Profiler Mode runtime 298 add_compiler_rt_runtime(clang_rt.xray-profiling 299 STATIC 300 ARCHS ${arch} 301 CFLAGS ${XRAY_CFLAGS} 302 DEFS ${XRAY_COMMON_DEFINITIONS} 303 OBJECT_LIBS RTXrayPROFILING 304 PARENT_TARGET xray) 305 endforeach() 306endif() # not Apple 307 308if(COMPILER_RT_INCLUDE_TESTS) 309 add_subdirectory(tests) 310endif() 311