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_range.cpp 35 sanitizer_solaris.cpp 36 sanitizer_stoptheworld_fuchsia.cpp 37 sanitizer_stoptheworld_mac.cpp 38 sanitizer_stoptheworld_win.cpp 39 sanitizer_suppressions.cpp 40 sanitizer_tls_get_addr.cpp 41 sanitizer_thread_arg_retval.cpp 42 sanitizer_thread_registry.cpp 43 sanitizer_type_traits.cpp 44 sanitizer_win.cpp 45 sanitizer_win_interception.cpp 46 ) 47 48set(SANITIZER_SOURCES 49 ${SANITIZER_SOURCES_NOTERMINATION} 50 sanitizer_termination.cpp 51 ) 52 53# Libc functions stubs. These sources should be linked instead of 54# SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on 55# libc. 56set(SANITIZER_NOLIBC_SOURCES 57 sanitizer_common_nolibc.cpp 58 ) 59 60set(SANITIZER_LIBCDEP_SOURCES 61 sanitizer_common_libcdep.cpp 62 sanitizer_allocator_checks.cpp 63 sanitizer_dl.cpp 64 sanitizer_linux_libcdep.cpp 65 sanitizer_mac_libcdep.cpp 66 sanitizer_posix_libcdep.cpp 67 sanitizer_stoptheworld_linux_libcdep.cpp 68 sanitizer_stoptheworld_netbsd_libcdep.cpp 69 ) 70 71set(SANITIZER_COVERAGE_SOURCES 72 sancov_flags.cpp 73 sanitizer_coverage_fuchsia.cpp 74 sanitizer_coverage_libcdep_new.cpp 75 sanitizer_coverage_win_sections.cpp 76 ) 77 78set(SANITIZER_SYMBOLIZER_SOURCES 79 sanitizer_allocator_report.cpp 80 sanitizer_chained_origin_depot.cpp 81 sanitizer_stack_store.cpp 82 sanitizer_stackdepot.cpp 83 sanitizer_stacktrace.cpp 84 sanitizer_stacktrace_libcdep.cpp 85 sanitizer_stacktrace_printer.cpp 86 sanitizer_stacktrace_sparc.cpp 87 sanitizer_symbolizer.cpp 88 sanitizer_symbolizer_libbacktrace.cpp 89 sanitizer_symbolizer_libcdep.cpp 90 sanitizer_symbolizer_mac.cpp 91 sanitizer_symbolizer_markup.cpp 92 sanitizer_symbolizer_markup_fuchsia.cpp 93 sanitizer_symbolizer_posix_libcdep.cpp 94 sanitizer_symbolizer_report.cpp 95 sanitizer_symbolizer_report_fuchsia.cpp 96 sanitizer_symbolizer_win.cpp 97 sanitizer_thread_history.cpp 98 sanitizer_unwind_linux_libcdep.cpp 99 sanitizer_unwind_fuchsia.cpp 100 sanitizer_unwind_win.cpp 101 ) 102 103# Explicitly list all sanitizer_common headers. Not all of these are 104# included in sanitizer_common source files, but we need to depend on 105# headers when building our custom unit tests. 106set(SANITIZER_IMPL_HEADERS 107 sancov_flags.h 108 sancov_flags.inc 109 sanitizer_addrhashmap.h 110 sanitizer_allocator.h 111 sanitizer_allocator_checks.h 112 sanitizer_allocator_combined.h 113 sanitizer_allocator_dlsym.h 114 sanitizer_allocator_interface.h 115 sanitizer_allocator_internal.h 116 sanitizer_allocator_local_cache.h 117 sanitizer_allocator_primary32.h 118 sanitizer_allocator_primary64.h 119 sanitizer_allocator_report.h 120 sanitizer_allocator_secondary.h 121 sanitizer_allocator_size_class_map.h 122 sanitizer_allocator_stats.h 123 sanitizer_array_ref.h 124 sanitizer_asm.h 125 sanitizer_atomic.h 126 sanitizer_atomic_clang.h 127 sanitizer_atomic_msvc.h 128 sanitizer_bitvector.h 129 sanitizer_bvgraph.h 130 sanitizer_chained_origin_depot.h 131 sanitizer_common.h 132 sanitizer_common_interceptors.inc 133 sanitizer_common_interceptors_format.inc 134 sanitizer_common_interceptors_ioctl.inc 135 sanitizer_common_interceptors_memintrinsics.inc 136 sanitizer_common_interface.inc 137 sanitizer_common_interface_posix.inc 138 sanitizer_common_syscalls.inc 139 sanitizer_coverage_interface.inc 140 sanitizer_dbghelp.h 141 sanitizer_deadlock_detector.h 142 sanitizer_deadlock_detector_interface.h 143 sanitizer_dense_map.h 144 sanitizer_dense_map_info.h 145 sanitizer_dl.h 146 sanitizer_errno.h 147 sanitizer_errno_codes.h 148 sanitizer_file.h 149 sanitizer_flag_parser.h 150 sanitizer_flags.h 151 sanitizer_flags.inc 152 sanitizer_flat_map.h 153 sanitizer_fuchsia.h 154 sanitizer_getauxval.h 155 sanitizer_hash.h 156 sanitizer_interceptors_ioctl_netbsd.inc 157 sanitizer_interface_internal.h 158 sanitizer_internal_defs.h 159 sanitizer_leb128.h 160 sanitizer_lfstack.h 161 sanitizer_libc.h 162 sanitizer_libignore.h 163 sanitizer_linux.h 164 sanitizer_list.h 165 sanitizer_local_address_space_view.h 166 sanitizer_lzw.h 167 sanitizer_mac.h 168 sanitizer_malloc_mac.inc 169 sanitizer_mutex.h 170 sanitizer_placement_new.h 171 sanitizer_platform.h 172 sanitizer_platform_interceptors.h 173 sanitizer_platform_limits_netbsd.h 174 sanitizer_platform_limits_posix.h 175 sanitizer_platform_limits_solaris.h 176 sanitizer_posix.h 177 sanitizer_procmaps.h 178 sanitizer_ptrauth.h 179 sanitizer_quarantine.h 180 sanitizer_range.h 181 sanitizer_redefine_builtins.h 182 sanitizer_report_decorator.h 183 sanitizer_ring_buffer.h 184 sanitizer_signal_interceptors.inc 185 sanitizer_stack_store.h 186 sanitizer_stackdepot.h 187 sanitizer_stackdepotbase.h 188 sanitizer_stacktrace.h 189 sanitizer_stacktrace_printer.h 190 sanitizer_stoptheworld.h 191 sanitizer_suppressions.h 192 sanitizer_symbolizer.h 193 sanitizer_symbolizer_markup_constants.h 194 sanitizer_symbolizer_internal.h 195 sanitizer_symbolizer_libbacktrace.h 196 sanitizer_symbolizer_mac.h 197 sanitizer_symbolizer_markup.h 198 sanitizer_syscall_generic.inc 199 sanitizer_syscall_linux_aarch64.inc 200 sanitizer_syscall_linux_arm.inc 201 sanitizer_syscall_linux_x86_64.inc 202 sanitizer_syscall_linux_riscv64.inc 203 sanitizer_syscall_linux_loongarch64.inc 204 sanitizer_syscalls_netbsd.inc 205 sanitizer_thread_registry.h 206 sanitizer_thread_safety.h 207 sanitizer_tls_get_addr.h 208 sanitizer_vector.h 209 sanitizer_win.h 210 sanitizer_win_defs.h 211 sanitizer_win_interception.h 212 sanitizer_win_thunk_interception.h 213 ) 214 215if(MSVC) 216 # asan on windows only supports the release dll version of the runtimes, in the interest of 217 # only having one asan dll to support/test. Having asan statically linked 218 # with the runtime might be possible, but it multiplies the number of scenerios to test. 219 # the program USING sanitizers can use whatever version of the runtime it wants to. 220 set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL) 221endif() 222 223include_directories(..) 224 225set(SANITIZER_COMMON_DEFINITIONS 226 HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H}) 227 228# note: L not I, this is nodefaultlibs for msvc 229append_list_if(MSVC /Zl SANITIZER_COMMON_CFLAGS) 230set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 231 232# Too many existing bugs, needs cleanup. 233append_list_if(COMPILER_RT_HAS_WNO_FORMAT -Wno-format SANITIZER_CFLAGS) 234 235append_rtti_flag(OFF SANITIZER_CFLAGS) 236 237append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570 238 SANITIZER_CFLAGS) 239append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors 240 SANITIZER_CFLAGS) 241 242if(APPLE) 243 set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS}) 244endif() 245 246add_compiler_rt_object_libraries(RTSanitizerCommon 247 ${OS_OPTION} 248 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 249 SOURCES ${SANITIZER_SOURCES} 250 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 251 CFLAGS ${SANITIZER_CFLAGS} 252 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 253add_compiler_rt_object_libraries(RTSanitizerCommonNoTermination 254 ${OS_OPTION} 255 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 256 SOURCES ${SANITIZER_SOURCES_NOTERMINATION} 257 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 258 CFLAGS ${SANITIZER_CFLAGS} 259 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 260add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc 261 ${OS_OPTION} 262 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 263 SOURCES ${SANITIZER_NOLIBC_SOURCES} 264 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 265 CFLAGS ${SANITIZER_CFLAGS} 266 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 267add_compiler_rt_object_libraries(RTSanitizerCommonLibc 268 ${OS_OPTION} 269 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 270 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 271 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 272 CFLAGS ${SANITIZER_CFLAGS} 273 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 274add_compiler_rt_object_libraries(RTSanitizerCommonCoverage 275 ${OS_OPTION} 276 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 277 SOURCES ${SANITIZER_COVERAGE_SOURCES} 278 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 279 CFLAGS ${SANITIZER_CFLAGS} 280 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 281add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizer 282 ${OS_OPTION} 283 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 284 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 285 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 286 CFLAGS ${SANITIZER_CFLAGS} 287 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 288 289set(SANITIZER_NO_WEAK_HOOKS_CFLAGS ${SANITIZER_CFLAGS}) 290list(APPEND SANITIZER_NO_WEAK_HOOKS_CFLAGS "-DSANITIZER_SUPPORTS_WEAK_HOOKS=0") 291add_compiler_rt_object_libraries(RTSanitizerCommonNoHooks 292 ${OS_OPTION} 293 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 294 SOURCES ${SANITIZER_SOURCES} 295 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 296 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 297 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 298add_compiler_rt_object_libraries(RTSanitizerCommonLibcNoHooks 299 ${OS_OPTION} 300 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 301 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 302 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 303 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 304 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 305add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizerNoHooks 306 ${OS_OPTION} 307 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 308 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 309 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 310 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 311 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 312 313if(WIN32) 314 set(RUNTIME_THUNK_CFLAGS -DSANITIZER_DYNAMIC_RUNTIME_THUNK -DSANITIZER_STATIC_RUNTIME_THUNK) 315 append_list_if(MSVC /Zl RUNTIME_THUNK_CFLAGS) 316 add_compiler_rt_object_libraries(SanitizerRuntimeThunk 317 ${SANITIZER_COMMON_SUPPORTED_OS} 318 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 319 SOURCES 320 sanitizer_win_thunk_interception.cpp 321 CFLAGS ${SANITIZER_CFLAGS} ${RUNTIME_THUNK_CFLAGS} 322 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 323 324 add_compiler_rt_object_libraries(SancovRuntimeThunk 325 ${SANITIZER_COMMON_SUPPORTED_OS} 326 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 327 SOURCES 328 sanitizer_coverage_win_runtime_thunk.cpp 329 sanitizer_coverage_win_sections.cpp 330 CFLAGS ${SANITIZER_CFLAGS} ${RUNTIME_THUNK_CFLAGS} 331 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 332endif() 333 334# Unit tests for common sanitizer runtime. 335if(COMPILER_RT_INCLUDE_TESTS) 336 add_subdirectory(tests) 337endif() 338 339 340foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH}) 341 # Library implementing InternalSymbolizer. Empty by default. 342 add_library(RTSanitizerCommonSymbolizerInternal.${arch} 343 OBJECT IMPORTED GLOBAL) 344endforeach() 345 346if (COMPILER_RT_ENABLE_INTERNAL_SYMBOLIZER) 347 add_subdirectory(symbolizer) 348endif() 349