xref: /openbsd-src/gnu/llvm/compiler-rt/lib/xray/CMakeLists.txt (revision 810390e339a5425391477d5d41c78d7cab2424ac)
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