Home | History | Annotate | Download | only in sanitizer_common
      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