CMakeLists.txt revision 3e587a4f631c1b7338d4f2a29df74b704b8bb1ca
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_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.
29set(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
55set(SANITIZER_CFLAGS
56  ${SANITIZER_COMMON_CFLAGS}
57  -fno-rtti)
58
59set(SANITIZER_RUNTIME_LIBRARIES)
60if(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)
67elseif(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)
72else()
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    add_compiler_rt_static_runtime(clang_rt.san-${arch} ${arch}
78      SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS})
79    list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch})
80  endforeach()
81endif()
82
83# Unit tests for common sanitizer runtime.
84if(LLVM_INCLUDE_TESTS)
85  add_subdirectory(tests)
86endif()
87