diff options
Diffstat (limited to 'lib/sanitizer_common/tests/CMakeLists.txt')
-rw-r--r-- | lib/sanitizer_common/tests/CMakeLists.txt | 109 |
1 files changed, 69 insertions, 40 deletions
diff --git a/lib/sanitizer_common/tests/CMakeLists.txt b/lib/sanitizer_common/tests/CMakeLists.txt index 5b66917b05b0d..bb7a399b0ec68 100644 --- a/lib/sanitizer_common/tests/CMakeLists.txt +++ b/lib/sanitizer_common/tests/CMakeLists.txt @@ -1,10 +1,16 @@ include(CompilerRTCompile) +clang_compiler_add_cxx_check() + set(SANITIZER_UNITTESTS sanitizer_allocator_test.cc sanitizer_atomic_test.cc + sanitizer_bitvector_test.cc + sanitizer_bvgraph_test.cc sanitizer_common_test.cc + sanitizer_deadlock_detector_test.cc sanitizer_flags_test.cc + sanitizer_format_interceptor_test.cc sanitizer_ioctl_test.cc sanitizer_libc_test.cc sanitizer_linux_test.cc @@ -13,8 +19,9 @@ set(SANITIZER_UNITTESTS sanitizer_nolibc_test.cc sanitizer_posix_test.cc sanitizer_printf_test.cc - sanitizer_scanf_interceptor_test.cc + sanitizer_procmaps_test.cc sanitizer_stackdepot_test.cc + sanitizer_stacktrace_printer_test.cc sanitizer_stacktrace_test.cc sanitizer_stoptheworld_test.cc sanitizer_suppressions_test.cc @@ -22,22 +29,47 @@ set(SANITIZER_UNITTESTS sanitizer_thread_registry_test.cc) set(SANITIZER_TEST_HEADERS + sanitizer_pthread_wrappers.h + sanitizer_test_config.h sanitizer_test_utils.h) foreach(header ${SANITIZER_HEADERS}) list(APPEND SANITIZER_TEST_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header}) endforeach() set(SANITIZER_TEST_CFLAGS_COMMON - ${COMPILER_RT_GTEST_INCLUDE_CFLAGS} + ${COMPILER_RT_TEST_CFLAGS} + ${COMPILER_RT_GTEST_CFLAGS} -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common - -DGTEST_HAS_RTTI=0 - -O2 -g -fno-rtti - -Wall -Werror -Werror=sign-compare) + -fno-rtti + -O2 + -Werror=sign-compare + -Wno-non-virtual-dtor) + +# -gline-tables-only must be enough for these tests, so use it if possible. +if(COMPILER_RT_TEST_COMPILER_ID MATCHES "Clang") + list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -gline-tables-only) +else() + list(APPEND ASAN_UNITTEST_COMMON_CFLAGS -g) +endif() + +if(NOT MSVC) + list(APPEND SANITIZER_TEST_LINK_FLAGS_COMMON --driver-mode=g++) +endif() + +set(SANITIZER_TEST_LINK_LIBS) +append_list_if(ANDROID log SANITIZER_TEST_LINK_LIBS) +# NDK r10 requires -latomic almost always. +append_list_if(ANDROID atomic SANITIZER_TEST_LINK_LIBS) -set(SANITIZER_TEST_LINK_FLAGS_COMMON - -lstdc++ -ldl) +append_list_if(COMPILER_RT_HAS_LIBDL -ldl SANITIZER_TEST_LINK_FLAGS_COMMON) +append_list_if(COMPILER_RT_HAS_LIBPTHREAD -pthread SANITIZER_TEST_LINK_FLAGS_COMMON) +# x86_64 FreeBSD 9.2 additionally requires libc++ to build the tests. Also, +# 'libm' shall be specified explicitly to build i386 tests. +if(CMAKE_SYSTEM MATCHES "FreeBSD-9.2-RELEASE") + list(APPEND SANITIZER_TEST_LINK_FLAGS_COMMON "-lc++ -lm") +endif() include_directories(..) include_directories(../..) @@ -57,7 +89,11 @@ function(get_sanitizer_common_lib_for_arch arch lib lib_name) set(tgt_name "RTSanitizerCommon.test.${arch}") endif() set(${lib} "${tgt_name}" PARENT_SCOPE) - set(${lib_name} "lib${tgt_name}.a" PARENT_SCOPE) + if(NOT MSVC) + set(${lib_name} "lib${tgt_name}.a" PARENT_SCOPE) + else() + set(${lib_name} "${tgt_name}.lib" PARENT_SCOPE) + endif() endfunction() # Sanitizer_common unit tests testsuite. @@ -70,14 +106,17 @@ macro(add_sanitizer_tests_for_arch arch) get_target_flags_for_arch(${arch} TARGET_FLAGS) set(SANITIZER_TEST_SOURCES ${SANITIZER_UNITTESTS} ${COMPILER_RT_GTEST_SOURCE}) + set(SANITIZER_TEST_COMPILE_DEPS ${SANITIZER_TEST_HEADERS}) + if(NOT COMPILER_RT_STANDALONE_BUILD) + list(APPEND SANITIZER_TEST_COMPILE_DEPS gtest) + endif() set(SANITIZER_TEST_OBJECTS) foreach(source ${SANITIZER_TEST_SOURCES}) get_filename_component(basename ${source} NAME) set(output_obj "${basename}.${arch}.o") clang_compile(${output_obj} ${source} CFLAGS ${SANITIZER_TEST_CFLAGS_COMMON} ${TARGET_FLAGS} - DEPS gtest ${SANITIZER_RUNTIME_LIBRARIES} - ${SANITIZER_TEST_HEADERS}) + DEPS ${SANITIZER_TEST_COMPILE_DEPS}) list(APPEND SANITIZER_TEST_OBJECTS ${output_obj}) endforeach() get_sanitizer_common_lib_for_arch(${arch} SANITIZER_COMMON_LIB @@ -89,7 +128,7 @@ macro(add_sanitizer_tests_for_arch arch) ${SANITIZER_COMMON_LIB_NAME} DEPS ${SANITIZER_TEST_OBJECTS} ${SANITIZER_COMMON_LIB} LINK_FLAGS ${SANITIZER_TEST_LINK_FLAGS_COMMON} - -lpthread ${TARGET_FLAGS}) + ${TARGET_FLAGS}) if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND "${arch}" STREQUAL "x86_64") # Test that the libc-independent part of sanitizer_common is indeed @@ -98,7 +137,7 @@ macro(add_sanitizer_tests_for_arch arch) clang_compile(sanitizer_nolibc_test_main.${arch}.o sanitizer_nolibc_test_main.cc CFLAGS ${SANITIZER_TEST_CFLAGS_COMMON} ${TARGET_FLAGS} - DEPS ${SANITIZER_RUNTIME_LIBRARIES} ${SANITIZER_TEST_HEADERS}) + DEPS ${SANITIZER_TEST_COMPILE_DEPS}) add_compiler_rt_test(SanitizerUnitTests "Sanitizer-${arch}-Test-Nolibc" OBJECTS sanitizer_nolibc_test_main.${arch}.o -Wl,-whole-archive @@ -110,7 +149,7 @@ macro(add_sanitizer_tests_for_arch arch) endif() endmacro() -if(COMPILER_RT_CAN_EXECUTE_TESTS) +if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT ANDROID) # We use just-built clang to build sanitizer_common unittests, so we must # be sure that produced binaries would work. if(APPLE) @@ -136,34 +175,24 @@ if(COMPILER_RT_CAN_EXECUTE_TESTS) if(CAN_TARGET_i386) add_sanitizer_tests_for_arch(i386) endif() - - # Run unittests as a part of lit testsuite. - configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg - ) - - add_lit_testsuite(check-sanitizer "Running sanitizer library unittests" - ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS SanitizerUnitTests - ) - set_target_properties(check-sanitizer PROPERTIES FOLDER "Sanitizer unittests") endif() if(ANDROID) - # We assume that unit tests on Android are built in a build - # tree with fresh Clang as a host compiler. - add_executable(SanitizerTest - ${SANITIZER_UNITTESTS} - ${COMPILER_RT_GTEST_SOURCE} - $<TARGET_OBJECTS:RTSanitizerCommon.arm.android>) - set_target_compile_flags(SanitizerTest - ${SANITIZER_COMMON_CFLAGS} - ${SANITIZER_TEST_CFLAGS_COMMON}) - # Setup correct output directory and link flags. - set_target_properties(SanitizerTest PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - set_target_link_flags(SanitizerTest ${SANITIZER_TEST_LINK_FLAGS_COMMON}) - # Add unit test to test suite. - add_dependencies(SanitizerUnitTests SanitizerTest) + foreach(arch ${SANITIZER_COMMON_SUPPORTED_ARCH}) + add_executable(SanitizerTest + ${SANITIZER_UNITTESTS} + ${COMPILER_RT_GTEST_SOURCE} + $<TARGET_OBJECTS:RTSanitizerCommon.${arch}> + $<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}>) + set_target_compile_flags(SanitizerTest + ${SANITIZER_COMMON_CFLAGS} + ${SANITIZER_TEST_CFLAGS_COMMON}) + # Setup correct output directory and link flags. + set_target_properties(SanitizerTest PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + set_target_link_flags(SanitizerTest ${SANITIZER_TEST_LINK_FLAGS_COMMON}) + target_link_libraries(SanitizerTest ${SANITIZER_TEST_LINK_LIBS}) + # Add unit test to test suite. + add_dependencies(SanitizerUnitTests SanitizerTest) + endforeach() endif() |