[libc] Switch to using the generic `<gpuintrin.h>` implementations (#121810)
[llvm-project.git] / compiler-rt / lib / xray / CMakeLists.txt
blobe7f01a2f4f1640c2510367c87e647b65a4ab07f9
1 # Build for all components of the XRay runtime support library.
3 # XRay runtime library implementation files.
4 set(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   )
13 set(XRAY_DSO_SOURCES
14   xray_dso_init.cpp
15   )
17 # Implementation files for all XRay modes.
18 set(XRAY_FDR_MODE_SOURCES
19   xray_fdr_flags.cpp
20   xray_fdr_logging.cpp
21   )
23 set(XRAY_BASIC_MODE_SOURCES
24   xray_basic_flags.cpp
25   xray_basic_logging.cpp
26   )
28 set(XRAY_PROFILING_MODE_SOURCES
29   xray_profile_collector.cpp
30   xray_profiling.cpp
31   xray_profiling_flags.cpp
32   )
34 # Implementation files for all XRay architectures.
35 set(x86_64_SOURCES
36   xray_x86_64.cpp
37   xray_trampoline_x86_64.S
38   )
40 set(x86_64_DSO_SOURCES
41    xray_trampoline_x86_64.S
42    )
45 set(arm_SOURCES
46   xray_arm.cpp
47   xray_trampoline_arm.S
48   )
50 set(armhf_SOURCES
51   ${arm_SOURCES}
52   )
54 set(aarch64_SOURCES
55   xray_AArch64.cpp
56   xray_trampoline_AArch64.S
57   )
59 set(aarch64_DSO_SOURCES
60   xray_trampoline_AArch64.S
61   )
63 set(loongarch64_SOURCES
64   xray_loongarch64.cpp
65   xray_trampoline_loongarch64.S
66   )
68 set(mips_SOURCES
69   xray_mips.cpp
70   xray_trampoline_mips.S
71   )
73 set(mipsel_SOURCES
74   xray_mips.cpp
75   xray_trampoline_mips.S
76   )
78 set(mips64_SOURCES
79   xray_mips64.cpp
80   xray_trampoline_mips64.S
81   )
83 set(mips64el_SOURCES
84   xray_mips64.cpp
85   xray_trampoline_mips64.S
86   )
88 set(powerpc64le_SOURCES
89   xray_powerpc64.cpp
90   xray_trampoline_powerpc64.cpp
91   xray_trampoline_powerpc64_asm.S
92   )
94 set(hexagon_SOURCES
95   xray_hexagon.cpp
96   xray_trampoline_hexagon.S
97   )
99 set(riscv32_SOURCES
100   xray_riscv.cpp
101   xray_trampoline_riscv32.S
102   )
104 set(riscv64_SOURCES
105   xray_riscv.cpp
106   xray_trampoline_riscv64.S
107   )
109 set(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   )
122 set(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   )
150 # Create list of all source files for
151 # consumption by tests.
152 set(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   )
173 list(REMOVE_DUPLICATES XRAY_ALL_SOURCE_FILES)
174 # Make list that uses absolute paths
175 set(XRAY_ALL_SOURCE_FILES_ABS_PATHS "")
176 foreach (src_file ${XRAY_ALL_SOURCE_FILES})
177   list(APPEND
178     XRAY_ALL_SOURCE_FILES_ABS_PATHS
179     "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}")
180 endforeach()
183 # Now put it all together...
184 include_directories(..)
185 include_directories(../../include)
187 set(XRAY_CFLAGS
188   ${COMPILER_RT_COMMON_CFLAGS}
189   ${COMPILER_RT_CXX_CFLAGS})
190 set(XRAY_COMMON_DEFINITIONS SANITIZER_COMMON_NO_REDEFINE_BUILTINS XRAY_HAS_EXCEPTIONS=1)
192 # DSO trampolines need to be compiled with GOT addressing
193 set(XRAY_COMMON_DEFINITIONS_DSO ${XRAY_COMMON_DEFINITIONS} XRAY_PIC)
195 # Too many existing bugs, needs cleanup.
196 append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format XRAY_CFLAGS)
198 # We don't need RTTI in XRay, so turn that off.
199 append_rtti_flag(OFF XRAY_CFLAGS)
201 set(XRAY_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS})
202 set(XRAY_LINK_LIBS
203   ${COMPILER_RT_UNWINDER_LINK_LIBS}
204   ${COMPILER_RT_CXX_LINK_LIBS})
206 append_list_if(
207   COMPILER_RT_HAS_XRAY_COMPILER_FLAG XRAY_SUPPORTED=1 XRAY_COMMON_DEFINITIONS)
208 append_list_if(
209   COMPILER_RT_BUILD_XRAY_NO_PREINIT XRAY_NO_PREINIT XRAY_COMMON_DEFINITIONS)
211 add_compiler_rt_component(xray)
213 set(XRAY_COMMON_RUNTIME_OBJECT_LIBS
214     RTSanitizerCommon
215     RTSanitizerCommonLibc)
217 # XRay uses C++ standard library headers.
218 if (TARGET cxx-headers OR HAVE_LIBCXX)
219   set(XRAY_DEPS cxx-headers)
220 endif()
222 if (APPLE)
223   add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)
224   add_weak_symbols("xray" WEAK_SYMBOL_LINK_FLAGS)
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})
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)
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)
346 else() # 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})
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)
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()
441 endif() # not Apple
443 if(COMPILER_RT_INCLUDE_TESTS)
444   add_subdirectory(tests)
445 endif()