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_persistent_allocator.cpp 22 sanitizer_platform_limits_freebsd.cpp 23 sanitizer_platform_limits_linux.cpp 24 sanitizer_platform_limits_netbsd.cpp 25 sanitizer_platform_limits_posix.cpp 26 sanitizer_platform_limits_solaris.cpp 27 sanitizer_posix.cpp 28 sanitizer_printf.cpp 29 sanitizer_procmaps_common.cpp 30 sanitizer_procmaps_bsd.cpp 31 sanitizer_procmaps_fuchsia.cpp 32 sanitizer_procmaps_linux.cpp 33 sanitizer_procmaps_mac.cpp 34 sanitizer_procmaps_solaris.cpp 35 sanitizer_solaris.cpp 36 sanitizer_stoptheworld_fuchsia.cpp 37 sanitizer_stoptheworld_mac.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_stackdepot.cpp 78 sanitizer_stacktrace.cpp 79 sanitizer_stacktrace_libcdep.cpp 80 sanitizer_stacktrace_printer.cpp 81 sanitizer_stacktrace_sparc.cpp 82 sanitizer_symbolizer.cpp 83 sanitizer_symbolizer_libbacktrace.cpp 84 sanitizer_symbolizer_libcdep.cpp 85 sanitizer_symbolizer_mac.cpp 86 sanitizer_symbolizer_markup.cpp 87 sanitizer_symbolizer_posix_libcdep.cpp 88 sanitizer_symbolizer_report.cpp 89 sanitizer_symbolizer_win.cpp 90 sanitizer_unwind_linux_libcdep.cpp 91 sanitizer_unwind_win.cpp 92 ) 93 94# Explicitly list all sanitizer_common headers. Not all of these are 95# included in sanitizer_common source files, but we need to depend on 96# headers when building our custom unit tests. 97set(SANITIZER_IMPL_HEADERS 98 sancov_flags.h 99 sancov_flags.inc 100 sanitizer_addrhashmap.h 101 sanitizer_allocator.h 102 sanitizer_allocator_bytemap.h 103 sanitizer_allocator_checks.h 104 sanitizer_allocator_combined.h 105 sanitizer_allocator_interface.h 106 sanitizer_allocator_internal.h 107 sanitizer_allocator_local_cache.h 108 sanitizer_allocator_primary32.h 109 sanitizer_allocator_primary64.h 110 sanitizer_allocator_report.h 111 sanitizer_allocator_secondary.h 112 sanitizer_allocator_size_class_map.h 113 sanitizer_allocator_stats.h 114 sanitizer_asm.h 115 sanitizer_atomic.h 116 sanitizer_atomic_clang.h 117 sanitizer_atomic_clang_mips.h 118 sanitizer_atomic_clang_other.h 119 sanitizer_atomic_clang_x86.h 120 sanitizer_atomic_msvc.h 121 sanitizer_bitvector.h 122 sanitizer_bvgraph.h 123 sanitizer_chained_origin_depot.h 124 sanitizer_common.h 125 sanitizer_common_interceptors.inc 126 sanitizer_common_interceptors_format.inc 127 sanitizer_common_interceptors_ioctl.inc 128 sanitizer_common_interface.inc 129 sanitizer_common_interface_posix.inc 130 sanitizer_common_syscalls.inc 131 sanitizer_coverage_interface.inc 132 sanitizer_dbghelp.h 133 sanitizer_deadlock_detector.h 134 sanitizer_deadlock_detector_interface.h 135 sanitizer_errno.h 136 sanitizer_errno_codes.h 137 sanitizer_file.h 138 sanitizer_flag_parser.h 139 sanitizer_flags.h 140 sanitizer_flags.inc 141 sanitizer_freebsd.h 142 sanitizer_fuchsia.h 143 sanitizer_getauxval.h 144 sanitizer_hash.h 145 sanitizer_interceptors_ioctl_netbsd.inc 146 sanitizer_interface_internal.h 147 sanitizer_internal_defs.h 148 sanitizer_lfstack.h 149 sanitizer_libc.h 150 sanitizer_libignore.h 151 sanitizer_linux.h 152 sanitizer_list.h 153 sanitizer_local_address_space_view.h 154 sanitizer_mac.h 155 sanitizer_malloc_mac.inc 156 sanitizer_mutex.h 157 sanitizer_persistent_allocator.h 158 sanitizer_placement_new.h 159 sanitizer_platform.h 160 sanitizer_platform_interceptors.h 161 sanitizer_platform_limits_netbsd.h 162 sanitizer_platform_limits_posix.h 163 sanitizer_platform_limits_solaris.h 164 sanitizer_posix.h 165 sanitizer_procmaps.h 166 sanitizer_ptrauth.h 167 sanitizer_quarantine.h 168 sanitizer_report_decorator.h 169 sanitizer_ring_buffer.h 170 sanitizer_signal_interceptors.inc 171 sanitizer_stackdepot.h 172 sanitizer_stackdepotbase.h 173 sanitizer_stacktrace.h 174 sanitizer_stacktrace_printer.h 175 sanitizer_stoptheworld.h 176 sanitizer_suppressions.h 177 sanitizer_symbolizer.h 178 sanitizer_symbolizer_fuchsia.h 179 sanitizer_symbolizer_internal.h 180 sanitizer_symbolizer_libbacktrace.h 181 sanitizer_symbolizer_mac.h 182 sanitizer_syscall_generic.inc 183 sanitizer_syscall_linux_aarch64.inc 184 sanitizer_syscall_linux_arm.inc 185 sanitizer_syscall_linux_x86_64.inc 186 sanitizer_syscall_linux_riscv64.inc 187 sanitizer_syscalls_netbsd.inc 188 sanitizer_thread_registry.h 189 sanitizer_thread_safety.h 190 sanitizer_tls_get_addr.h 191 sanitizer_vector.h 192 sanitizer_win.h 193 sanitizer_win_defs.h 194 sanitizer_win_dll_thunk.h 195 sanitizer_win_weak_interception.h 196 ) 197 198include_directories(..) 199 200set(SANITIZER_COMMON_DEFINITIONS 201 HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H}) 202 203set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS}) 204append_rtti_flag(OFF SANITIZER_CFLAGS) 205 206append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570 207 SANITIZER_CFLAGS) 208append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors 209 SANITIZER_CFLAGS) 210 211if(APPLE) 212 set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS}) 213endif() 214 215add_compiler_rt_object_libraries(RTSanitizerCommon 216 ${OS_OPTION} 217 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 218 SOURCES ${SANITIZER_SOURCES} 219 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 220 CFLAGS ${SANITIZER_CFLAGS} 221 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 222add_compiler_rt_object_libraries(RTSanitizerCommonNoTermination 223 ${OS_OPTION} 224 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 225 SOURCES ${SANITIZER_SOURCES_NOTERMINATION} 226 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 227 CFLAGS ${SANITIZER_CFLAGS} 228 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 229add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc 230 ${OS_OPTION} 231 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 232 SOURCES ${SANITIZER_NOLIBC_SOURCES} 233 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 234 CFLAGS ${SANITIZER_CFLAGS} 235 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 236add_compiler_rt_object_libraries(RTSanitizerCommonLibc 237 ${OS_OPTION} 238 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 239 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 240 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 241 CFLAGS ${SANITIZER_CFLAGS} 242 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 243add_compiler_rt_object_libraries(RTSanitizerCommonCoverage 244 ${OS_OPTION} 245 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 246 SOURCES ${SANITIZER_COVERAGE_SOURCES} 247 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 248 CFLAGS ${SANITIZER_CFLAGS} 249 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 250add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizer 251 ${OS_OPTION} 252 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 253 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 254 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 255 CFLAGS ${SANITIZER_CFLAGS} 256 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 257 258set(SANITIZER_NO_WEAK_HOOKS_CFLAGS ${SANITIZER_CFLAGS}) 259list(APPEND SANITIZER_NO_WEAK_HOOKS_CFLAGS "-DSANITIZER_SUPPORTS_WEAK_HOOKS=0") 260add_compiler_rt_object_libraries(RTSanitizerCommonNoHooks 261 ${OS_OPTION} 262 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 263 SOURCES ${SANITIZER_SOURCES} 264 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 265 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 266 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 267add_compiler_rt_object_libraries(RTSanitizerCommonLibcNoHooks 268 ${OS_OPTION} 269 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 270 SOURCES ${SANITIZER_LIBCDEP_SOURCES} 271 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 272 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 273 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 274add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizerNoHooks 275 ${OS_OPTION} 276 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 277 SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} 278 ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} 279 CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} 280 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 281 282if(WIN32) 283 add_compiler_rt_object_libraries(SanitizerCommonWeakInterception 284 ${SANITIZER_COMMON_SUPPORTED_OS} 285 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 286 SOURCES sanitizer_win_weak_interception.cpp 287 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC 288 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 289 add_compiler_rt_object_libraries(SancovWeakInterception 290 ${SANITIZER_COMMON_SUPPORTED_OS} 291 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 292 SOURCES sanitizer_coverage_win_weak_interception.cpp 293 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC 294 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 295 296 add_compiler_rt_object_libraries(SanitizerCommonDllThunk 297 ${SANITIZER_COMMON_SUPPORTED_OS} 298 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 299 SOURCES sanitizer_win_dll_thunk.cpp 300 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK 301 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 302 add_compiler_rt_object_libraries(SancovDllThunk 303 ${SANITIZER_COMMON_SUPPORTED_OS} 304 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 305 SOURCES sanitizer_coverage_win_dll_thunk.cpp 306 sanitizer_coverage_win_sections.cpp 307 CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK 308 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 309 310 set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK") 311 if(MSVC) 312 list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl") 313 elseif(CMAKE_C_COMPILER_ID MATCHES Clang) 314 list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs") 315 endif() 316 add_compiler_rt_object_libraries(SanitizerCommonDynamicRuntimeThunk 317 ${SANITIZER_COMMON_SUPPORTED_OS} 318 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 319 SOURCES sanitizer_win_dynamic_runtime_thunk.cpp 320 CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} 321 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 322 add_compiler_rt_object_libraries(SancovDynamicRuntimeThunk 323 ${SANITIZER_COMMON_SUPPORTED_OS} 324 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} 325 SOURCES sanitizer_coverage_win_dynamic_runtime_thunk.cpp 326 sanitizer_coverage_win_sections.cpp 327 CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} 328 DEFS ${SANITIZER_COMMON_DEFINITIONS}) 329endif() 330 331# Unit tests for common sanitizer runtime. 332if(COMPILER_RT_INCLUDE_TESTS) 333 add_subdirectory(tests) 334endif() 335