summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Liew <dan@su-root.co.uk>2016-01-08 22:36:22 +0000
committerDan Liew <dan@su-root.co.uk>2016-01-08 22:36:22 +0000
commit9d49638f4466f0000fccd2570cde04e11e560fcb (patch)
tree88d9684e78f568cbfa9c64649ebe7014fa8943a9
parentdba6b576cf017128dfff7fcf48e6d2e72d79202d (diff)
downloadbcm5719-llvm-9d49638f4466f0000fccd2570cde04e11e560fcb.tar.gz
bcm5719-llvm-9d49638f4466f0000fccd2570cde04e11e560fcb.zip
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
-rw-r--r--llvm/CMakeLists.txt1
-rw-r--r--llvm/utils/lit/CMakeLists.txt26
-rw-r--r--llvm/utils/lit/tests/lit.cfg18
-rw-r--r--llvm/utils/lit/tests/lit.site.cfg.in8
4 files changed, 51 insertions, 2 deletions
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index 3d2093fde63..bfd454323dc 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -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)
diff --git a/llvm/utils/lit/CMakeLists.txt b/llvm/utils/lit/CMakeLists.txt
new file mode 100644
index 00000000000..79862a7cbf9
--- /dev/null
+++ b/llvm/utils/lit/CMakeLists.txt
@@ -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")
diff --git a/llvm/utils/lit/tests/lit.cfg b/llvm/utils/lit/tests/lit.cfg
index 4b38241d5a7..3ed5bc95129 100644
--- a/llvm/utils/lit/tests/lit.cfg
+++ b/llvm/utils/lit/tests/lit.cfg
@@ -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
diff --git a/llvm/utils/lit/tests/lit.site.cfg.in b/llvm/utils/lit/tests/lit.site.cfg.in
new file mode 100644
index 00000000000..bdc1f58575e
--- /dev/null
+++ b/llvm/utils/lit/tests/lit.site.cfg.in
@@ -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")
OpenPOWER on IntegriCloud