# Build system for the common Sanitizer runtime support library components. # These components are shared between AddressSanitizer and ThreadSanitizer. set(SANITIZER_SOURCES_NOTERMINATION sanitizer_allocator.cpp sanitizer_common.cpp sanitizer_deadlock_detector1.cpp sanitizer_deadlock_detector2.cpp sanitizer_errno.cpp sanitizer_file.cpp sanitizer_flags.cpp sanitizer_flag_parser.cpp sanitizer_fuchsia.cpp sanitizer_libc.cpp sanitizer_libignore.cpp sanitizer_linux.cpp sanitizer_linux_s390.cpp sanitizer_mac.cpp sanitizer_netbsd.cpp sanitizer_openbsd.cpp sanitizer_persistent_allocator.cpp sanitizer_platform_limits_freebsd.cpp sanitizer_platform_limits_linux.cpp sanitizer_platform_limits_netbsd.cpp sanitizer_platform_limits_openbsd.cpp sanitizer_platform_limits_posix.cpp sanitizer_platform_limits_solaris.cpp sanitizer_posix.cpp sanitizer_printf.cpp sanitizer_procmaps_common.cpp sanitizer_procmaps_bsd.cpp sanitizer_procmaps_linux.cpp sanitizer_procmaps_mac.cpp sanitizer_procmaps_solaris.cpp sanitizer_rtems.cpp sanitizer_solaris.cpp sanitizer_stoptheworld_mac.cpp sanitizer_suppressions.cpp sanitizer_tls_get_addr.cpp sanitizer_thread_registry.cpp sanitizer_type_traits.cpp sanitizer_win.cpp ) set(SANITIZER_SOURCES ${SANITIZER_SOURCES_NOTERMINATION} sanitizer_termination.cpp ) # Libc functions stubs. These sources should be linked instead of # SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on # libc. set(SANITIZER_NOLIBC_SOURCES sanitizer_common_nolibc.cpp ) set(SANITIZER_LIBCDEP_SOURCES sanitizer_common_libcdep.cpp sanitizer_allocator_checks.cpp sanitizer_linux_libcdep.cpp sanitizer_mac_libcdep.cpp sanitizer_posix_libcdep.cpp sanitizer_stoptheworld_linux_libcdep.cpp sanitizer_stoptheworld_netbsd_libcdep.cpp ) set(SANITIZER_COVERAGE_SOURCES sancov_flags.cpp sanitizer_coverage_fuchsia.cpp sanitizer_coverage_libcdep_new.cpp sanitizer_coverage_win_sections.cpp ) set(SANITIZER_SYMBOLIZER_SOURCES sanitizer_allocator_report.cpp sanitizer_stackdepot.cpp sanitizer_stacktrace.cpp sanitizer_stacktrace_libcdep.cpp sanitizer_stacktrace_printer.cpp sanitizer_stacktrace_sparc.cpp sanitizer_symbolizer.cpp sanitizer_symbolizer_libbacktrace.cpp sanitizer_symbolizer_libcdep.cpp sanitizer_symbolizer_mac.cpp sanitizer_symbolizer_markup.cpp sanitizer_symbolizer_posix_libcdep.cpp sanitizer_symbolizer_report.cpp sanitizer_symbolizer_win.cpp sanitizer_unwind_linux_libcdep.cpp sanitizer_unwind_win.cpp ) # Explicitly list all sanitizer_common headers. Not all of these are # included in sanitizer_common source files, but we need to depend on # headers when building our custom unit tests. set(SANITIZER_IMPL_HEADERS sancov_flags.h sancov_flags.inc sanitizer_addrhashmap.h sanitizer_allocator.h sanitizer_allocator_bytemap.h sanitizer_allocator_checks.h sanitizer_allocator_combined.h sanitizer_allocator_interface.h sanitizer_allocator_internal.h sanitizer_allocator_local_cache.h sanitizer_allocator_primary32.h sanitizer_allocator_primary64.h sanitizer_allocator_report.h sanitizer_allocator_secondary.h sanitizer_allocator_size_class_map.h sanitizer_allocator_stats.h sanitizer_asm.h sanitizer_atomic.h sanitizer_atomic_clang.h sanitizer_atomic_clang_mips.h sanitizer_atomic_clang_other.h sanitizer_atomic_clang_x86.h sanitizer_atomic_msvc.h sanitizer_bitvector.h sanitizer_bvgraph.h sanitizer_common.h sanitizer_common_interceptors.inc sanitizer_common_interceptors_format.inc sanitizer_common_interceptors_ioctl.inc sanitizer_common_interface.inc sanitizer_common_interface_posix.inc sanitizer_common_syscalls.inc sanitizer_coverage_interface.inc sanitizer_dbghelp.h sanitizer_deadlock_detector.h sanitizer_deadlock_detector_interface.h sanitizer_errno.h sanitizer_errno_codes.h sanitizer_file.h sanitizer_flag_parser.h sanitizer_flags.h sanitizer_flags.inc sanitizer_freebsd.h sanitizer_fuchsia.h sanitizer_getauxval.h sanitizer_hash.h sanitizer_interceptors_ioctl_netbsd.inc sanitizer_interface_internal.h sanitizer_internal_defs.h sanitizer_lfstack.h sanitizer_libc.h sanitizer_libignore.h sanitizer_linux.h sanitizer_list.h sanitizer_local_address_space_view.h sanitizer_mac.h sanitizer_malloc_mac.inc sanitizer_mutex.h sanitizer_persistent_allocator.h sanitizer_placement_new.h sanitizer_platform.h sanitizer_platform_interceptors.h sanitizer_platform_limits_netbsd.h sanitizer_platform_limits_openbsd.h sanitizer_platform_limits_posix.h sanitizer_platform_limits_solaris.h sanitizer_posix.h sanitizer_procmaps.h sanitizer_quarantine.h sanitizer_report_decorator.h sanitizer_ring_buffer.h sanitizer_rtems.h sanitizer_signal_interceptors.inc sanitizer_stackdepot.h sanitizer_stackdepotbase.h sanitizer_stacktrace.h sanitizer_stacktrace_printer.h sanitizer_stoptheworld.h sanitizer_suppressions.h sanitizer_symbolizer.h sanitizer_symbolizer_fuchsia.h sanitizer_symbolizer_internal.h sanitizer_symbolizer_libbacktrace.h sanitizer_symbolizer_mac.h sanitizer_symbolizer_rtems.h sanitizer_syscall_generic.inc sanitizer_syscall_linux_aarch64.inc sanitizer_syscall_linux_arm.inc sanitizer_syscall_linux_x86_64.inc sanitizer_syscalls_netbsd.inc sanitizer_thread_registry.h sanitizer_tls_get_addr.h sanitizer_vector.h sanitizer_win.h sanitizer_win_defs.h sanitizer_win_dll_thunk.h sanitizer_win_weak_interception.h ) include_directories(..) set(SANITIZER_COMMON_DEFINITIONS HAVE_RPC_XDR_H=${HAVE_RPC_XDR_H}) set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS}) append_rtti_flag(OFF SANITIZER_CFLAGS) append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570 SANITIZER_CFLAGS) append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors SANITIZER_CFLAGS) if(APPLE) set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS}) endif() add_compiler_rt_object_libraries(RTSanitizerCommon ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(RTSanitizerCommonNoTermination ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_SOURCES_NOTERMINATION} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_NOLIBC_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(RTSanitizerCommonLibc ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_LIBCDEP_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(RTSanitizerCommonCoverage ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_COVERAGE_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizer ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) set(SANITIZER_NO_WEAK_HOOKS_CFLAGS ${SANITIZER_CFLAGS}) list(APPEND SANITIZER_NO_WEAK_HOOKS_CFLAGS "-DSANITIZER_SUPPORTS_WEAK_HOOKS=0") add_compiler_rt_object_libraries(RTSanitizerCommonNoHooks ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(RTSanitizerCommonLibcNoHooks ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_LIBCDEP_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(RTSanitizerCommonSymbolizerNoHooks ${OS_OPTION} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES ${SANITIZER_SYMBOLIZER_SOURCES} ADDITIONAL_HEADERS ${SANITIZER_IMPL_HEADERS} CFLAGS ${SANITIZER_NO_WEAK_HOOKS_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) if(WIN32) add_compiler_rt_object_libraries(SanitizerCommonWeakInterception ${SANITIZER_COMMON_SUPPORTED_OS} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES sanitizer_win_weak_interception.cpp CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(SancovWeakInterception ${SANITIZER_COMMON_SUPPORTED_OS} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES sanitizer_coverage_win_weak_interception.cpp CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DYNAMIC DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(SanitizerCommonDllThunk ${SANITIZER_COMMON_SUPPORTED_OS} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES sanitizer_win_dll_thunk.cpp CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(SancovDllThunk ${SANITIZER_COMMON_SUPPORTED_OS} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES sanitizer_coverage_win_dll_thunk.cpp sanitizer_coverage_win_sections.cpp CFLAGS ${SANITIZER_CFLAGS} -DSANITIZER_DLL_THUNK DEFS ${SANITIZER_COMMON_DEFINITIONS}) set(DYNAMIC_RUNTIME_THUNK_CFLAGS "-DSANITIZER_DYNAMIC_RUNTIME_THUNK") if(MSVC) list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-Zl") elseif(CMAKE_C_COMPILER_ID MATCHES Clang) list(APPEND DYNAMIC_RUNTIME_THUNK_CFLAGS "-nodefaultlibs") endif() add_compiler_rt_object_libraries(SanitizerCommonDynamicRuntimeThunk ${SANITIZER_COMMON_SUPPORTED_OS} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES sanitizer_win_dynamic_runtime_thunk.cpp CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) add_compiler_rt_object_libraries(SancovDynamicRuntimeThunk ${SANITIZER_COMMON_SUPPORTED_OS} ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH} SOURCES sanitizer_coverage_win_dynamic_runtime_thunk.cpp sanitizer_coverage_win_sections.cpp CFLAGS ${SANITIZER_CFLAGS} ${DYNAMIC_RUNTIME_THUNK_CFLAGS} DEFS ${SANITIZER_COMMON_DEFINITIONS}) endif() # Unit tests for common sanitizer runtime. if(COMPILER_RT_INCLUDE_TESTS) add_subdirectory(tests) endif()