CMakeLists.txt revision 49496747758bf44163768ce3e07e40c8f95ccba9
1# Build system for the common Sanitizer runtime support library components. 2# These components are shared between AddressSanitizer and ThreadSanitizer. 3 4set(SANITIZER_SOURCES 5 sanitizer_allocator.cc 6 sanitizer_common.cc 7 sanitizer_flags.cc 8 sanitizer_libc.cc 9 sanitizer_libignore.cc 10 sanitizer_linux.cc 11 sanitizer_mac.cc 12 sanitizer_platform_limits_linux.cc 13 sanitizer_platform_limits_posix.cc 14 sanitizer_posix.cc 15 sanitizer_printf.cc 16 sanitizer_stackdepot.cc 17 sanitizer_stacktrace.cc 18 sanitizer_suppressions.cc 19 sanitizer_symbolizer.cc 20 sanitizer_symbolizer_win.cc 21 sanitizer_thread_registry.cc 22 sanitizer_win.cc) 23 24set(SANITIZER_LIBCDEP_SOURCES 25 sanitizer_common_libcdep.cc 26 sanitizer_linux_libcdep.cc 27 sanitizer_posix_libcdep.cc 28 sanitizer_stacktrace_libcdep.cc 29 sanitizer_stoptheworld_linux_libcdep.cc 30 sanitizer_symbolizer_libcdep.cc 31 sanitizer_symbolizer_posix_libcdep.cc) 32 33# Explicitly list all sanitizer_common headers. Not all of these are 34# included in sanitizer_common source files, but we need to depend on 35# headers when building our custom unit tests. 36set(SANITIZER_HEADERS 37 sanitizer_allocator.h 38 sanitizer_allocator_internal.h 39 sanitizer_atomic_clang.h 40 sanitizer_atomic_msvc.h 41 sanitizer_atomic.h 42 sanitizer_common.h 43 sanitizer_common_interceptors.inc 44 sanitizer_common_interceptors_ioctl.inc 45 sanitizer_common_interceptors_scanf.inc 46 sanitizer_common_syscalls.inc 47 sanitizer_flags.h 48 sanitizer_internal_defs.h 49 sanitizer_lfstack.h 50 sanitizer_libc.h 51 sanitizer_libignore.h 52 sanitizer_linux.h 53 sanitizer_list.h 54 sanitizer_mutex.h 55 sanitizer_placement_new.h 56 sanitizer_platform_interceptors.h 57 sanitizer_procmaps.h 58 sanitizer_quarantine.h 59 sanitizer_report_decorator.h 60 sanitizer_stackdepot.h 61 sanitizer_stacktrace.h 62 sanitizer_symbolizer.h 63 sanitizer_thread_registry.h) 64 65if (NOT MSVC) 66 set(SANITIZER_CFLAGS 67 ${SANITIZER_COMMON_CFLAGS} 68 -fno-rtti) 69else() 70 set(SANITIZER_CFLAGS 71 ${SANITIZER_COMMON_CFLAGS} 72 /GR-) 73endif() 74 75if(SUPPORTS_GLOBAL_CONSTRUCTORS_FLAG) 76 list(APPEND SANITIZER_CFLAGS -Wglobal-constructors) 77endif() 78 79set(SANITIZER_RUNTIME_LIBRARIES) 80if(APPLE) 81 # Build universal binary on APPLE. 82 foreach(os ${SANITIZER_COMMON_SUPPORTED_DARWIN_OS}) 83 add_compiler_rt_darwin_object_library(RTSanitizerCommon ${os} 84 ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH} 85 SOURCES ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES} 86 CFLAGS ${SANITIZER_CFLAGS}) 87 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${os}) 88 endforeach() 89elseif(ANDROID) 90 add_library(RTSanitizerCommon.arm.android OBJECT 91 ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES}) 92 set_target_compile_flags(RTSanitizerCommon.arm.android 93 ${SANITIZER_CFLAGS}) 94 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.arm.android) 95else() 96 # Otherwise, build separate libraries for each target. 97 foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH}) 98 add_compiler_rt_object_library(RTSanitizerCommon ${arch} 99 SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS}) 100 add_compiler_rt_object_library(RTSanitizerCommonLibc ${arch} 101 SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS}) 102 add_compiler_rt_static_runtime(clang_rt.san-${arch} ${arch} 103 SOURCES $<TARGET_OBJECTS:RTSanitizerCommon.${arch}> 104 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}> 105 CFLAGS ${SANITIZER_CFLAGS}) 106 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch} 107 RTSanitizerCommonLibc.${arch}) 108 endforeach() 109endif() 110 111# Unit tests for common sanitizer runtime. 112if(LLVM_INCLUDE_TESTS) 113 add_subdirectory(tests) 114endif() 115