Teach the CMake build system to run lit's test suite. These can be run

directy with ``make check-lit`` and are run as part of
``make check-all``.

In principle we should run lit's testsuite before testing LLVM using lit
so that any problems with lit get discovered before testing LLVM so we
can bail out early.  However this implementation (``check-all`` runs all
tests together) seemed simpler and will still report failing lit tests.

Note that the tests and the configured ``lit.site.cfg`` have to be
copied into the build directory to avoid polluting the source tree.

llvm-svn: 257221
This commit is contained in:
Dan Liew 2016-01-08 22:36:22 +00:00
parent dba6b576cf
commit 9d49638f44
4 changed files with 51 additions and 2 deletions

View File

@ -697,6 +697,7 @@ if( LLVM_INCLUDE_TESTS )
EXCLUDE_FROM_ALL
NO_INSTALL)
endif()
add_subdirectory(utils/lit)
add_subdirectory(test)
add_subdirectory(unittests)
if (MSVC)

View File

@ -0,0 +1,26 @@
# The configured file is not placed in the correct location
# until the tests are run as we need to copy it into
# a copy of the tests folder
configure_file("tests/lit.site.cfg.in" "lit.site.cfg" @ONLY)
# Lit's test suite creates output files next to the sources which makes the
# source tree dirty. This is undesirable because we do out of source builds.
# To work around this the tests and the configuration file are copied into the
# build directory just before running them. The tests are not copied over at
# configure time (i.e. ``file(COPY ...)``) because this could lead to stale
# tests being run.
add_custom_target(prepare-check-lit
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/tests" "${CMAKE_CURRENT_BINARY_DIR}/tests"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg" "${CMAKE_CURRENT_BINARY_DIR}/tests"
COMMENT "Preparing lit tests"
)
# Add rules for lit's own test suite
add_lit_testsuite(check-lit "Running lit's tests"
${CMAKE_CURRENT_BINARY_DIR}
DEPENDS "FileCheck" "not" "prepare-check-lit"
)
# For IDEs
set_target_properties(check-lit PROPERTIES FOLDER "Tests")
set_target_properties(prepare-check-lit PROPERTIES FOLDER "Tests")

View File

@ -26,12 +26,20 @@ config.test_exec_root = config.test_source_root
config.target_triple = '(unused)'
src_root = os.path.join(config.test_source_root, '..')
config.environment['PYTHONPATH'] = src_root
llvm_src_root = getattr(config, 'llvm_src_root', None)
if llvm_src_root != None:
# ``src_root`` may be in LLVM's binary build directory which does not contain
# ``lit.py``, so use ``llvm_src_root`` instead.
lit_path = os.path.join(llvm_src_root, 'utils', 'lit')
else:
lit_path = src_root
config.environment['PYTHONPATH'] = lit_path # Required because some tests import the lit module
config.substitutions.append(('%{src_root}', src_root))
config.substitutions.append(('%{inputs}', os.path.join(
src_root, 'tests', 'Inputs')))
config.substitutions.append(('%{lit}', "%%{python} %s" % (
os.path.join(src_root, 'lit.py'),)))
os.path.join(lit_path, 'lit.py'),)))
config.substitutions.append(('%{python}', sys.executable))
# Enable coverage.py reporting, assuming the coverage module has been installed
@ -52,3 +60,9 @@ try:
except ImportError:
lit_config.warning('Could not import psutil. Some tests will be skipped and'
' the --timeout command line argument will not work.')
# Add llvm tools directory if this config is being loaded indirectly
llvm_tools_dir = getattr(config, 'llvm_tools_dir', None)
if llvm_tools_dir != None:
path = os.path.pathsep.join((llvm_tools_dir, config.environment['PATH']))
config.environment['PATH'] = path

View File

@ -0,0 +1,8 @@
## Autogenerated by LLVM/Clang configuration.
# Do not edit!
config.llvm_src_root = "@LLVM_SOURCE_DIR@"
config.llvm_obj_root = "@LLVM_BINARY_DIR@"
config.llvm_tools_dir = "@LLVM_TOOLS_BINARY_DIR@"
# Let the main config do the real work.
lit_config.load_config(config, "@LLVM_BINARY_DIR@/utils/lit/tests/lit.cfg")