blob: e4aa29c3e666879262f228cb9aab0943df7c2427 [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
Peter Collingbourne0c547de2013-05-17 16:17:19 +000036set(SANITIZER_LIBCDEP_SOURCES
37 sanitizer_common_libcdep.cc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070038 sanitizer_coverage_libcdep.cc
39 sanitizer_coverage_mapping_libcdep.cc
Peter Collingbourne088ea2b2013-05-20 15:57:44 +000040 sanitizer_linux_libcdep.cc
Peter Collingbourne04a22812013-05-21 10:27:07 +000041 sanitizer_posix_libcdep.cc
Alexey Samsonove74968c2013-11-07 06:33:06 +000042 sanitizer_stacktrace_libcdep.cc
Peter Collingbourne705e3102013-05-21 11:38:39 +000043 sanitizer_stoptheworld_linux_libcdep.cc
Peter Collingbournec1a1ed62013-10-25 23:03:29 +000044 sanitizer_symbolizer_libcdep.cc
Stephen Hines6d186232014-11-26 17:56:19 -080045 sanitizer_symbolizer_posix_libcdep.cc
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070046 sanitizer_symbolizer_process_libcdep.cc
Stephen Hines6d186232014-11-26 17:56:19 -080047 sanitizer_unwind_posix_libcdep.cc)
Peter Collingbourne0c547de2013-05-17 16:17:19 +000048
Alexey Samsonov032e8332012-12-21 14:04:52 +000049# Explicitly list all sanitizer_common headers. Not all of these are
50# included in sanitizer_common source files, but we need to depend on
51# headers when building our custom unit tests.
52set(SANITIZER_HEADERS
Stephen Hines2d1fdb22014-05-28 23:58:16 -070053 sanitizer_addrhashmap.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000054 sanitizer_allocator.h
Stephen Hines6a211c52014-07-21 00:49:56 -070055 sanitizer_allocator_interface.h
Alexey Samsonov1f3c2fe2013-05-29 09:15:39 +000056 sanitizer_allocator_internal.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070057 sanitizer_atomic.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000058 sanitizer_atomic_clang.h
59 sanitizer_atomic_msvc.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070060 sanitizer_bitvector.h
61 sanitizer_bvgraph.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000062 sanitizer_common.h
Evgeniy Stepanov4f32c0b2013-01-18 13:01:18 +000063 sanitizer_common_interceptors.inc
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +000064 sanitizer_common_interceptors_ioctl.inc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070065 sanitizer_common_interceptors_format.inc
Evgeniy Stepanov2887a642013-04-11 14:37:04 +000066 sanitizer_common_syscalls.inc
Stephen Hines2d1fdb22014-05-28 23:58:16 -070067 sanitizer_deadlock_detector.h
68 sanitizer_deadlock_detector_interface.h
Stephen Hines86277eb2015-03-23 12:06:32 -070069 sanitizer_flag_parser.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000070 sanitizer_flags.h
Stephen Hines86277eb2015-03-23 12:06:32 -070071 sanitizer_flags.inc
72 sanitizer_interface_internal.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000073 sanitizer_internal_defs.h
Dmitry Vyukovb48224c2013-01-14 08:23:34 +000074 sanitizer_lfstack.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000075 sanitizer_libc.h
Dmitry Vyukov4af0f212013-10-03 13:37:17 +000076 sanitizer_libignore.h
Kostya Serebryany6fb47af2013-02-27 11:22:40 +000077 sanitizer_linux.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000078 sanitizer_list.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070079 sanitizer_mac.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000080 sanitizer_mutex.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070081 sanitizer_persistent_allocator.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000082 sanitizer_placement_new.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070083 sanitizer_platform.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000084 sanitizer_platform_interceptors.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070085 sanitizer_platform_limits_posix.h
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -070086 sanitizer_posix.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000087 sanitizer_procmaps.h
Dmitry Vyukov9fc0df82013-01-11 08:07:43 +000088 sanitizer_quarantine.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000089 sanitizer_report_decorator.h
90 sanitizer_stackdepot.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070091 sanitizer_stackdepotbase.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000092 sanitizer_stacktrace.h
Stephen Hines6d186232014-11-26 17:56:19 -080093 sanitizer_stacktrace_printer.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070094 sanitizer_stoptheworld.h
95 sanitizer_suppressions.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000096 sanitizer_symbolizer.h
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070097 sanitizer_symbolizer_internal.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -070098 sanitizer_symbolizer_libbacktrace.h
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -070099 sanitizer_symbolizer_mac.h
100 sanitizer_symbolizer_win.h
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700101 sanitizer_syscall_generic.inc
102 sanitizer_syscall_linux_x86_64.inc
Alexey Samsonovd64bcf42013-06-11 08:13:36 +0000103 sanitizer_thread_registry.h)
Alexey Samsonov032e8332012-12-21 14:04:52 +0000104
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700105set(SANITIZER_COMMON_DEFINITIONS)
106
107if(MSVC)
108 list(APPEND SANITIZER_COMMON_DEFINITIONS
109 SANITIZER_NEEDS_SEGV=0)
Hans Wennborgc1f1af72013-08-27 01:24:01 +0000110else()
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700111 list(APPEND SANITIZER_COMMON_DEFINITIONS
112 SANITIZER_NEEDS_SEGV=1)
Hans Wennborgc1f1af72013-08-27 01:24:01 +0000113endif()
Chandler Carrutha765ffc2012-06-25 08:40:10 +0000114
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -0700115include(CheckIncludeFile)
116append_have_file_definition(rpc/xdr.h HAVE_RPC_XDR_H SANITIZER_COMMON_DEFINITIONS)
117append_have_file_definition(tirpc/rpc/xdr.h HAVE_TIRPC_RPC_XDR_H SANITIZER_COMMON_DEFINITIONS)
118
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700119set(SANITIZER_CFLAGS ${SANITIZER_COMMON_CFLAGS})
120append_no_rtti_flag(SANITIZER_CFLAGS)
Alexey Samsonov7a3d5fe2013-09-11 09:57:15 +0000121
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700122append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570
Stephen Hines86277eb2015-03-23 12:06:32 -0700123 SANITIZER_CFLAGS)
124append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors
125 SANITIZER_CFLAGS)
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700126
127add_custom_target(sanitizer_common)
Alexey Samsonov0b562472012-08-13 07:41:43 +0000128set(SANITIZER_RUNTIME_LIBRARIES)
Alexey Samsonovfe51abb2012-08-10 14:45:52 +0000129if(APPLE)
130 # Build universal binary on APPLE.
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700131
132 add_compiler_rt_object_libraries(RTSanitizerCommon
133 OS ${SANITIZER_COMMON_SUPPORTED_OS}
134 ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}
135 SOURCES ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES}
136 CFLAGS ${SANITIZER_CFLAGS}
137 DEFS ${SANITIZER_COMMON_DEFINITIONS})
138 foreach(os ${SANITIZER_COMMON_SUPPORTED_OS})
Alexander Potapenko49496742013-11-07 10:08:19 +0000139 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${os})
140 endforeach()
Alexey Samsonovfe51abb2012-08-10 14:45:52 +0000141else()
142 # Otherwise, build separate libraries for each target.
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700143
144 add_compiler_rt_object_libraries(RTSanitizerCommon
145 ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}
146 SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS}
147 DEFS ${SANITIZER_COMMON_DEFINITIONS})
148 add_compiler_rt_object_libraries(RTSanitizerCommonLibc
149 ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}
150 SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS}
151 DEFS ${SANITIZER_COMMON_DEFINITIONS})
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +0000152 foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH})
Alexey Samsonov7bb2f9b2013-09-16 15:43:23 +0000153 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch}
154 RTSanitizerCommonLibc.${arch})
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +0000155 endforeach()
Alexey Samsonovfe51abb2012-08-10 14:45:52 +0000156endif()
Alexey Samsonov8fc90f62012-08-08 09:46:51 +0000157
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700158add_dependencies(compiler-rt sanitizer_common)
159
Alexey Samsonov3f3ca962012-09-11 10:50:32 +0000160# Unit tests for common sanitizer runtime.
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700161if(COMPILER_RT_INCLUDE_TESTS)
Alexey Samsonov3f3ca962012-09-11 10:50:32 +0000162 add_subdirectory(tests)
163endif()