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