Index: test/dfsan/CMakeLists.txt =================================================================== --- test/dfsan/CMakeLists.txt +++ test/dfsan/CMakeLists.txt @@ -1,8 +1,32 @@ set(DFSAN_LIT_TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in - ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg) +set(DFSAN_TESTSUITES) + +set(DFSAN_TEST_ARCH ${DFSAN_SUPPORTED_ARCH}) +if(APPLE) + darwin_filter_host_archs(DFSAN_SUPPORTED_ARCH DFSAN_TEST_ARCH) +endif() + +foreach(arch ${DFSAN_TEST_ARCH}) + string(TOLOWER "-${arch}" DFSAN_TEST_CONFIG_SUFFIX) + if(ANDROID OR ${arch} MATCHES "arm|aarch64") + # This is only true if we are cross-compiling. + # Build all tests with host compiler and use host tools. + set(DFSAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER}) + set(DFSAN_TEST_TARGET_CFLAGS ${COMPILER_RT_TEST_COMPILER_CFLAGS}) + else() + get_target_flags_for_arch(${arch} DFSAN_TEST_TARGET_CFLAGS) + string(REPLACE ";" " " DFSAN_TEST_TARGET_CFLAGS "${DFSAN_TEST_TARGET_CFLAGS}") + endif() + + string(TOUPPER ${arch} ARCH_UPPER_CASE) + set(CONFIG_NAME ${ARCH_UPPER_CASE}Config) + + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg) + list(APPEND DFSAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) +endforeach() set(DFSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS}) if(NOT COMPILER_RT_STANDALONE_BUILD) @@ -10,6 +34,6 @@ endif() add_lit_testsuite(check-dfsan "Running the DataFlowSanitizer tests" - ${CMAKE_CURRENT_BINARY_DIR} + ${DFSAN_TESTSUITES} DEPENDS ${DFSAN_TEST_DEPS}) set_target_properties(check-dfsan PROPERTIES FOLDER "DFSan tests") Index: test/dfsan/lit.cfg =================================================================== --- test/dfsan/lit.cfg +++ test/dfsan/lit.cfg @@ -3,13 +3,13 @@ import os # Setup config name. -config.name = 'DataFlowSanitizer' +config.name = 'DataFlowSanitizer' + config.name_suffix # Setup source root. config.test_source_root = os.path.dirname(__file__) # Setup default compiler flags used with -fsanitize=dataflow option. -clang_dfsan_cflags = ["-fsanitize=dataflow", "-m64"] +clang_dfsan_cflags = ["-fsanitize=dataflow", config.target_cflags] clang_dfsan_cxxflags = config.cxx_mode_flags + clang_dfsan_cflags def build_invocation(compile_flags): Index: test/dfsan/lit.site.cfg.in =================================================================== --- test/dfsan/lit.site.cfg.in +++ test/dfsan/lit.site.cfg.in @@ -1,5 +1,12 @@ +## Autogenerated by LLVM/Clang configuration. +# Do not edit! + # Load common config for all compiler-rt lit tests. lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured") +# Tool-specific config options. +config.name_suffix = "@DFSAN_TEST_CONFIG_SUFFIX@" +config.target_cflags = "@DFSAN_TEST_TARGET_CFLAGS@" + # Load tool-specific config that would do the real work. lit_config.load_config(config, "@DFSAN_LIT_TESTS_DIR@/lit.cfg")