xref: /openbsd-src/gnu/llvm/compiler-rt/lib/sanitizer_common/CMakeLists.txt (revision 810390e339a5425391477d5d41c78d7cab2424ac)
1# Build system for the common Sanitizer runtime support library components.
2# These components are shared between AddressSanitizer and ThreadSanitizer.
3
4set(SANITIZER_SOURCES_NOTERMINATION
5  sanitizer_allocator.cpp
6  sanitizer_common.cpp
7  sanitizer_deadlock_detector1.cpp
8  sanitizer_deadlock_detector2.cpp
9  sanitizer_errno.cpp
10  sanitizer_file.cpp
11  sanitizer_flags.cpp
12  sanitizer_flag_parser.cpp
13  sanitizer_fuchsia.cpp
14  sanitizer_libc.cpp
15  sanitizer_libignore.cpp
16  sanitizer_linux.cpp
17  sanitizer_linux_s390.cpp
18  sanitizer_mac.cpp
19  sanitizer_mutex.cpp
20  sanitizer_netbsd.cpp
21  sanitizer_platform_limits_freebsd.cpp
22  sanitizer_platform_limits_linux.cpp
23  sanitizer_platform_limits_netbsd.cpp
24  sanitizer_platform_limits_posix.cpp
25  sanitizer_platform_limits_solaris.cpp
26  sanitizer_posix.cpp
27  sanitizer_printf.cpp
28  sanitizer_procmaps_common.cpp
29  sanitizer_procmaps_bsd.cpp
30  sanitizer_procmaps_fuchsia.cpp
31  sanitizer_procmaps_linux.cpp
32  sanitizer_procmaps_mac.cpp
33  sanitizer_procmaps_solaris.cpp
34  sanitizer_solaris.cpp
35  sanitizer_stoptheworld_fuchsia.cpp
36  sanitizer_stoptheworld_mac.cpp
37  sanitizer_stoptheworld_win.cpp
38  sanitizer_suppressions.cpp
39  sanitizer_tls_get_addr.cpp
40  sanitizer_thread_registry.cpp
41  sanitizer_type_traits.cpp
42  sanitizer_win.cpp
43  )
44
45set(SANITIZER_SOURCES
46  ${SANITIZER_SOURCES_NOTERMINATION}
47  sanitizer_termination.cpp
48  )
49
50# Libc functions stubs. These sources should be linked instead of
51# SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on
52# libc.
53set(SANITIZER_NOLIBC_SOURCES
54  sanitizer_common_nolibc.cpp
55  )
56
57set(SANITIZER_LIBCDEP_SOURCES
58  sanitizer_common_libcdep.cpp
59  sanitizer_allocator_checks.cpp
60  sanitizer_linux_libcdep.cpp
61  sanitizer_mac_libcdep.cpp
62  sanitizer_posix_libcdep.cpp
63  sanitizer_stoptheworld_linux_libcdep.cpp
64  sanitizer_stoptheworld_netbsd_libcdep.cpp
65  )
66
67set(SANITIZER_COVERAGE_SOURCES
68  sancov_flags.cpp
69  sanitizer_coverage_fuchsia.cpp
70  sanitizer_coverage_libcdep_new.cpp
71  sanitizer_coverage_win_sections.cpp
72  )
73
74set(SANITIZER_SYMBOLIZER_SOURCES
75  sanitizer_allocator_report.cpp
76  sanitizer_chained_origin_depot.cpp
77  sanitizer_stack_store.cpp
78  sanitizer_stackdepot.cpp
79  sanitizer_stacktrace.cpp
80  sanitizer_stacktrace_libcdep.cpp
81  sanitizer_stacktrace_printer.cpp
82  sanitizer_stacktrace_sparc.cpp
83  sanitizer_symbolizer.cpp
84  sanitizer_symbolizer_libbacktrace.cpp
85  sanitizer_symbolizer_libcdep.cpp
86  sanitizer_symbolizer_mac.cpp
87  sanitizer_symbolizer_markup.cpp
88  sanitizer_symbolizer_posix_libcdep.cpp
89  sanitizer_symbolizer_report.cpp
90  sanitizer_symbolizer_win.cpp
91  sanitizer_unwind_linux_libcdep.cpp
92  sanitizer_unwind_win.cpp
93  )
94
95# Explicitly list all sanitizer_common headers. Not all of these are
96# included in sanitizer_common source files, but we need to depend on
97# headers when building our custom unit tests.
98set(SANITIZER_IMPL_HEADERS
99  sancov_flags.h
100  sancov_flags.inc
101  sanitizer_addrhashmap.h
102  sanitizer_allocator.h
103  sanitizer_allocator_checks.h
104  sanitizer_allocator_combined.h
105  sanitizer_allocator_dlsym.h
106  sanitizer_allocator_interface.h
107  sanitizer_allocator_internal.h
108  sanitizer_allocator_local_cache.h
109  sanitizer_allocator_primary32.h
110  sanitizer_allocator_primary64.h
111  sanitizer_allocator_report.h
112  sanitizer_allocator_secondary.h
113  sanitizer_allocator_size_class_map.h
114  sanitizer_allocator_stats.h
115  sanitizer_asm.h
116  sanitizer_atomic.h
117  sanitizer_atomic_clang.h
118  sanitizer_atomic_clang_mips.h
119  sanitizer_atomic_clang_other.h
120  sanitizer_atomic_clang_x86.h
121  sanitizer_atomic_msvc.h
122  sanitizer_bitvector.h
123  sanitizer_bvgraph.h
124  sanitizer_chained_origin_depot.h
125  sanitizer_common.h
126  sanitizer_common_interceptors.inc
127  sanitizer_common_interceptors_format.inc
128  sanitizer_common_interceptors_ioctl.inc
129  sanitizer_common_interface.inc
130  sanitizer_common_interface_posix.inc
131  sanitizer_common_syscalls.inc
132  sanitizer_coverage_interface.inc
133  sanitizer_dbghelp.h
134  sanitizer_deadlock_detector.h
135  sanitizer_deadlock_detector_interface.h
136  sanitizer_dense_map.h
137  sanitizer_dense_map_info.h
138  sanitizer_errno.h
139  sanitizer_errno_codes.h
140  sanitizer_file.h
141  sanitizer_flag_parser.h
142  sanitizer_flags.h
143  sanitizer_flags.inc
144  sanitizer_flat_map.h
145  sanitizer_freebsd.h
146  sanitizer_fuchsia.h
147  sanitizer_getauxval.h
148  sanitizer_hash.h
149  sanitizer_interceptors_ioctl_netbsd.inc
150  sanitizer_interface_internal.h
151  sanitizer_internal_defs.h
152  sanitizer_leb128.h
153  sanitizer_lfstack.h
154  sanitizer_libc.h
155  sanitizer_libignore.h
156  sanitizer_linux.h
157  sanitizer_list.h
158  sanitizer_local_address_space_view.h
159  sanitizer_lzw.h
160  sanitizer_mac.h
161  sanitizer_malloc_mac.inc
162  sanitizer_mutex.h
163  sanitizer_placement_new.h
164  sanitizer_platform.h
165  sanitizer_platform_interceptors.h
166  sanitizer_platform_limits_netbsd.h
167  sanitizer_platform_limits_posix.h
168  sanitizer_platform_limits_solaris.h
169  sanitizer_posix.h
170  sanitizer_procmaps.h
171  sanitizer_ptrauth.h
172  sanitizer_quarantine.h
173  sanitizer_report_decorator.h
174  sanitizer_ring_buffer.h
175  sanitizer_signal_interceptors.inc
176  sanitizer_stack_store.h
177  sanitizer_stackdepot.h
178  sanitizer_stackdepotbase.h
179  sanitizer_stacktrace.h
180  sanitizer_stacktrace_printer.h
181  sanitizer_stoptheworld.h
182  sanitizer_suppressions.h
183  sanitizer_symbolizer.h
184  sanitizer_symbolizer_fuchsia.h
185  sanitizer_symbolizer_internal.h
186  sanitizer_symbolizer_libbacktrace.h
187  sanitizer_symbolizer_mac.h
188  sanitizer_syscall_generic.inc
189  sanitizer_syscall_linux_aarch64.inc
190  sanitizer_syscall_linux_arm.inc
191  sanitizer_syscall_linux_x86_64.inc
192  sanitizer_syscall_linux_riscv64.inc
193  sanitizer_syscall_linux_loongarch64.inc
194  sanitizer_syscalls_netbsd.inc
195  sanitizer_thread_registry.h
196  sanitizer_thread_safety.h
197  sanitizer_tls_get_addr.h
198  sanitizer_vector.h
199  sanitizer_win.h
200  sanitizer_win_defs.h
201  sanitizer_win_dll_thunk.h
202  sanitizer_win_weak_interception.h
203  )
204
205include_directories(..)
206
207set(SANITIZER_COMMON_DEFINITIONS
208  HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H})
209
210set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS})
211
212# Too many existing bugs, needs cleanup.
213append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format SANITIZER_CFLAGS)
214
215append_rtti_flag(OFF SANITIZER_CFLAGS)
216
217append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570
218               SANITIZER_CFLAGS)
219append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors
220               SANITIZER_CFLAGS)
221
222if(APPLE)
223  set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS})
224endif()
225
226add_compiler_rt_object_libraries(RTSanitizerCommon
227  ${OS_OPTION}
228  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
229  SOURCES ${SANITIZER_SOURCES}
230  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
231  CFLAGS ${SANITIZER_CFLAGS}
232  DEFS ${SANITIZER_COMMON_DEFINITIONS})
233add_compiler_rt_object_libraries(RTSanitizerCommonNoTermination
234  ${OS_OPTION}
235  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
236  SOURCES ${SANITIZER_SOURCES_NOTERMINATION}
237  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
238  CFLAGS ${SANITIZER_CFLAGS}
239  DEFS ${SANITIZER_COMMON_DEFINITIONS})
240add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc
241  ${OS_OPTION}
242  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
243  SOURCES ${SANITIZER_NOLIBC_SOURCES}
244  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
245  CFLAGS ${SANITIZER_CFLAGS}
246  DEFS ${SANITIZER_COMMON_DEFINITIONS})
247add_compiler_rt_object_libraries(RTSanitizerCommonLibc
248  ${OS_OPTION}
249  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
250  SOURCES ${SANITIZER_LIBCDEP_SOURCES}
251  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
252  CFLAGS ${SANITIZER_CFLAGS}
253  DEFS ${SANITIZER_COMMON_DEFINITIONS})
254add_compiler_rt_object_libraries(RTSanitizerCommonCoverage
255  ${OS_OPTION}
256  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
257  SOURCES ${SANITIZER_COVERAGE_SOURCES}
258  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
259  CFLAGS ${SANITIZER_CFLAGS}
260  DEFS ${SANITIZER_COMMON_DEFINITIONS})
261add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizer
262  ${OS_OPTION}
263  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
264  SOURCES ${SANITIZER_SYMBOLIZER_SOURCES}
265  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
266  CFLAGS ${SANITIZER_CFLAGS}
267  DEFS ${SANITIZER_COMMON_DEFINITIONS})
268
269set(SANITIZER_NO_WEAK_HOOKS_CFLAGS ${SANITIZER_CFLAGS})
270list(APPEND SANITIZER_NO_WEAK_HOOKS_CFLAGS "-DSANITIZER_SUPPORTS_WEAK_HOOKS=0")
271add_compiler_rt_object_libraries(RTSanitizerCommonNoHooks
272  ${OS_OPTION}
273  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
274  SOURCES ${SANITIZER_SOURCES}
275  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
276  CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS}
277  DEFS ${SANITIZER_COMMON_DEFINITIONS})
278add_compiler_rt_object_libraries(RTSanitizerCommonLibcNoHooks
279  ${OS_OPTION}
280  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
281  SOURCES ${SANITIZER_LIBCDEP_SOURCES}
282  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
283  CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS}
284  DEFS ${SANITIZER_COMMON_DEFINITIONS})
285add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizerNoHooks
286  ${OS_OPTION}
287  ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
288  SOURCES ${SANITIZER_SYMBOLIZER_SOURCES}
289  ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS}
290  CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS}
291  DEFS ${SANITIZER_COMMON_DEFINITIONS})
292
293if(WIN32)
294  add_compiler_rt_object_libraries(SanitizerCommonWeakInterception
295    ${SANITIZER_COMMON_SUPPORTED_OS}
296    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
297    SOURCES
298      sanitizer_win_weak_interception.cpp
299    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC
300    DEFS ${SANITIZER_COMMON_DEFINITIONS})
301  add_compiler_rt_object_libraries(SancovWeakInterception
302    ${SANITIZER_COMMON_SUPPORTED_OS}
303    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
304    SOURCES
305      sanitizer_coverage_win_weak_interception.cpp
306    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC
307    DEFS ${SANITIZER_COMMON_DEFINITIONS})
308
309  add_compiler_rt_object_libraries(SanitizerCommonDllThunk
310    ${SANITIZER_COMMON_SUPPORTED_OS}
311    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
312    SOURCES
313      sanitizer_win_dll_thunk.cpp
314    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK
315    DEFS ${SANITIZER_COMMON_DEFINITIONS})
316  add_compiler_rt_object_libraries(SancovDllThunk
317    ${SANITIZER_COMMON_SUPPORTED_OS}
318    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
319    SOURCES
320      sanitizer_coverage_win_dll_thunk.cpp
321      sanitizer_coverage_win_sections.cpp
322    CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK
323    DEFS ${SANITIZER_COMMON_DEFINITIONS})
324
325  set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK")
326  if(MSVC)
327    list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl")
328  elseif(CMAKE_C_COMPILER_ID MATCHES Clang)
329    list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs")
330  endif()
331  add_compiler_rt_object_libraries(SanitizerCommonDynamicRuntimeThunk
332    ${SANITIZER_COMMON_SUPPORTED_OS}
333    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
334    SOURCES
335      sanitizer_win_dynamic_runtime_thunk.cpp
336    CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}
337    DEFS ${SANITIZER_COMMON_DEFINITIONS})
338  add_compiler_rt_object_libraries(SancovDynamicRuntimeThunk
339    ${SANITIZER_COMMON_SUPPORTED_OS}
340    ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
341    SOURCES
342      sanitizer_coverage_win_dynamic_runtime_thunk.cpp
343      sanitizer_coverage_win_sections.cpp
344    CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS}
345    DEFS ${SANITIZER_COMMON_DEFINITIONS})
346endif()
347
348# Unit tests for common sanitizer runtime.
349if(COMPILER_RT_INCLUDE_TESTS)
350  add_subdirectory(tests)
351endif()
352