blob: 7a8d8f7f106b54ae1e7b6729f9b7e9c19cb45ecd [file] [log] [blame]
Chandler Carruth821f21b2012-06-25 12:57:43 +00001# Testing rules for AddressSanitizer.
2#
3# These are broken into two buckets. One set of tests directly interacts with
4# the runtime library and checks its functionality. These are the
5# no-instrumentation tests.
6#
7# Another group of tests relies upon the ability to compile the test with
8# address sanitizer instrumentation pass. These tests form "integration" tests
9# and have some elements of version skew -- they test the *host* compiler's
10# instrumentation against the just-built runtime library.
11
12include(CheckCXXCompilerFlag)
Alexey Samsonov02dcc632012-12-19 12:33:39 +000013include(CompilerRTCompile)
Chandler Carruth821f21b2012-06-25 12:57:43 +000014
15include_directories(..)
16include_directories(../..)
17
Alexey Samsonov032e8332012-12-21 14:04:52 +000018set(ASAN_UNITTEST_HEADERS
19 asan_mac_test.h
20 asan_test_config.h
21 asan_test_utils.h)
22
Alexey Samsonovd00ecb62012-06-28 13:12:07 +000023set(ASAN_UNITTEST_COMMON_CFLAGS
Stephen Hines6a211c52014-07-21 00:49:56 -070024 ${COMPILER_RT_TEST_CFLAGS}
Stephen Hines2d1fdb22014-05-28 23:58:16 -070025 ${COMPILER_RT_GTEST_CFLAGS}
Alexey Samsonov02dcc632012-12-19 12:33:39 +000026 -I${COMPILER_RT_SOURCE_DIR}/include
27 -I${COMPILER_RT_SOURCE_DIR}/lib
28 -I${COMPILER_RT_SOURCE_DIR}/lib/asan
Kostya Serebryanyc74b2cc2013-02-14 08:12:26 +000029 -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common/tests
Stephen Hines6a211c52014-07-21 00:49:56 -070030 -fno-rtti
31 -O2
Alexey Samsonovd00ecb62012-06-28 13:12:07 +000032 -Wno-format
Stephen Hines86277eb2015-03-23 12:06:32 -070033 -Werror=sign-compare
34 -Wno-non-virtual-dtor)
Stephen Hines6d186232014-11-26 17:56:19 -080035append_list_if(COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG -Wno-variadic-macros ASAN_UNITTEST_COMMON_CFLAGS)
Stephen Hines2d1fdb22014-05-28 23:58:16 -070036
Stephen Hines6a211c52014-07-21 00:49:56 -070037# -gline-tables-only must be enough for ASan, so use it if possible.
38if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang")
39 list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -gline-tables-only)
40else()
41 list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -g)
Alexey Samsonov76e84282012-09-12 12:07:36 +000042endif()
43
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000044# Use -D instead of definitions to please custom compile command.
Alexey Samsonovee485d42013-01-21 10:51:18 +000045list(APPEND ASAN_UNITTEST_COMMON_CFLAGS
Alexey Samsonovee485d42013-01-21 10:51:18 +000046 -DASAN_HAS_BLACKLIST=1
47 -DASAN_HAS_EXCEPTIONS=1
48 -DASAN_UAR=0)
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +000049
Stephen Hines86277eb2015-03-23 12:06:32 -070050if(APPLE)
51 list(APPEND ASAN_UNITTEST_COMMON_CFLAGS ${DARWIN_osx_CFLAGS})
52 list(APPEND ASAN_UNITTEST_COMMON_LINKFLAGS ${DARWIN_osx_LINKFLAGS})
53endif()
54
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -070055if(MSVC)
56 # Disable exceptions on Windows until they work reliably.
57 list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -fno-exceptions -DGTEST_HAS_SEH=0)
58endif()
59
Alexey Samsonov7a897322012-10-19 15:18:14 +000060set(ASAN_BLACKLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/asan_test.ignore")
Alexey Samsonov20845432012-06-29 10:23:31 +000061set(ASAN_UNITTEST_INSTRUMENTED_CFLAGS
62 ${ASAN_UNITTEST_COMMON_CFLAGS}
Richard Smithf10a79a2012-11-06 02:31:42 +000063 -fsanitize=address
Alexey Samsonov3b9e6682013-01-22 10:30:17 +000064 "-fsanitize-blacklist=${ASAN_BLACKLIST_FILE}"
Alexey Samsonov20845432012-06-29 10:23:31 +000065)
Stephen Hines6d186232014-11-26 17:56:19 -080066if(CAN_TARGET_x86_64 OR CAN_TARGET_i386)
67 list(APPEND ASAN_UNITTEST_INSTRUMENTED_CFLAGS -mllvm -asan-instrument-assembly)
68endif()
Stephen Hines2d1fdb22014-05-28 23:58:16 -070069
70if(NOT MSVC)
71 list(APPEND ASAN_UNITTEST_COMMON_LINKFLAGS --driver-mode=g++)
Alexey Samsonovee485d42013-01-21 10:51:18 +000072endif()
Alexey Samsonov20845432012-06-29 10:23:31 +000073
Stephen Hines2d1fdb22014-05-28 23:58:16 -070074# x86_64 FreeBSD 9.2 additionally requires libc++ to build the tests.
75if(CMAKE_SYSTEM MATCHES "FreeBSD-9.2-RELEASE")
76 list(APPEND ASAN_UNITTEST_COMMON_LINKFLAGS "-lc++")
77endif()
78
Alexey Samsonov05fa3802013-09-16 15:50:53 +000079# Unit tests on Mac depend on Foundation.
80if(APPLE)
81 list(APPEND ASAN_UNITTEST_COMMON_LINKFLAGS -framework Foundation)
82endif()
Stephen Hines2d1fdb22014-05-28 23:58:16 -070083if(ANDROID)
Alexey Samsonov5d9d8072013-09-17 07:50:12 +000084 list(APPEND ASAN_UNITTEST_COMMON_LINKFLAGS -pie)
85endif()
Alexey Samsonov05fa3802013-09-16 15:50:53 +000086
87set(ASAN_UNITTEST_INSTRUMENTED_LINKFLAGS
88 ${ASAN_UNITTEST_COMMON_LINKFLAGS})
Stephen Hines6d186232014-11-26 17:56:19 -080089list(APPEND ASAN_UNITTEST_INSTRUMENTED_LINKFLAGS -fsanitize=address)
Alexey Samsonov05fa3802013-09-16 15:50:53 +000090
Stephen Hines2d1fdb22014-05-28 23:58:16 -070091set(ASAN_DYNAMIC_UNITTEST_INSTRUMENTED_LINKFLAGS
92 ${ASAN_UNITTEST_INSTRUMENTED_LINKFLAGS}
93 -shared-libasan)
94
Stephen Hines6d186232014-11-26 17:56:19 -080095set(ASAN_UNITTEST_INSTRUMENTED_LIBS)
96# NDK r10 requires -latomic almost always.
97append_list_if(ANDROID atomic ASAN_UNITTEST_INSTRUMENTED_LIBS)
98
Stephen Hines2d1fdb22014-05-28 23:58:16 -070099set(ASAN_UNITTEST_NOINST_LINKFLAGS ${ASAN_UNITTEST_COMMON_LINKFLAGS})
Stephen Hines6d186232014-11-26 17:56:19 -0800100append_list_if(COMPILER_RT_HAS_LIBM -lm ASAN_UNITTEST_NOINST_LINKFLAGS)
101append_list_if(COMPILER_RT_HAS_LIBDL -ldl ASAN_UNITTEST_NOINST_LINKFLAGS)
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700102append_list_if(COMPILER_RT_HAS_LIBRT -lrt ASAN_UNITTEST_NOINST_LINKFLAGS)
Stephen Hines6d186232014-11-26 17:56:19 -0800103append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread ASAN_UNITTEST_NOINST_LINKFLAGS)
104append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700105 ASAN_DYNAMIC_UNITTEST_INSTRUMENTED_LINKFLAGS)
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000106
Stephen Hines6d186232014-11-26 17:56:19 -0800107# TODO(eugenis): move all -l flags above to _LIBS?
108set(ASAN_UNITTEST_NOINST_LIBS)
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800109append_list_if(COMPILER_RT_HAS_LIBLOG log ASAN_UNITTEST_NOINST_LIBS)
Stephen Hines6d186232014-11-26 17:56:19 -0800110# NDK r10 requires -latomic almost always.
111append_list_if(ANDROID atomic ASAN_UNITTEST_NOINST_LIBS)
112
Alexey Samsonovbf231862012-12-19 15:17:23 +0000113# Compile source for the given architecture, using compiler
114# options in ${ARGN}, and add it to the object list.
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700115macro(asan_compile obj_list source arch kind)
Alexey Samsonov02dcc632012-12-19 12:33:39 +0000116 get_filename_component(basename ${source} NAME)
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700117 set(output_obj "${obj_list}.${basename}.${arch}${kind}.o")
Alexey Samsonovbf231862012-12-19 15:17:23 +0000118 get_target_flags_for_arch(${arch} TARGET_CFLAGS)
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700119 set(COMPILE_DEPS ${ASAN_UNITTEST_HEADERS} ${ASAN_BLACKLIST_FILE})
120 if(NOT COMPILER_RT_STANDALONE_BUILD)
121 list(APPEND COMPILE_DEPS gtest asan)
122 endif()
Alexey Samsonov02dcc632012-12-19 12:33:39 +0000123 clang_compile(${output_obj} ${source}
Alexey Samsonovbf231862012-12-19 15:17:23 +0000124 CFLAGS ${ARGN} ${TARGET_CFLAGS}
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700125 DEPS ${COMPILE_DEPS})
Alexey Samsonov02dcc632012-12-19 12:33:39 +0000126 list(APPEND ${obj_list} ${output_obj})
127endmacro()
Chandler Carruth821f21b2012-06-25 12:57:43 +0000128
Alexey Samsonovbf231862012-12-19 15:17:23 +0000129# Link ASan unit test for a given architecture from a set
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000130# of objects in with given linker flags.
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700131macro(add_asan_test test_suite test_name arch kind)
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800132 cmake_parse_arguments(TEST "WITH_TEST_RUNTIME" "" "OBJECTS;LINKFLAGS;SUBDIR" ${ARGN})
Alexey Samsonovbf231862012-12-19 15:17:23 +0000133 get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700134 set(TEST_DEPS ${TEST_OBJECTS})
135 if(NOT COMPILER_RT_STANDALONE_BUILD)
136 list(APPEND TEST_DEPS asan)
137 endif()
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000138 if(TEST_WITH_TEST_RUNTIME)
139 list(APPEND TEST_DEPS ${ASAN_TEST_RUNTIME})
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700140 if(NOT MSVC)
141 list(APPEND TEST_OBJECTS lib${ASAN_TEST_RUNTIME}.a)
142 else()
143 list(APPEND TEST_OBJECTS ${ASAN_TEST_RUNTIME}.lib)
144 endif()
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000145 endif()
Alexey Samsonov02dcc632012-12-19 12:33:39 +0000146 add_compiler_rt_test(${test_suite} ${test_name}
Stephen Hines86277eb2015-03-23 12:06:32 -0700147 SUBDIR ${TEST_SUBDIR}
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000148 OBJECTS ${TEST_OBJECTS}
149 DEPS ${TEST_DEPS}
150 LINK_FLAGS ${TEST_LINKFLAGS}
Alexey Samsonovbf231862012-12-19 15:17:23 +0000151 ${TARGET_LINK_FLAGS})
Alexey Samsonov02dcc632012-12-19 12:33:39 +0000152endmacro()
Alexey Samsonov37dd1d72012-06-28 12:19:52 +0000153
Alexey Samsonov02dcc632012-12-19 12:33:39 +0000154# Main AddressSanitizer unit tests.
155add_custom_target(AsanUnitTests)
156set_target_properties(AsanUnitTests PROPERTIES FOLDER "ASan unit tests")
Stephen Hines86277eb2015-03-23 12:06:32 -0700157# AddressSanitizer unit tests with dynamic runtime (on platforms where it's
158# not the default).
159add_custom_target(AsanDynamicUnitTests)
160set_target_properties(AsanDynamicUnitTests
161 PROPERTIES FOLDER "ASan unit tests with dynamic runtime")
Alexey Samsonov02dcc632012-12-19 12:33:39 +0000162# ASan benchmarks (not actively used now).
163add_custom_target(AsanBenchmarks)
164set_target_properties(AsanBenchmarks PROPERTIES FOLDER "Asan benchmarks")
Alexey Samsonov1a7741b2012-07-24 08:26:19 +0000165
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000166set(ASAN_NOINST_TEST_SOURCES
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000167 ${COMPILER_RT_GTEST_SOURCE}
Alexey Samsonov46817812013-09-17 08:40:32 +0000168 asan_fake_stack_test.cc
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000169 asan_noinst_test.cc
170 asan_test_main.cc)
Alexander Potapenkobdd95452013-09-12 09:46:56 +0000171
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000172set(ASAN_INST_TEST_SOURCES
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000173 ${COMPILER_RT_GTEST_SOURCE}
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700174 asan_asm_test.cc
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000175 asan_globals_test.cc
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000176 asan_interface_test.cc
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000177 asan_test.cc
178 asan_oob_test.cc
179 asan_mem_test.cc
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000180 asan_str_test.cc
181 asan_test_main.cc)
182if(APPLE)
183 list(APPEND ASAN_INST_TEST_SOURCES asan_mac_test.cc)
184endif()
185
186set(ASAN_BENCHMARKS_SOURCES
187 ${COMPILER_RT_GTEST_SOURCE}
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700188 asan_benchmarks_test.cc)
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000189
Alexey Samsonovbf231862012-12-19 15:17:23 +0000190# Adds ASan unit tests and benchmarks for architecture.
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700191macro(add_asan_tests_for_arch_and_kind arch kind)
Alexey Samsonovbf231862012-12-19 15:17:23 +0000192 # Instrumented tests.
193 set(ASAN_INST_TEST_OBJECTS)
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000194 foreach(src ${ASAN_INST_TEST_SOURCES})
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700195 asan_compile(ASAN_INST_TEST_OBJECTS ${src} ${arch} ${kind}
196 ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN})
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000197 endforeach()
Alexey Samsonovbf231862012-12-19 15:17:23 +0000198 if (APPLE)
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000199 # Add Mac-specific helper.
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700200 asan_compile(ASAN_INST_TEST_OBJECTS asan_mac_test_helpers.mm ${arch} ${kind}
201 ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} -ObjC ${ARGN})
Alexey Samsonovbf231862012-12-19 15:17:23 +0000202 endif()
Stephen Hines86277eb2015-03-23 12:06:32 -0700203 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/default")
204 add_asan_test(AsanUnitTests "Asan-${arch}${kind}-Test"
205 ${arch} ${kind} SUBDIR "default"
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000206 OBJECTS ${ASAN_INST_TEST_OBJECTS}
207 LINKFLAGS ${ASAN_UNITTEST_INSTRUMENTED_LINKFLAGS})
Stephen Hines86277eb2015-03-23 12:06:32 -0700208 if(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME)
209 file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/dynamic")
210 add_asan_test(AsanDynamicUnitTests "Asan-${arch}${kind}-Dynamic-Test"
211 ${arch} ${kind} SUBDIR "dynamic"
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700212 OBJECTS ${ASAN_INST_TEST_OBJECTS}
213 LINKFLAGS ${ASAN_DYNAMIC_UNITTEST_INSTRUMENTED_LINKFLAGS})
214 endif()
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000215
216 # Add static ASan runtime that will be linked with uninstrumented tests.
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700217 set(ASAN_TEST_RUNTIME RTAsanTest.${arch}${kind})
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000218 if(APPLE)
219 set(ASAN_TEST_RUNTIME_OBJECTS
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800220 $<TARGET_OBJECTS:RTAsan_dynamic.osx>
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000221 $<TARGET_OBJECTS:RTInterception.osx>
222 $<TARGET_OBJECTS:RTSanitizerCommon.osx>
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800223 $<TARGET_OBJECTS:RTSanitizerCommonLibc.osx>
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -0700224 $<TARGET_OBJECTS:RTLSanCommon.osx>
225 $<TARGET_OBJECTS:RTUbsan.osx>)
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000226 else()
227 set(ASAN_TEST_RUNTIME_OBJECTS
228 $<TARGET_OBJECTS:RTAsan.${arch}>
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700229 $<TARGET_OBJECTS:RTAsan_cxx.${arch}>
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000230 $<TARGET_OBJECTS:RTInterception.${arch}>
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000231 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
Pirama Arumuga Nainar259f7062015-05-06 11:49:53 -0700232 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
233 $<TARGET_OBJECTS:RTLSanCommon.${arch}>
234 $<TARGET_OBJECTS:RTUbsan.${arch}>
235 $<TARGET_OBJECTS:RTUbsan_cxx.${arch}>)
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000236 endif()
237 add_library(${ASAN_TEST_RUNTIME} STATIC ${ASAN_TEST_RUNTIME_OBJECTS})
238 set_target_properties(${ASAN_TEST_RUNTIME} PROPERTIES
239 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
Alexey Samsonovbf231862012-12-19 15:17:23 +0000240 # Uninstrumented tests.
241 set(ASAN_NOINST_TEST_OBJECTS)
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000242 foreach(src ${ASAN_NOINST_TEST_SOURCES})
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700243 asan_compile(ASAN_NOINST_TEST_OBJECTS ${src} ${arch} ${kind}
244 ${ASAN_UNITTEST_COMMON_CFLAGS} ${ARGN})
Alexey Samsonovc92a4212013-01-22 07:31:28 +0000245 endforeach()
Stephen Hines86277eb2015-03-23 12:06:32 -0700246 add_asan_test(AsanUnitTests "Asan-${arch}${kind}-Noinst-Test"
247 ${arch} ${kind} SUBDIR "default"
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000248 OBJECTS ${ASAN_NOINST_TEST_OBJECTS}
249 LINKFLAGS ${ASAN_UNITTEST_NOINST_LINKFLAGS}
250 WITH_TEST_RUNTIME)
Alexey Samsonovbf231862012-12-19 15:17:23 +0000251
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000252 # Benchmarks.
Alexey Samsonovbf231862012-12-19 15:17:23 +0000253 set(ASAN_BENCHMARKS_OBJECTS)
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000254 foreach(src ${ASAN_BENCHMARKS_SOURCES})
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700255 asan_compile(ASAN_BENCHMARKS_OBJECTS ${src} ${arch} ${kind}
256 ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN})
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000257 endforeach()
Stephen Hines86277eb2015-03-23 12:06:32 -0700258 add_asan_test(AsanBenchmarks "Asan-${arch}${kind}-Benchmark"
259 ${arch} ${kind} SUBDIR "default"
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000260 OBJECTS ${ASAN_BENCHMARKS_OBJECTS}
261 LINKFLAGS ${ASAN_UNITTEST_INSTRUMENTED_LINKFLAGS})
Alexey Samsonovbf231862012-12-19 15:17:23 +0000262endmacro()
263
Stephen Hines6d186232014-11-26 17:56:19 -0800264if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT ANDROID)
Pirama Arumuga Nainar799172d2016-03-03 15:50:30 -0800265 set(ASAN_TEST_ARCH ${ASAN_SUPPORTED_ARCH})
266 if(APPLE)
267 darwin_filter_host_archs(ASAN_SUPPORTED_ARCH ASAN_TEST_ARCH)
268 endif()
269 foreach(arch ${ASAN_TEST_ARCH})
Stephen Hines2d1fdb22014-05-28 23:58:16 -0700270 add_asan_tests_for_arch_and_kind(${arch} "-inline")
271 add_asan_tests_for_arch_and_kind(${arch} "-with-calls"
272 -mllvm -asan-instrumentation-with-call-threshold=0)
Alexey Samsonovd0b1d462013-01-21 14:31:45 +0000273 endforeach()
Chandler Carruth984f6cf2012-06-27 09:01:24 +0000274endif()
Alexey Samsonov20845432012-06-29 10:23:31 +0000275
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +0000276if(ANDROID)
Stephen Hines6d186232014-11-26 17:56:19 -0800277 foreach(arch ${ASAN_SUPPORTED_ARCH})
278 # Test w/o ASan instrumentation. Link it with ASan statically.
279 add_executable(AsanNoinstTest # FIXME: .arch?
280 $<TARGET_OBJECTS:RTAsan.${arch}>
281 $<TARGET_OBJECTS:RTInterception.${arch}>
282 $<TARGET_OBJECTS:RTSanitizerCommon.${arch}>
283 $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>
Pirama Arumuga Nainarcdce50b2015-07-01 12:26:56 -0700284 $<TARGET_OBJECTS:RTUbsan.${arch}>
285 $<TARGET_OBJECTS:RTUbsan_cxx.${arch}>
Stephen Hines6d186232014-11-26 17:56:19 -0800286 ${COMPILER_RT_GTEST_SOURCE}
287 ${ASAN_NOINST_TEST_SOURCES})
288 set_target_compile_flags(AsanNoinstTest ${ASAN_UNITTEST_COMMON_CFLAGS})
289 set_target_link_flags(AsanNoinstTest ${ASAN_UNITTEST_NOINST_LINKFLAGS})
290 target_link_libraries(AsanNoinstTest ${ASAN_UNITTEST_NOINST_LIBS})
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000291
Stephen Hines6d186232014-11-26 17:56:19 -0800292 # Test with ASan instrumentation. Link with ASan dynamic runtime.
293 add_executable(AsanTest
294 ${COMPILER_RT_GTEST_SOURCE}
295 ${ASAN_INST_TEST_SOURCES})
296 set_target_compile_flags(AsanTest ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS})
297 set_target_link_flags(AsanTest ${ASAN_UNITTEST_INSTRUMENTED_LINKFLAGS})
298 target_link_libraries(AsanTest ${ASAN_UNITTEST_INSTRUMENTED_LIBS})
Alexey Samsonov05fa3802013-09-16 15:50:53 +0000299
Stephen Hines6d186232014-11-26 17:56:19 -0800300 # Setup correct output directory and link flags.
301 set_target_properties(AsanNoinstTest AsanTest PROPERTIES
302 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
303 # Add unit tests to the test suite.
304 add_dependencies(AsanUnitTests AsanNoinstTest AsanTest)
305 endforeach()
Evgeniy Stepanov34fc56c2012-09-11 11:55:45 +0000306endif()