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