CMakeLists.txt revision 2aad7c137771f6f7a734390e09c94a13120d054a
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project# Build for the AddressSanitizer runtime support library.
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectset(ASAN_SOURCES
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_allocator.cc
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_allocator2.cc
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_fake_stack.cc
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_globals.cc
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_interceptors.cc
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_linux.cc
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_mac.cc
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_malloc_linux.cc
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_malloc_mac.cc
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_malloc_win.cc
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_new_delete.cc
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_poisoning.cc
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_posix.cc
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_report.cc
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_rtl.cc
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_stack.cc
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_stats.cc
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_thread.cc
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_thread_registry.cc
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  asan_win.cc
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  )
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectset(ASAN_DYLIB_SOURCES
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  ${ASAN_SOURCES}
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  dynamic/asan_interceptors_dynamic.cc
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  )
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinclude_directories(..)
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectset(ASAN_CFLAGS ${SANITIZER_COMMON_CFLAGS})
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectif(ANDROID)
360cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn  set(ASAN_COMMON_DEFINITIONS
370cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    ASAN_HAS_EXCEPTIONS=1
380cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
394a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    ASAN_NEEDS_SEGV=0
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ASAN_LOW_MEMORY=1
410cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    )
420cd6376fa14089cee42991f751962ffd7f455797Dianne Hackbornelse()
430cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn  set(ASAN_COMMON_DEFINITIONS
440cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    ASAN_HAS_EXCEPTIONS=1
450cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
460cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    ASAN_NEEDS_SEGV=1
474a51c20ce607c74914f90fd897f04080121ac13bDianne Hackborn    )
480cd6376fa14089cee42991f751962ffd7f455797Dianne Hackbornendif()
490cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn
500cd6376fa14089cee42991f751962ffd7f455797Dianne Hackbornset(ASAN_DYLIB_DEFINITIONS
510cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn  ${ASAN_COMMON_DEFINITIONS}
520cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn  MAC_INTERPOSE_FUNCTIONS=1
530cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn  )
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project# Architectures supported by ASan.
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectfilter_available_targets(ASAN_SUPPORTED_ARCH
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  x86_64 i386)
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectset(ASAN_RUNTIME_LIBRARIES)
600cd6376fa14089cee42991f751962ffd7f455797Dianne Hackbornif(APPLE)
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  # Build universal binary on APPLE.
620cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn  add_compiler_rt_osx_static_runtime(clang_rt.asan_osx
630cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    ARCH ${ASAN_SUPPORTED_ARCH}
640cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn    SOURCES ${ASAN_SOURCES}
650cd6376fa14089cee42991f751962ffd7f455797Dianne Hackborn            $<TARGET_OBJECTS:RTInterception.osx>
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            $<TARGET_OBJECTS:RTSanitizerCommon.osx>
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CFLAGS ${ASAN_CFLAGS}
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DEFS ${ASAN_COMMON_DEFINITIONS})
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan_osx)
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectelseif(ANDROID)
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  add_library(clang_rt.asan-arm-android SHARED
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ${ASAN_SOURCES}
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    $<TARGET_OBJECTS:RTInterception.arm.android>
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    $<TARGET_OBJECTS:RTSanitizerCommon.arm.android>
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    )
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  set_target_compile_flags(clang_rt.asan-arm-android
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ${ASAN_CFLAGS})
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  set_property(TARGET clang_rt.asan-arm-android APPEND PROPERTY
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    COMPILE_DEFINITIONS ${ASAN_COMMON_DEFINITIONS})
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  target_link_libraries(clang_rt.asan-arm-android dl)
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-arm-android)
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectelse()
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  # Otherwise, build separate libraries for each target.
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  foreach(arch ${ASAN_SUPPORTED_ARCH})
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    add_compiler_rt_static_runtime(clang_rt.asan-${arch} ${arch}
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      SOURCES ${ASAN_SOURCES}
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              $<TARGET_OBJECTS:RTInterception.${arch}>
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project              $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      CFLAGS ${ASAN_CFLAGS}
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      DEFS ${ASAN_COMMON_DEFINITIONS})
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-${arch})
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  endforeach()
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectendif()
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectset(ASAN_DYNAMIC_RUNTIME_LIBRARIES)
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectif(APPLE)
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  # Build universal binary on APPLE.
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  add_compiler_rt_osx_dynamic_runtime(clang_rt.asan_osx_dynamic
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ARCH ${ASAN_SUPPORTED_ARCH}
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    SOURCES ${ASAN_DYLIB_SOURCES}
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            $<TARGET_OBJECTS:RTInterception.osx>
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            $<TARGET_OBJECTS:RTSanitizerCommon.osx>
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    CFLAGS ${ASAN_CFLAGS}
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    DEFS ${ASAN_DYLIB_DEFINITIONS}
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LINKFLAGS "-framework Foundation")
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  list(APPEND ASAN_DYNAMIC_RUNTIME_LIBRARIES clang_rt.asan_osx_dynamic)
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectendif()
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectif(LLVM_INCLUDE_TESTS)
110ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project  add_subdirectory(tests)
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectendif()
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectadd_subdirectory(lit_tests)
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project