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