CMakeLists.txt revision 38a61aa7d3fc1deeb612e02863f0fbb417cda612
1d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis# Build system for the common Sanitizer runtime support library components.
264924859b6b09d1cfb62fecf5954ec6c27cb58feTed Kremenek# These components are shared between AddressSanitizer and ThreadSanitizer.
34af84313df0d2710fd57af89132e680294225cadTed Kremenek
4d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenekset(SANITIZER_SOURCES
5d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek  sanitizer_allocator.cc
6d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek  sanitizer_common.cc
7d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek  sanitizer_flags.cc
8d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek  sanitizer_libc.cc
9d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek  sanitizer_linux.cc
1077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek  sanitizer_mac.cc
1177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek  sanitizer_platform_limits_posix.cc
1277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek  sanitizer_posix.cc
13d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek  sanitizer_printf.cc
14d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek  sanitizer_stackdepot.cc
15a7af5ea88a6c5bdf87497cca6c20831e8c546751Argyrios Kyrtzidis  sanitizer_stacktrace.cc
16c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks  sanitizer_suppressions.cc
17c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks  sanitizer_symbolizer_itanium.cc
1843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis  sanitizer_symbolizer_linux.cc
199b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek  sanitizer_symbolizer_mac.cc
209b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek  sanitizer_symbolizer_win.cc
21f540c54701e3eeb34cb619a3a4eb18f1ac70ef2dJordan Rose  sanitizer_thread_registry.cc
229b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek  sanitizer_win.cc)
23199c3d6cd16aebbb9c7f0d42af9d922c9628bf70Ken Dyck
2416f0049415ec596504891259e2a83e19871c0d52Chris Lattnerset(SANITIZER_LIBCDEP_SOURCES
2516f0049415ec596504891259e2a83e19871c0d52Chris Lattner  sanitizer_common_libcdep.cc
26337e4dbc6859589b8878146a88bebf754e916702Ted Kremenek  sanitizer_linux_libcdep.cc
271b63e4f732dbc73d90abf886b4d21f8e3a165f6dChris Lattner  sanitizer_posix_libcdep.cc
2816f0049415ec596504891259e2a83e19871c0d52Chris Lattner  sanitizer_stoptheworld_linux_libcdep.cc
290bed8a12f2878d3cd94fb8bdba55b593d92dd11aTed Kremenek  sanitizer_symbolizer_libcdep.cc
30a95d3750441ac8ad03e36af8e6e74039c9a3109dTed Kremenek  sanitizer_symbolizer_linux_libcdep.cc
316cb7c1a43b0c8f739d1f54b7fdae5ede86033496Benjamin Kramer  sanitizer_symbolizer_posix_libcdep.cc)
32c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks
334323a57627e796dcfdfdb7d47672dc09ed308edaTed Kremenek# Explicitly list all sanitizer_common headers. Not all of these are
340f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek# included in sanitizer_common source files, but we need to depend on
350f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek# headers when building our custom unit tests.
360f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenekset(SANITIZER_HEADERS
370f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek  sanitizer_allocator.h
38b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek  sanitizer_allocator_internal.h
399ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek  sanitizer_atomic_clang.h
40b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek  sanitizer_atomic_msvc.h
41ab2b8c54bca82866876f91e756788916d3fa20c3Ted Kremenek  sanitizer_atomic.h
42c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks  sanitizer_common.h
43c2994283aa7538b7420c8e398cde7afa328d7042Anna Zaks  sanitizer_common_interceptors.inc
44749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks  sanitizer_common_interceptors_ioctl.inc
45749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks  sanitizer_common_interceptors_scanf.inc
46749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks  sanitizer_common_syscalls.inc
47749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks  sanitizer_flags.h
48749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks  sanitizer_internal_defs.h
49749bbe6f5f23676244f12a0d41511c8e73516febAnna Zaks  sanitizer_lfstack.h
505903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks  sanitizer_libc.h
515903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks  sanitizer_linux.h
525903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks  sanitizer_list.h
53e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek  sanitizer_mutex.h
54bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek  sanitizer_placement_new.h
55bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek  sanitizer_platform_interceptors.h
56bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek  sanitizer_procmaps.h
573fd5f370a28552976c52e76c3035d79012d78ddaAnna Zaks  sanitizer_quarantine.h
58fbcb3f11fc90e9f00e6074e9b118b8dc11ca604cAnna Zaks  sanitizer_report_decorator.h
593bbd8cd831788c506f2980293eb3c7e1b3ca2501Anna Zaks  sanitizer_stackdepot.h
6025e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xu  sanitizer_stacktrace.h
611d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenek  sanitizer_symbolizer.h
62fbcb3f11fc90e9f00e6074e9b118b8dc11ca604cAnna Zaks  sanitizer_thread_registry.h)
63d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis
64c77a55126fcad66fb086f8e100a494caa2496a2dZhongxing Xuif (NOT MSVC)
6532a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek  set(SANITIZER_CFLAGS
66ca5d78d0bc3010164f2f9682967d64d7e305a167Jordan Rose    ${SANITIZER_COMMON_CFLAGS}
6750a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek    -fno-rtti)
68c8413fd03f73084a5c93028f8b4db619fc388087Ted Kremenekelse()
698ad8c546372fe602708cb7ceeaf0ebbb866735c6Anna Zaks  set(SANITIZER_CFLAGS
7066c486f275531df6362b3511fc3af6563561801bTed Kremenek    ${SANITIZER_COMMON_CFLAGS}
714ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenek    /GR-)
72fbcb3f11fc90e9f00e6074e9b118b8dc11ca604cAnna Zaksendif()
73fbcb3f11fc90e9f00e6074e9b118b8dc11ca604cAnna Zaks
74255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenekset(SANITIZER_RUNTIME_LIBRARIES)
75255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenekif(APPLE)
76255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek  # Build universal binary on APPLE.
77255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek  add_compiler_rt_osx_object_library(RTSanitizerCommon
78255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek    ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}
79c80135ba857da48173578b9c528fce6777e18168Ted Kremenek    SOURCES ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES}
8050a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek    CFLAGS ${SANITIZER_CFLAGS})
81d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis  list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.osx)
82cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenekelseif(ANDROID)
8350a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek  add_library(RTSanitizerCommon.arm.android OBJECT
8450a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek    ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES})
85e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek  set_target_compile_flags(RTSanitizerCommon.arm.android
86e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek    ${SANITIZER_CFLAGS})
87e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek  list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.arm.android)
88e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenekelse()
898bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek  # Otherwise, build separate libraries for each target.
908bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek  foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH})
91a078ecf3484d62b01d9f8c01e0fecffd65c583e1Ted Kremenek    add_compiler_rt_object_library(RTSanitizerCommon ${arch}
921eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS})
93cfcd7fd0de701c5ce05e96de1ed2d0bf8c7035d9Ted Kremenek    add_compiler_rt_object_library(RTSanitizerCommonLibc ${arch}
9452e5602056e4cade24cbcca57767e94e1d430b03Ted Kremenek      SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS})
9552e5602056e4cade24cbcca57767e94e1d430b03Ted Kremenek    add_compiler_rt_static_runtime(clang_rt.san-${arch} ${arch}
965974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek      SOURCES $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
97a078ecf3484d62b01d9f8c01e0fecffd65c583e1Ted Kremenek              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
985974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek      CFLAGS ${SANITIZER_CFLAGS})
995974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek    list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch})
1005974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek  endforeach()
1015974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenekendif()
1025974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek
1035974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek# Unit tests for common sanitizer runtime.
1045974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenekif(LLVM_INCLUDE_TESTS)
1055974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek  add_subdirectory(tests)
1065974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenekendif()
1075974ec518289a719fdd18122060bbcfe49d439e3Ted Kremenek