blob: 6a20f025507a7ee80ef0c1eea7a74b229762cdfa [file] [log] [blame]
Chandler Carruth479d47f2012-06-20 10:18:43 +00001# 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
Stephen Hines2d1fdb22014-05-28 23:58:16 -07007 sanitizer_deadlock_detector1.cc
8 sanitizer_deadlock_detector2.cc
Alexey Samsonov9b1b1012012-07-10 09:17:06 +00009 sanitizer_flags.cc
Stephen Hines86277eb2015-03-23 12:06:32 -070010 sanitizer_flag_parser.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +000011 sanitizer_libc.cc
Dmitry Vyukov4af0f212013-10-03 13:37:17 +000012 sanitizer_libignore.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +000013 sanitizer_linux.cc
14 sanitizer_mac.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070015 sanitizer_persistent_allocator.cc
Evgeniy Stepanov639df402013-09-06 14:20:01 +000016 sanitizer_platform_limits_linux.cc
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000017 sanitizer_platform_limits_posix.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +000018 sanitizer_posix.cc
19 sanitizer_printf.cc
Stephen Hines6d186232014-11-26 17:56:19 -080020 sanitizer_procmaps_common.cc
21 sanitizer_procmaps_freebsd.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070022 sanitizer_procmaps_linux.cc
23 sanitizer_procmaps_mac.cc
Alexey Samsonov3f3ca962012-09-11 10:50:32 +000024 sanitizer_stackdepot.cc
Kostya Serebryany1b5ea8f2012-08-28 14:11:57 +000025 sanitizer_stacktrace.cc
Stephen Hines6d186232014-11-26 17:56:19 -080026 sanitizer_stacktrace_printer.cc
Sergey Matveeva52e5c62013-06-26 15:37:14 +000027 sanitizer_suppressions.cc
Peter Collingbournec1a1ed62013-10-25 23:03:29 +000028 sanitizer_symbolizer.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070029 sanitizer_symbolizer_libbacktrace.cc
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070030 sanitizer_symbolizer_mac.cc
Alexey Samsonov6e893b62012-08-14 13:00:32 +000031 sanitizer_symbolizer_win.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070032 sanitizer_tls_get_addr.cc
Alexey Samsonov6d429cd2013-03-14 13:54:30 +000033 sanitizer_thread_registry.cc
Alexey Samsonovd64bcf42013-06-11 08:13:36 +000034 sanitizer_win.cc)
Chandler Carruth479d47f2012-06-20 10:18:43 +000035
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080036# Libc functions stubs. These sources should be linked instead of
37# SANITIZER_LIBCDEP_SOURCES when sanitizer_common library must not depend on
38# libc.
39set(SANITIZER_NOLIBC_SOURCES
40 sanitizer_common_nolibc.cc)
41
Peter Collingbourne0c547de2013-05-17 16:17:19 +000042set(SANITIZER_LIBCDEP_SOURCES
43 sanitizer_common_libcdep.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070044 sanitizer_coverage_libcdep.cc
45 sanitizer_coverage_mapping_libcdep.cc
Peter Collingbourne088ea2b2013-05-20 15:57:44 +000046 sanitizer_linux_libcdep.cc
Peter Collingbourne04a22812013-05-21 10:27:07 +000047 sanitizer_posix_libcdep.cc
Alexey Samsonove74968c2013-11-07 06:33:06 +000048 sanitizer_stacktrace_libcdep.cc
Peter Collingbourne705e3102013-05-21 11:38:39 +000049 sanitizer_stoptheworld_linux_libcdep.cc
Peter Collingbournec1a1ed62013-10-25 23:03:29 +000050 sanitizer_symbolizer_libcdep.cc
Stephen Hines6d186232014-11-26 17:56:19 -080051 sanitizer_symbolizer_posix_libcdep.cc
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -080052 sanitizer_unwind_linux_libcdep.cc)
Peter Collingbourne0c547de2013-05-17 16:17:19 +000053
Alexey Samsonov032e8332012-12-21 14:04:52 +000054# Explicitly list all sanitizer_common headers. Not all of these are
55# included in sanitizer_common source files, but we need to depend on
56# headers when building our custom unit tests.
57set(SANITIZER_HEADERS
Stephen Hines2d1fdb22014-05-28 23:58:16 -070058 sanitizer_addrhashmap.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000059 sanitizer_allocator.h
Stephen Hines6a211c52014-07-21 00:49:56 -070060 sanitizer_allocator_interface.h
Alexey Samsonov1f3c2fe2013-05-29 09:15:39 +000061 sanitizer_allocator_internal.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070062 sanitizer_atomic.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000063 sanitizer_atomic_clang.h
64 sanitizer_atomic_msvc.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070065 sanitizer_bitvector.h
66 sanitizer_bvgraph.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000067 sanitizer_common.h
Evgeniy Stepanov4f32c0b2013-01-18 13:01:18 +000068 sanitizer_common_interceptors.inc
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +000069 sanitizer_common_interceptors_ioctl.inc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070070 sanitizer_common_interceptors_format.inc
Evgeniy Stepanov2887a642013-04-11 14:37:04 +000071 sanitizer_common_syscalls.inc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070072 sanitizer_deadlock_detector.h
73 sanitizer_deadlock_detector_interface.h
Stephen Hines86277eb2015-03-23 12:06:32 -070074 sanitizer_flag_parser.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000075 sanitizer_flags.h
Stephen Hines86277eb2015-03-23 12:06:32 -070076 sanitizer_flags.inc
77 sanitizer_interface_internal.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000078 sanitizer_internal_defs.h
Dmitry Vyukovb48224c2013-01-14 08:23:34 +000079 sanitizer_lfstack.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000080 sanitizer_libc.h
Dmitry Vyukov4af0f212013-10-03 13:37:17 +000081 sanitizer_libignore.h
Kostya Serebryany6fb47af2013-02-27 11:22:40 +000082 sanitizer_linux.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000083 sanitizer_list.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070084 sanitizer_mac.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000085 sanitizer_mutex.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070086 sanitizer_persistent_allocator.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000087 sanitizer_placement_new.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070088 sanitizer_platform.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000089 sanitizer_platform_interceptors.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070090 sanitizer_platform_limits_posix.h
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070091 sanitizer_posix.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000092 sanitizer_procmaps.h
Dmitry Vyukov9fc0df82013-01-11 08:07:43 +000093 sanitizer_quarantine.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000094 sanitizer_report_decorator.h
95 sanitizer_stackdepot.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070096 sanitizer_stackdepotbase.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000097 sanitizer_stacktrace.h
Stephen Hines6d186232014-11-26 17:56:19 -080098 sanitizer_stacktrace_printer.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070099 sanitizer_stoptheworld.h
100 sanitizer_suppressions.h
Alexey Samsonov032e8332012-12-21 14:04:52 +0000101 sanitizer_symbolizer.h
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -0700102 sanitizer_symbolizer_internal.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700103 sanitizer_symbolizer_libbacktrace.h
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -0700104 sanitizer_symbolizer_mac.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700105 sanitizer_syscall_generic.inc
106 sanitizer_syscall_linux_x86_64.inc
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800107 sanitizer_syscall_linux_aarch64.inc
Alexey Samsonovd64bcf42013-06-11 08:13:36 +0000108 sanitizer_thread_registry.h)
Alexey Samsonov032e8332012-12-21 14:04:52 +0000109
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700110set(SANITIZER_COMMON_DEFINITIONS)
111
112if(MSVC)
113 list(APPEND SANITIZER_COMMON_DEFINITIONS
114 SANITIZER_NEEDS_SEGV=0)
Hans Wennborgc1f1af72013-08-27 01:24:01 +0000115else()
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700116 list(APPEND SANITIZER_COMMON_DEFINITIONS
117 SANITIZER_NEEDS_SEGV=1)
Hans Wennborgc1f1af72013-08-27 01:24:01 +0000118endif()
Chandler Carrutha765ffc2012-06-25 08:40:10 +0000119
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -0700120include(CheckIncludeFile)
121append_have_file_definition(rpc/xdr.h HAVE_RPC_XDR_H SANITIZER_COMMON_DEFINITIONS)
122append_have_file_definition(tirpc/rpc/xdr.h HAVE_TIRPC_RPC_XDR_H SANITIZER_COMMON_DEFINITIONS)
123
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700124set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS})
125append_no_rtti_flag(SANITIZER_CFLAGS)
Alexey Samsonov7a3d5fe2013-09-11 09:57:15 +0000126
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700127append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570
Stephen Hines86277eb2015-03-23 12:06:32 -0700128 SANITIZER_CFLAGS)
129append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors
130 SANITIZER_CFLAGS)
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700131
Alexey Samsonovfe51abb2012-08-10 14:45:52 +0000132if(APPLE)
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800133 set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS})
Alexey Samsonovfe51abb2012-08-10 14:45:52 +0000134endif()
Alexey Samsonov8fc90f62012-08-08 09:46:51 +0000135
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800136add_compiler_rt_object_libraries(RTSanitizerCommon
137 ${OS_OPTION}
138 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
139 SOURCES ${SANITIZER_SOURCES}
140 CFLAGS ${SANITIZER_CFLAGS}
141 DEFS ${SANITIZER_COMMON_DEFINITIONS})
142add_compiler_rt_object_libraries(RTSanitizerCommonNoLibc
143 ${OS_OPTION}
144 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
145 SOURCES ${SANITIZER_NOLIBC_SOURCES}
146 CFLAGS ${SANITIZER_CFLAGS}
147 DEFS ${SANITIZER_COMMON_DEFINITIONS})
148add_compiler_rt_object_libraries(RTSanitizerCommonLibc
149 ${OS_OPTION}
150 ARCHS ${SANITIZER_COMMON_SUPPORTED_ARCH}
151 SOURCES ${SANITIZER_LIBCDEP_SOURCES}
152 CFLAGS ${SANITIZER_CFLAGS}
153 DEFS ${SANITIZER_COMMON_DEFINITIONS})
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700154
Alexey Samsonov3f3ca962012-09-11 10:50:32 +0000155# Unit tests for common sanitizer runtime.
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700156if(COMPILER_RT_INCLUDE_TESTS)
Alexey Samsonov3f3ca962012-09-11 10:50:32 +0000157 add_subdirectory(tests)
158endif()