1 # Build system for the common Sanitizer runtime support library components. 2 # These components are shared between AddressSanitizer and ThreadSanitizer. 3 4 set(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_posix.cc 12 sanitizer_posix.cc 13 sanitizer_printf.cc 14 sanitizer_stackdepot.cc 15 sanitizer_stacktrace.cc 16 sanitizer_stoptheworld_linux.cc 17 sanitizer_symbolizer.cc 18 sanitizer_symbolizer_itanium.cc 19 sanitizer_symbolizer_linux.cc 20 sanitizer_symbolizer_mac.cc 21 sanitizer_symbolizer_win.cc 22 sanitizer_thread_registry.cc 23 sanitizer_win.cc 24 ) 25 26 # Explicitly list all sanitizer_common headers. Not all of these are 27 # included in sanitizer_common source files, but we need to depend on 28 # headers when building our custom unit tests. 29 set(SANITIZER_HEADERS 30 sanitizer_allocator.h 31 sanitizer_atomic_clang.h 32 sanitizer_atomic_msvc.h 33 sanitizer_atomic.h 34 sanitizer_common.h 35 sanitizer_common_interceptors.inc 36 sanitizer_common_interceptors_scanf.inc 37 sanitizer_flags.h 38 sanitizer_internal_defs.h 39 sanitizer_lfstack.h 40 sanitizer_libc.h 41 sanitizer_linux.h 42 sanitizer_list.h 43 sanitizer_mutex.h 44 sanitizer_placement_new.h 45 sanitizer_platform_interceptors.h 46 sanitizer_procmaps.h 47 sanitizer_quarantine.h 48 sanitizer_report_decorator.h 49 sanitizer_stackdepot.h 50 sanitizer_stacktrace.h 51 sanitizer_symbolizer.h 52 sanitizer_thread_registry.h 53 ) 54 55 set(SANITIZER_CFLAGS 56 ${SANITIZER_COMMON_CFLAGS} 57 -fno-rtti) 58 59 set(SANITIZER_RUNTIME_LIBRARIES) 60 if(APPLE) 61 # Build universal binary on APPLE. 62 add_compiler_rt_osx_object_library(RTSanitizerCommon 63 ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH} 64 SOURCES ${SANITIZER_SOURCES} 65 CFLAGS ${SANITIZER_CFLAGS}) 66 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.osx) 67 elseif(ANDROID) 68 add_library(RTSanitizerCommon.arm.android OBJECT ${SANITIZER_SOURCES}) 69 set_target_compile_flags(RTSanitizerCommon.arm.android 70 ${SANITIZER_CFLAGS}) 71 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.arm.android) 72 else() 73 # Otherwise, build separate libraries for each target. 74 foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH}) 75 add_compiler_rt_object_library(RTSanitizerCommon ${arch} 76 SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS}) 77 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch}) 78 endforeach() 79 endif() 80 81 # Unit tests for common sanitizer runtime. 82 if(LLVM_INCLUDE_TESTS) 83 add_subdirectory(tests) 84 endif() 85