[llvm-commits] [compiler-rt] r170549 - in /compiler-rt/trunk: CMakeLists.txt lib/asan/tests/CMakeLists.txt
Alexey Samsonov
samsonov at google.com
Wed Dec 19 07:17:23 PST 2012
Author: samsonov
Date: Wed Dec 19 09:17:23 2012
New Revision: 170549
URL: http://llvm.org/viewvc/llvm-project?rev=170549&view=rev
Log:
[ASan] Support building both 32- and 64-bit unit tests if we can target both architectures
Modified:
compiler-rt/trunk/CMakeLists.txt
compiler-rt/trunk/lib/asan/tests/CMakeLists.txt
Modified: compiler-rt/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/CMakeLists.txt?rev=170549&r1=170548&r2=170549&view=diff
==============================================================================
--- compiler-rt/trunk/CMakeLists.txt (original)
+++ compiler-rt/trunk/CMakeLists.txt Wed Dec 19 09:17:23 2012
@@ -40,6 +40,16 @@
set(TARGET_I386_CFLAGS "-m32")
endif()
+function(get_target_flags_for_arch arch out_var)
+ if(${arch} STREQUAL "x86_64")
+ set(${out_var} ${TARGET_X86_64_CFLAGS} PARENT_SCOPE)
+ elseif(${arch} STREQUAL "i386")
+ set(${out_var} ${TARGET_I386_CFLAGS} PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "Unsupported architecture: ${arch}")
+ endif()
+endfunction()
+
# Try to compile a very simple source file to ensure we can target the given
# platform. We use the results of these tests to build only the various target
# runtime libraries supported by our current compilers cross-compiling
Modified: compiler-rt/trunk/lib/asan/tests/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/CMakeLists.txt?rev=170549&r1=170548&r2=170549&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/tests/CMakeLists.txt (original)
+++ compiler-rt/trunk/lib/asan/tests/CMakeLists.txt Wed Dec 19 09:17:23 2012
@@ -61,15 +61,6 @@
# Unit tests require libstdc++.
list(APPEND ASAN_LINK_FLAGS -lstdc++)
-# Support 64-bit and 32-bit builds.
-if(LLVM_BUILD_32_BITS)
- list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -m32)
- list(APPEND ASAN_LINK_FLAGS -m32)
-else()
- list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -m64)
- list(APPEND ASAN_LINK_FLAGS -m64)
-endif()
-
set(ASAN_BLACKLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/asan_test.ignore")
set(ASAN_UNITTEST_INSTRUMENTED_CFLAGS
@@ -83,25 +74,28 @@
-mllvm -asan-use-after-return=0
)
-# Compile source and add it to the object list using compiler
-# options in ${ARGN}.
-macro(asan_compile obj_list source)
+# Compile source for the given architecture, using compiler
+# options in ${ARGN}, and add it to the object list.
+macro(asan_compile obj_list source arch)
get_filename_component(basename ${source} NAME)
- set(output_obj "${basename}.o")
+ set(output_obj "${basename}.${arch}.o")
+ get_target_flags_for_arch(${arch} TARGET_CFLAGS)
clang_compile(${output_obj} ${source}
- CFLAGS ${ARGN}
+ CFLAGS ${ARGN} ${TARGET_CFLAGS}
DEPS gtest ${ASAN_RUNTIME_LIBRARIES}
${ASAN_BLACKLIST_FILE})
list(APPEND ${obj_list} ${output_obj})
endmacro()
-# Link ASan unit test from a set of objects in ${ARGN}.
-macro(add_asan_test test_suite test_name)
- message(STATUS "Link flags: ${ASAN_LINK_FLAGS}")
+# Link ASan unit test for a given architecture from a set
+# of objects in ${ARGN}.
+macro(add_asan_test test_suite test_name arch)
+ get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)
add_compiler_rt_test(${test_suite} ${test_name}
OBJECTS ${ARGN}
DEPS ${ASAN_RUNTIME_LIBRARIES}
- LINK_FLAGS ${ASAN_LINK_FLAGS})
+ LINK_FLAGS ${ASAN_LINK_FLAGS}
+ ${TARGET_LINK_FLAGS})
endmacro()
# Main AddressSanitizer unit tests.
@@ -111,43 +105,53 @@
add_custom_target(AsanBenchmarks)
set_target_properties(AsanBenchmarks PROPERTIES FOLDER "Asan benchmarks")
-# We only support building instrumented tests when we're not cross compiling
-# and targeting a unix-like system where we can predict viable compilation and
-# linking strategies.
-# We use a different approach to build these tests for Android. See below.
-if("${CMAKE_HOST_SYSTEM}" STREQUAL "${CMAKE_SYSTEM}" AND UNIX AND NOT ANDROID)
+# Adds ASan unit tests and benchmarks for architecture.
+macro(add_asan_tests_for_arch arch)
# Build gtest instrumented with ASan.
set(ASAN_INST_GTEST)
- asan_compile(ASAN_INST_GTEST ${COMPILER_RT_GTEST_SOURCE}
- ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS})
+ asan_compile(ASAN_INST_GTEST ${COMPILER_RT_GTEST_SOURCE} ${arch}
+ ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS})
# Instrumented tests.
set(ASAN_INST_TEST_OBJECTS)
- asan_compile(ASAN_INST_TEST_OBJECTS asan_globals_test.cc
+ asan_compile(ASAN_INST_TEST_OBJECTS asan_globals_test.cc ${arch}
${ASAN_UNITTEST_INSTRUMENTED_CFLAGS})
- asan_compile(ASAN_INST_TEST_OBJECTS asan_test.cc
+ asan_compile(ASAN_INST_TEST_OBJECTS asan_test.cc ${arch}
${ASAN_UNITTEST_INSTRUMENTED_CFLAGS})
if (APPLE)
- asan_compile(ASAN_INST_TEST_OBJECTS asan_mac_test.mm
+ asan_compile(ASAN_INST_TEST_OBJECTS asan_mac_test.mm ${arch}
${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} -ObjC)
endif()
# Uninstrumented tests.
set(ASAN_NOINST_TEST_OBJECTS)
- asan_compile(ASAN_NOINST_TEST_OBJECTS asan_noinst_test.cc
+ asan_compile(ASAN_NOINST_TEST_OBJECTS asan_noinst_test.cc ${arch}
${ASAN_UNITTEST_COMMON_CFLAGS})
- asan_compile(ASAN_NOINST_TEST_OBJECTS asan_test_main.cc
+ asan_compile(ASAN_NOINST_TEST_OBJECTS asan_test_main.cc ${arch}
${ASAN_UNITTEST_COMMON_CFLAGS})
-
# Link everything together.
- add_asan_test(AsanUnitTests AsanTest ${ASAN_NOINST_TEST_OBJECTS}
+ add_asan_test(AsanUnitTests "Asan-${arch}-Test" ${arch}
+ ${ASAN_NOINST_TEST_OBJECTS}
${ASAN_INST_TEST_OBJECTS} ${ASAN_INST_GTEST})
# Instrumented benchmarks.
set(ASAN_BENCHMARKS_OBJECTS)
- asan_compile(ASAN_BENCHMARKS_OBJECTS asan_benchmarks_test.cc
+ asan_compile(ASAN_BENCHMARKS_OBJECTS asan_benchmarks_test.cc ${arch}
${ASAN_UNITTEST_INSTRUMENTED_CFLAGS})
# Link benchmarks.
- add_asan_test(AsanBenchmarks AsanBenchmark ${ASAN_BENCHMARKS_OBJECTS}
- ${ASAN_INST_GTEST})
+ add_asan_test(AsanBenchmarks "Asan-${arch}-Benchmark" ${arch}
+ ${ASAN_BENCHMARKS_OBJECTS} ${ASAN_INST_GTEST})
+endmacro()
+
+# We only support building instrumented tests when we're not cross compiling
+# and targeting a unix-like system where we can predict viable compilation and
+# linking strategies.
+# We use a different approach to build these tests for Android. See below.
+if("${CMAKE_HOST_SYSTEM}" STREQUAL "${CMAKE_SYSTEM}" AND UNIX AND NOT ANDROID)
+ if(CAN_TARGET_X86_64)
+ add_asan_tests_for_arch(x86_64)
+ endif()
+ if(CAN_TARGET_I386)
+ add_asan_tests_for_arch(i386)
+ endif()
endif()
if(ANDROID)
More information about the llvm-commits
mailing list