CMakeLists.txt revision 7a3d5fe086a6458be7c4810397363b67b022a138
10ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# Build system for the common Sanitizer runtime support library components.
20ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# These components are shared between AddressSanitizer and ThreadSanitizer.
30ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
40ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongset(SANITIZER_SOURCES
50ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_allocator.cc
60ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_common.cc
70ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_flags.cc
80ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_libc.cc
90ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_linux.cc
100ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_mac.cc
110ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_platform_limits_linux.cc
120ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_platform_limits_posix.cc
130ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_posix.cc
140ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_printf.cc
150ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_stackdepot.cc
160ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_stacktrace.cc
170ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_suppressions.cc
180ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_symbolizer_win.cc
190ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_thread_registry.cc
200ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_win.cc)
210ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
220ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongset(SANITIZER_LIBCDEP_SOURCES
230ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_common_libcdep.cc
240ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_linux_libcdep.cc
250ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_posix_libcdep.cc
260ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_stoptheworld_linux_libcdep.cc
270ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_symbolizer_posix_libcdep.cc)
280ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
290ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# Explicitly list all sanitizer_common headers. Not all of these are
300ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# included in sanitizer_common source files, but we need to depend on
310ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# headers when building our custom unit tests.
320ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongset(SANITIZER_HEADERS
330ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_allocator.h
340ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_allocator_internal.h
350ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_atomic_clang.h
360ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_atomic_msvc.h
370ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_atomic.h
380ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_common.h
390ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_common_interceptors.inc
400ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_common_interceptors_ioctl.inc
410ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_common_interceptors_scanf.inc
420ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_common_syscalls.inc
430ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_flags.h
440ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_internal_defs.h
450ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_lfstack.h
4679397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez  sanitizer_libc.h
4779397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez  sanitizer_linux.h
4879397c21138f54fcff6ec067b44b847f1f7e0e98Carlos Hernandez  sanitizer_list.h
490ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_mutex.h
500ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_placement_new.h
510ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_platform_interceptors.h
520ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_procmaps.h
530ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_quarantine.h
540ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_report_decorator.h
550ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_stackdepot.h
560ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_stacktrace.h
570ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_symbolizer.h
580ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  sanitizer_thread_registry.h)
590ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
600ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongif (NOT MSVC)
610ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  set(SANITIZER_CFLAGS
620ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    ${SANITIZER_COMMON_CFLAGS}
630ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    -fno-rtti)
640ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongelse()
650ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  set(SANITIZER_CFLAGS
660ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    ${SANITIZER_COMMON_CFLAGS}
670ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    /GR-)
680ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongendif()
690ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
700ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongif(SUPPORTS_GLOBAL_CONSTRUCTORS_FLAG)
710ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  list(APPEND SANITIZER_CFLAGS -Wglobal-constructors)
720ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongendif()
730ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
740ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongset(SANITIZER_RUNTIME_LIBRARIES)
750ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongif(APPLE)
760ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  # Build universal binary on APPLE.
770ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  add_compiler_rt_osx_object_library(RTSanitizerCommon
780ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    ARCH ${SANITIZER_COMMON_SUPPORTED_ARCH}
790ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    SOURCES ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES}
801d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling    CFLAGS ${SANITIZER_CFLAGS})
810ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.osx)
820ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongelseif(ANDROID)
831d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling  add_library(RTSanitizerCommon.arm.android OBJECT
840ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    ${SANITIZER_SOURCES} ${SANITIZER_LIBCDEP_SOURCES})
850ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  set_target_compile_flags(RTSanitizerCommon.arm.android
861d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling    ${SANITIZER_CFLAGS})
870ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.arm.android)
880ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongelse()
890ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  # Otherwise, build separate libraries for each target.
900ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH})
910ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    add_compiler_rt_object_library(RTSanitizerCommon ${arch}
920ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong      SOURCES ${SANITIZER_SOURCES} CFLAGS ${SANITIZER_CFLAGS})
930ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    add_compiler_rt_object_library(RTSanitizerCommonLibc ${arch}
940ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong      SOURCES ${SANITIZER_LIBCDEP_SOURCES} CFLAGS ${SANITIZER_CFLAGS})
950ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    add_compiler_rt_static_runtime(clang_rt.san-${arch} ${arch}
961d2624a10e2c559f8ba9ef89eaa30832c0a83a96Sascha Haeberling      SOURCES $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
970ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong              $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
980ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong      CFLAGS ${SANITIZER_CFLAGS})
990ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong    list(APPEND SANITIZER_RUNTIME_LIBRARIES RTSanitizerCommon.${arch})
1000ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  endforeach()
1010ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongendif()
1020ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
1030ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# Unit tests for common sanitizer runtime.
1040ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongif(LLVM_INCLUDE_TESTS)
1050ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong  add_subdirectory(tests)
1060ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongendif()
1070ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong