From c55051eea5d3cd57abfd9727f519b670517704d9 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Thu, 25 Jun 2020 12:02:43 -0400 Subject: [PATCH] [libunwind] Allow specifying custom Lit config files This is the libunwind counterpart of 0c66af970c80. --- libunwind/CMakeLists.txt | 2 ++ libunwind/test/CMakeLists.txt | 9 +++--- libunwind/test/lit.cfg | 73 ------------------------------------------ libunwind/test/lit.cfg.py | 10 ++++++ libunwind/test/lit.site.cfg.in | 36 +++++++++++++++++++-- 5 files changed, 50 insertions(+), 80 deletions(-) delete mode 100644 libunwind/test/lit.cfg create mode 100644 libunwind/test/lit.cfg.py diff --git a/libunwind/CMakeLists.txt b/libunwind/CMakeLists.txt index d3f791e..7065112 100644 --- a/libunwind/CMakeLists.txt +++ b/libunwind/CMakeLists.txt @@ -154,6 +154,8 @@ set(LIBUNWIND_TEST_LINKER_FLAGS "" CACHE STRING "Additional linker flags for test programs.") set(LIBUNWIND_TEST_COMPILER_FLAGS "" CACHE STRING "Additional compiler flags for test programs.") +set(LIBUNWIND_TEST_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/test/lit.site.cfg.in" CACHE STRING + "The Lit testing configuration to use when running the tests.") if (NOT LIBUNWIND_ENABLE_SHARED AND NOT LIBUNWIND_ENABLE_STATIC) message(FATAL_ERROR "libunwind must be built as either a shared or static library.") diff --git a/libunwind/test/CMakeLists.txt b/libunwind/test/CMakeLists.txt index 26e7842..794a59f 100644 --- a/libunwind/test/CMakeLists.txt +++ b/libunwind/test/CMakeLists.txt @@ -25,12 +25,11 @@ set(LIBUNWIND_EXECUTOR "${Python3_EXECUTABLE} ${LIBUNWIND_LIBCXX_PATH}/utils/run "Executor to use when running tests.") set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!") -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in +configure_lit_site_cfg( + "${LIBUNWIND_TEST_CONFIG}" ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg - @ONLY) + MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py") add_lit_testsuite(check-unwind "Running libunwind tests" ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS ${LIBUNWIND_TEST_DEPS} - ) + DEPENDS ${LIBUNWIND_TEST_DEPS}) diff --git a/libunwind/test/lit.cfg b/libunwind/test/lit.cfg deleted file mode 100644 index 7f74bd6..0000000 --- a/libunwind/test/lit.cfg +++ /dev/null @@ -1,73 +0,0 @@ -# -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79: - -# Configuration file for the 'lit' test runner. - - -import os -import site - -site.addsitedir(os.path.dirname(__file__)) - - -# Tell pylint that we know config and lit_config exist somewhere. -if 'PYLINT_IMPORT' in os.environ: - config = object() - lit_config = object() - -# name: The name of this test suite. -config.name = 'libunwind' - -# suffixes: A list of file extensions to treat as test files. -config.suffixes = ['.cpp', '.s'] - -# test_source_root: The root path where tests are located. -config.test_source_root = os.path.dirname(__file__) - -# Infer the libcxx_test_source_root for configuration import. -# If libcxx_source_root isn't specified in the config, assume that the libcxx -# and libunwind source directories are sibling directories. -libcxx_src_root = getattr(config, 'libcxx_src_root', None) -if not libcxx_src_root: - libcxx_src_root = os.path.join(config.test_source_root, '../../libcxx') -libcxx_test_src_root = os.path.join(libcxx_src_root, 'utils') -if os.path.isfile(os.path.join(libcxx_test_src_root, 'libcxx', '__init__.py')): - site.addsitedir(libcxx_test_src_root) -else: - lit_config.fatal('Could not find libcxx test directory for test imports' - ' in: %s' % libcxx_test_src_root) - -# Infer the test_exec_root from the libcxx_object root. -obj_root = getattr(config, 'libunwind_obj_root', None) - -# Check that the test exec root is known. -if obj_root is None: - import libcxx.test.config - libcxx.test.config.loadSiteConfig( - lit_config, config, 'libunwind_site_config', 'LIBUNWIND_SITE_CONFIG') - obj_root = getattr(config, 'libunwind_obj_root', None) - if obj_root is None: - import tempfile - obj_root = tempfile.mkdtemp(prefix='libunwind-testsuite-') - lit_config.warning('Creating temporary directory for object root: %s' % - obj_root) - -config.test_exec_root = os.path.join(obj_root, 'test') - -cfg_variant = getattr(config, 'configuration_variant', 'libunwind') -if cfg_variant: - lit_config.note('Using configuration variant: %s' % cfg_variant) - -# Load the Configuration class from the module name .test.config. -config_module_name = '.'.join([cfg_variant, 'test', 'config']) -config_module = __import__(config_module_name, fromlist=['Configuration']) - -configuration = config_module.Configuration(lit_config, config) -configuration.configure() -configuration.print_config_info() -if lit_config.params.get('use_old_format', False): - lit_config.note("Using the old libc++ testing format") - config.test_format = configuration.get_test_format() -else: - lit_config.note("Using the new libc++ testing format") - import libcxx.test.newformat - config.test_format = libcxx.test.newformat.CxxStandardLibraryTest() diff --git a/libunwind/test/lit.cfg.py b/libunwind/test/lit.cfg.py new file mode 100644 index 0000000..647464a --- /dev/null +++ b/libunwind/test/lit.cfg.py @@ -0,0 +1,10 @@ +# All the Lit configuration is handled in the site configs -- this file is only +# left as a canary to catch invocations of Lit that do not go through llvm-lit. +# +# Invocations that go through llvm-lit will automatically use the right Lit +# site configuration inside the build directory. + +lit_config.fatal( + "You seem to be running Lit directly -- you should be running Lit through " + "/bin/llvm-lit, which will ensure that the right Lit configuration " + "file is used.") diff --git a/libunwind/test/lit.site.cfg.in b/libunwind/test/lit.site.cfg.in index 809ad10..e37fe2f 100644 --- a/libunwind/test/lit.site.cfg.in +++ b/libunwind/test/lit.site.cfg.in @@ -1,4 +1,8 @@ @AUTO_GEN_COMMENT@ + +import os +import site + config.cxx_under_test = "@LIBUNWIND_COMPILER@" config.project_obj_root = "@CMAKE_BINARY_DIR@" config.libunwind_src_root = "@LIBUNWIND_SOURCE_DIR@" @@ -26,5 +30,33 @@ config.sysroot = "@LIBUNWIND_SYSROOT@" config.gcc_toolchain = "@LIBUNWIND_GCC_TOOLCHAIN@" config.cxx_ext_threads = @LIBUNWIND_BUILD_EXTERNAL_THREAD_LIBRARY@ -# Let the main config do the real work. -lit_config.load_config(config, "@LIBUNWIND_SOURCE_DIR@/test/lit.cfg") +site.addsitedir(os.path.join(config.libunwind_src_root, 'test')) +site.addsitedir(os.path.join(config.libcxx_src_root, 'utils')) + +# name: The name of this test suite. +config.name = 'libunwind' + +# suffixes: A list of file extensions to treat as test files. +config.suffixes = ['.cpp', '.s'] + +# test_source_root: The root path where tests are located. +config.test_source_root = os.path.join(config.libunwind_src_root, 'test') + +# Allow expanding substitutions that are based on other substitutions +config.recursiveExpansionLimit = 10 + +# Infer the test_exec_root from the build directory. +config.test_exec_root = os.path.join(config.libunwind_obj_root, 'test') + +lit_config.note('Using configuration variant: libunwind') +import libunwind.test.config +configuration = libunwind.test.config.Configuration(lit_config, config) +configuration.configure() +configuration.print_config_info() +if lit_config.params.get('use_old_format', False): + lit_config.note("Using the old libc++ testing format") + config.test_format = configuration.get_test_format() +else: + lit_config.note("Using the new libc++ testing format") + import libcxx.test.newformat + config.test_format = libcxx.test.newformat.CxxStandardLibraryTest() -- 2.7.4