blob: 6a960c9257b1482d3c5bc969750f7149302b6e65 [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
Alexey Samsonov9b1b1012012-07-10 09:17:06 +00007 sanitizer_flags.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +00008 sanitizer_libc.cc
Dmitry Vyukov4af0f212013-10-03 13:37:17 +00009 sanitizer_libignore.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +000010 sanitizer_linux.cc
11 sanitizer_mac.cc
Evgeniy Stepanov639df402013-09-06 14:20:01 +000012 sanitizer_platform_limits_linux.cc
Evgeniy Stepanov9358c582013-02-19 09:19:16 +000013 sanitizer_platform_limits_posix.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +000014 sanitizer_posix.cc
15 sanitizer_printf.cc
Alexey Samsonov3f3ca962012-09-11 10:50:32 +000016 sanitizer_stackdepot.cc
Kostya Serebryany1b5ea8f2012-08-28 14:11:57 +000017 sanitizer_stacktrace.cc
Sergey Matveeva52e5c62013-06-26 15:37:14 +000018 sanitizer_suppressions.cc
Alexey Samsonov6e893b62012-08-14 13:00:32 +000019 sanitizer_symbolizer_win.cc
Alexey Samsonov6d429cd2013-03-14 13:54:30 +000020 sanitizer_thread_registry.cc
Alexey Samsonovd64bcf42013-06-11 08:13:36 +000021 sanitizer_win.cc)
Chandler Carruth479d47f2012-06-20 10:18:43 +000022
Peter Collingbourne0c547de2013-05-17 16:17:19 +000023set(SANITIZER_LIBCDEP_SOURCES
24 sanitizer_common_libcdep.cc
Peter Collingbourne088ea2b2013-05-20 15:57:44 +000025 sanitizer_linux_libcdep.cc
Peter Collingbourne04a22812013-05-21 10:27:07 +000026 sanitizer_posix_libcdep.cc
Peter Collingbourne705e3102013-05-21 11:38:39 +000027 sanitizer_stoptheworld_linux_libcdep.cc
Alexey Samsonovd64bcf42013-06-11 08:13:36 +000028 sanitizer_symbolizer_posix_libcdep.cc)
Peter Collingbourne0c547de2013-05-17 16:17:19 +000029
Alexey Samsonov032e8332012-12-21 14:04:52 +000030# Explicitly list all sanitizer_common headers. Not all of these are
31# included in sanitizer_common source files, but we need to depend on
32# headers when building our custom unit tests.
33set(SANITIZER_HEADERS
34 sanitizer_allocator.h
Alexey Samsonov1f3c2fe2013-05-29 09:15:39 +000035 sanitizer_allocator_internal.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000036 sanitizer_atomic_clang.h
37 sanitizer_atomic_msvc.h
38 sanitizer_atomic.h
39 sanitizer_common.h
Evgeniy Stepanov4f32c0b2013-01-18 13:01:18 +000040 sanitizer_common_interceptors.inc
Evgeniy Stepanov4612aba2013-06-20 09:19:28 +000041 sanitizer_common_interceptors_ioctl.inc
Evgeniy Stepanov4f32c0b2013-01-18 13:01:18 +000042 sanitizer_common_interceptors_scanf.inc
Evgeniy Stepanov2887a642013-04-11 14:37:04 +000043 sanitizer_common_syscalls.inc
Alexey Samsonov032e8332012-12-21 14:04:52 +000044 sanitizer_flags.h
45 sanitizer_internal_defs.h
Dmitry Vyukovb48224c2013-01-14 08:23:34 +000046 sanitizer_lfstack.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000047 sanitizer_libc.h
Dmitry Vyukov4af0f212013-10-03 13:37:17 +000048 sanitizer_libignore.h
Kostya Serebryany6fb47af2013-02-27 11:22:40 +000049 sanitizer_linux.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000050 sanitizer_list.h
51 sanitizer_mutex.h
52 sanitizer_placement_new.h
53 sanitizer_platform_interceptors.h
54 sanitizer_procmaps.h
Dmitry Vyukov9fc0df82013-01-11 08:07:43 +000055 sanitizer_quarantine.h
Alexey Samsonov032e8332012-12-21 14:04:52 +000056 sanitizer_report_decorator.h
57 sanitizer_stackdepot.h
58 sanitizer_stacktrace.h
59 sanitizer_symbolizer.h
Alexey Samsonovd64bcf42013-06-11 08:13:36 +000060 sanitizer_thread_registry.h)
Alexey Samsonov032e8332012-12-21 14:04:52 +000061
Hans Wennborgc1f1af72013-08-27 01:24:01 +000062if (NOT MSVC)
63 set(SANITIZER_CFLAGS
64 ${SANITIZER_COMMON_CFLAGS}
65 -fno-rtti)
66else()
67 set(SANITIZER_CFLAGS
68 ${SANITIZER_COMMON_CFLAGS}
69 /GR-)
70endif()
Chandler Carrutha765ffc2012-06-25 08:40:10 +000071
Alexey Samsonov7a3d5fe2013-09-11 09:57:15 +000072if(SUPPORTS_GLOBAL_CONSTRUCTORS_FLAG)
73 list(APPEND SANITIZER_CFLAGS -Wglobal-constructors)
74endif()
75
Alexey Samsonov0b562472012-08-13 07:41:43 +000076set(SANITIZER_RUNTIME_LIBRARIES)
Alexey Samsonovfe51abb2012-08-10 14:45:52 +000077if(APPLE)
78 # Build universal binary on APPLE.
Alexey Samsonov51623142013-01-20 14:36:12 +000079 add_compiler_rt_osx_object_library(RTSanitizerCommon
80 ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}
Peter Collingbourne0c547de2013-05-17 16:17:19 +000081 SOURCES ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES}
Alexey Samsonov51623142013-01-20 14:36:12 +000082 CFLAGS ${SANITIZER_CFLAGS})
Alexey Samsonov0b562472012-08-13 07:41:43 +000083 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.osx)
Alexey Samsonov392c50d2013-01-18 16:05:21 +000084elseif(ANDROID)
Peter Collingbourne0c547de2013-05-17 16:17:19 +000085 add_library(RTSanitizerCommon.arm.android OBJECT
86 ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES})
Alexey Samsonov392c50d2013-01-18 16:05:21 +000087 set_target_compile_flags(RTSanitizerCommon.arm.android
88 ${SANITIZER_CFLAGS})
89 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.arm.android)
Alexey Samsonovfe51abb2012-08-10 14:45:52 +000090else()
91 # Otherwise, build separate libraries for each target.
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +000092 foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH})
93 add_compiler_rt_object_library(RTSanitizerCommon ${arch}
Alexey Samsonov392c50d2013-01-18 16:05:21 +000094 SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS})
Peter Collingbourne0c547de2013-05-17 16:17:19 +000095 add_compiler_rt_object_library(RTSanitizerCommonLibc ${arch}
96 SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS})
Richard Smith3e587a42013-03-20 23:49:17 +000097 add_compiler_rt_static_runtime(clang_rt.san-${arch} ${arch}
Richard Smithb877cb52013-05-19 19:53:01 +000098 SOURCES $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
99 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
100 CFLAGS ${SANITIZER_CFLAGS})
Alexey Samsonov7bb2f9b2013-09-16 15:43:23 +0000101 list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch}
102 RTSanitizerCommonLibc.${arch})
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +0000103 endforeach()
Alexey Samsonovfe51abb2012-08-10 14:45:52 +0000104endif()
Alexey Samsonov8fc90f62012-08-08 09:46:51 +0000105
Alexey Samsonov3f3ca962012-09-11 10:50:32 +0000106# Unit tests for common sanitizer runtime.
107if(LLVM_INCLUDE_TESTS)
Alexey Samsonov3f3ca962012-09-11 10:50:32 +0000108 add_subdirectory(tests)
109endif()