blob: b590ffc3f25490a8f66283d5e529f10f20d04c4d [file] [log] [blame]
Chandler Carruthd51e0a02012-04-04 22:12:04 +00001# Build for the AddressSanitizer runtime support library.
2
Chandler Carruth479d47f2012-06-20 10:18:43 +00003set(ASAN_SOURCES
Kostya Serebryany8b0a7ce2012-12-10 13:52:55 +00004 asan_allocator2.cc
Kostya Serebryany2679f192012-12-10 14:19:15 +00005 asan_fake_stack.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +00006 asan_globals.cc
7 asan_interceptors.cc
8 asan_linux.cc
9 asan_mac.cc
10 asan_malloc_linux.cc
11 asan_malloc_mac.cc
12 asan_malloc_win.cc
13 asan_new_delete.cc
14 asan_poisoning.cc
15 asan_posix.cc
Kostya Serebryany33934ff2013-02-22 07:51:26 +000016 asan_preinit.cc
Alexey Samsonovf7c1d182012-08-09 08:15:46 +000017 asan_report.cc
Chandler Carruth479d47f2012-06-20 10:18:43 +000018 asan_rtl.cc
19 asan_stack.cc
20 asan_stats.cc
21 asan_thread.cc
Alexey Samsonovc3b30b32013-06-22 16:33:52 +000022 asan_win.cc)
Chandler Carruthd51e0a02012-04-04 22:12:04 +000023
Alexander Potapenko0ef53102012-08-17 09:00:08 +000024set(ASAN_DYLIB_SOURCES
Alexey Samsonovc3b30b32013-06-22 16:33:52 +000025 ${ASAN_SOURCES})
Alexander Potapenko0ef53102012-08-17 09:00:08 +000026
Chandler Carruth821f21b2012-06-25 12:57:43 +000027include_directories(..)
28
Hans Wennborgc1f1af72013-08-27 01:24:01 +000029if (NOT MSVC)
30 set(ASAN_CFLAGS
31 ${SANITIZER_COMMON_CFLAGS}
32 -fno-rtti)
33else()
34 set(ASAN_CFLAGS
35 ${SANITIZER_COMMON_CFLAGS}
36 /GR-)
37endif()
Alexey Samsonov0f7d4a42012-09-05 09:00:03 +000038
Alexey Samsonov2aed0402013-01-21 08:24:19 +000039set(ASAN_COMMON_DEFINITIONS
Alexey Samsonov5e5be212013-01-22 07:21:24 +000040 ASAN_HAS_EXCEPTIONS=1)
Alexey Samsonov2aed0402013-01-21 08:24:19 +000041
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000042if(ANDROID)
Alexey Samsonov2aed0402013-01-21 08:24:19 +000043 list(APPEND ASAN_COMMON_DEFINITIONS
Alexey Samsonov5e5be212013-01-22 07:21:24 +000044 ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000045 ASAN_NEEDS_SEGV=0
Alexey Samsonov2aed0402013-01-21 08:24:19 +000046 ASAN_LOW_MEMORY=1)
Hans Wennborgc1f1af72013-08-27 01:24:01 +000047elseif(MSVC)
48 list(APPEND ASAN_COMMON_DEFINITIONS
49 ASAN_FLEXIBLE_MAPPING_AND_OFFSET=0
50 ASAN_NEEDS_SEGV=0)
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000051else()
Alexey Samsonov2aed0402013-01-21 08:24:19 +000052 list(APPEND ASAN_COMMON_DEFINITIONS
Alexey Samsonov5e5be212013-01-22 07:21:24 +000053 ASAN_FLEXIBLE_MAPPING_AND_OFFSET=1
Alexey Samsonov2aed0402013-01-21 08:24:19 +000054 ASAN_NEEDS_SEGV=1)
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000055endif()
Alexander Potapenko0ef53102012-08-17 09:00:08 +000056
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +000057# Architectures supported by ASan.
58filter_available_targets(ASAN_SUPPORTED_ARCH
Alexey Samsonovb957d9f2013-06-07 09:44:43 +000059 x86_64 i386 powerpc64)
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +000060
Alexey Samsonovfe51abb2012-08-10 14:45:52 +000061set(ASAN_RUNTIME_LIBRARIES)
62if(APPLE)
63 # Build universal binary on APPLE.
Alexander Potapenkoeba48032013-01-22 09:14:54 +000064 add_compiler_rt_osx_dynamic_runtime(clang_rt.asan_osx_dynamic
65 ARCH ${ASAN_SUPPORTED_ARCH}
66 SOURCES ${ASAN_DYLIB_SOURCES}
67 $<TARGET_OBJECTS:RTInterception.osx>
68 $<TARGET_OBJECTS:RTSanitizerCommon.osx>
Alexey Samsonovc3b30b32013-06-22 16:33:52 +000069 $<TARGET_OBJECTS:RTLSanCommon.osx>
Alexander Potapenkoeba48032013-01-22 09:14:54 +000070 CFLAGS ${ASAN_CFLAGS}
Alexander Potapenko69563982013-02-05 15:57:12 +000071 DEFS ${ASAN_COMMON_DEFINITIONS}
Alexander Potapenkoeba48032013-01-22 09:14:54 +000072 # Dynamic lookup is needed because shadow scale and offset are
73 # provided by the instrumented modules.
74 LINKFLAGS "-framework Foundation"
75 "-undefined dynamic_lookup")
76 list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan_osx_dynamic)
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000077elseif(ANDROID)
78 add_library(clang_rt.asan-arm-android SHARED
79 ${ASAN_SOURCES}
80 $<TARGET_OBJECTS:RTInterception.arm.android>
81 $<TARGET_OBJECTS:RTSanitizerCommon.arm.android>
82 )
83 set_target_compile_flags(clang_rt.asan-arm-android
Alexey Samsonov2aad7c12013-01-21 08:12:20 +000084 ${ASAN_CFLAGS})
85 set_property(TARGET clang_rt.asan-arm-android APPEND PROPERTY
86 COMPILE_DEFINITIONS ${ASAN_COMMON_DEFINITIONS})
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000087 target_link_libraries(clang_rt.asan-arm-android dl)
88 list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-arm-android)
Alexey Samsonovfe51abb2012-08-10 14:45:52 +000089else()
90 # Otherwise, build separate libraries for each target.
Hans Wennborgc1f1af72013-08-27 01:24:01 +000091
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +000092 foreach(arch ${ASAN_SUPPORTED_ARCH})
Hans Wennborgc1f1af72013-08-27 01:24:01 +000093 set(ASAN_SOURCE_LIBS
94 $<TARGET_OBJECTS:RTInterception.${arch}>
95 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
96 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>)
97 if (NOT MSVC)
98 # We can't build Leak Sanitizer on Windows yet.
99 list(APPEND ASAN_SOURCE_LIBS $<TARGET_OBJECTS:RTLSanCommon.${arch}>)
100 endif()
101
Alexey Samsonov2aad7c12013-01-21 08:12:20 +0000102 add_compiler_rt_static_runtime(clang_rt.asan-${arch} ${arch}
Hans Wennborgc1f1af72013-08-27 01:24:01 +0000103 SOURCES ${ASAN_SOURCES} ${ASAN_SOURCE_LIBS}
Alexey Samsonov2aad7c12013-01-21 08:12:20 +0000104 CFLAGS ${ASAN_CFLAGS}
Alexey Samsonove5fa2432013-08-27 15:08:02 +0000105 DEFS ${ASAN_COMMON_DEFINITIONS})
Alexey Samsonov544bdfb2013-08-28 08:07:04 +0000106 list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-${arch})
107 if (UNIX AND NOT ${arch} STREQUAL "i386")
108 add_sanitizer_rt_symbols(clang_rt.asan-${arch} asan.syms.extra)
109 list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan-${arch}-symbols)
110 endif()
Hans Wennborgc1f1af72013-08-27 01:24:01 +0000111
112 if (WIN32)
113 add_compiler_rt_static_runtime(clang_rt.asan_dll_thunk-${arch} ${arch}
114 SOURCES asan_dll_thunk.cc
115 CFLAGS ${ASAN_CFLAGS} -DASAN_DLL_THUNK
Alexey Samsonove5fa2432013-08-27 15:08:02 +0000116 DEFS ${ASAN_COMMON_DEFINITIONS})
Hans Wennborgc1f1af72013-08-27 01:24:01 +0000117 list(APPEND ASAN_RUNTIME_LIBRARIES clang_rt.asan_dll_thunk-${arch})
118 endif()
Alexey Samsonov43b4b9c2013-01-18 16:51:07 +0000119 endforeach()
Alexey Samsonovfe51abb2012-08-10 14:45:52 +0000120endif()
Alexey Samsonov4d57f442012-07-25 11:15:00 +0000121
Alexey Samsonovc1caace2013-05-21 13:48:27 +0000122add_compiler_rt_resource_file(asan_blacklist asan_blacklist.txt)
123
Chandler Carruth821f21b2012-06-25 12:57:43 +0000124if(LLVM_INCLUDE_TESTS)
125 add_subdirectory(tests)
126endif()
Alexey Samsonov7274ff82012-07-31 15:43:11 +0000127
Alexey Samsonov7274ff82012-07-31 15:43:11 +0000128add_subdirectory(lit_tests)