llvm-project/libcxxabi/test/lit.cfg

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

80 lines
2.9 KiB
INI
Raw Normal View History

# -*- 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 = 'libc++abi'
# suffixes: A list of file extensions to treat as test files.
config.suffixes = ['.cpp', '.s']
# Allow expanding substitutions that are based on other substitutions
config.recursiveExpansionLimit = 10
# test_source_root: The root path where tests are located.
config.test_source_root = os.path.dirname(__file__)
# Allow expanding substitutions that are based on other substitutions
config.recursiveExpansionLimit = 10
# Infer the libcxx_test_source_root for configuration import.
# If libcxx_source_root isn't specified in the config, assume that the libcxx
# and libcxxabi 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, 'libcxxabi_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, 'libcxxabi_site_config', 'LIBCXXABI_SITE_CONFIG')
obj_root = getattr(config, 'libcxxabi_obj_root', None)
if obj_root is None:
import tempfile
obj_root = tempfile.mkdtemp(prefix='libcxxabi-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', 'libcxxabi')
if cfg_variant:
lit_config.note('Using configuration variant: %s' % cfg_variant)
# Load the Configuration class from the module name <cfg_variant>.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")
[libc++] Add an alternative Lit test format This new test format is simpler and more flexible. It creates Lit ShTests on the fly that reuse existing substitutions (like %{cxx}) instead of having complex logic in Python to run the tests. This has the benefit that virtually no coding is required to customize how the test suite is run -- one can achieve pretty much anything by defining the appropriate substitutions in a simple lit.cfg file. For example, in order to run the tests on an embedded device after building with a specific SDK, one can set the %{cxx} and %{compile_flags} substitutions to use that SDK, and the %{exec} substitution to the ssh.py script currently used for .sh.cpp tests with a remote executor. Dealing with the SSHExecutor becomes unnecessary, since all tests are treated like ShTests. As a side effect of this design, configuration files for the test suite can be as simple as: config.substitutions.append(('%{cxx}', '<path-to-compiler>')) config.substitutions.append(('%{compile_flags}', '<flags>')) config.substitutions.append(('%{link_flags}', '<flags>')) config.substitutions.append(('%{exec}', '<script-to-execute>')) This should allow storing lit.cfg files for various configurations directly in the repository instead of relying on complicated logic in config.py to set up the right flags. I've found numerous problems in that logic in the past years, and it seems like having simple and explicit configuration files for the configurations we support is going to solve most of these problems. Specifically, I am hoping to store configuration files for testing other Standard Libraries in the repository. Improving the interaction with the test suite configuration is still a work in progress, so for now this test format reuses the substitutions and available features that are set up by the current config.py. This new test format should support pretty much everything that the current test format supports, however it will not be enabled by default at first to make sure we're satisfied with it. For a short period of time, the new format will require `--param=use_new_format=True` to be enabled, however it is a very short term goal to replace the current testing format entirely and to simplify the configuration accordingly. Differential Revision: https://reviews.llvm.org/D77338
2020-03-31 04:25:24 +08:00
import libcxx.test.newformat
config.test_format = libcxx.test.newformat.CxxStandardLibraryTest()