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