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