aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/modules/AddLLVM.cmake9
-rw-r--r--utils/lit/CMakeLists.txt7
-rw-r--r--utils/lit/lit/util.py6
-rw-r--r--utils/lit/tests/Inputs/config-map-discovery/driver.py14
-rw-r--r--utils/lit/tests/Inputs/config-map-discovery/invalid-test.txt0
-rw-r--r--utils/lit/tests/Inputs/config-map-discovery/lit.alt.cfg9
-rw-r--r--utils/lit/tests/Inputs/config-map-discovery/main-config/lit.cfg1
-rw-r--r--utils/lit/tests/Inputs/config-map-discovery/tests/test1.txt0
-rw-r--r--utils/lit/tests/Inputs/config-map-discovery/tests/test2.txt0
-rw-r--r--utils/lit/tests/discovery.py22
10 files changed, 64 insertions, 4 deletions
diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
index f328e049764..81e7211ef97 100644
--- a/cmake/modules/AddLLVM.cmake
+++ b/cmake/modules/AddLLVM.cmake
@@ -1113,10 +1113,14 @@ endfunction(llvm_canonicalize_cmake_booleans)
# common variables that any Lit instance is likely to need, and custom
# variables can be passed in.
function(configure_lit_site_cfg site_in site_out)
- cmake_parse_arguments(ARG "" "" "MAIN_CONFIG" ${ARGN})
+ cmake_parse_arguments(ARG "" "" "MAIN_CONFIG;OUTPUT_MAPPING" ${ARGN})
if ("${ARG_MAIN_CONFIG}" STREQUAL "")
- set(ARG_MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg")
+ get_filename_component(INPUT_DIR ${site_in} DIRECTORY)
+ set(ARG_MAIN_CONFIG "${INPUT_DIR}/lit.cfg")
+ endif()
+ if ("${ARG_OUTPUT_MAPPING}" STREQUAL "")
+ set(ARG_OUTPUT_MAPPING "${site_out}")
endif()
foreach(c ${LLVM_TARGETS_TO_BUILD})
@@ -1184,7 +1188,6 @@ function(configure_lit_site_cfg site_in site_out)
"lit.llvm.initialize(lit_config, config)\n")
configure_file(${site_in} ${site_out} @ONLY)
- get_filename_component(INPUT_DIR ${site_in} DIRECTORY)
if (EXISTS "${ARG_MAIN_CONFIG}")
set(PYTHON_STATEMENT "map_config('${ARG_MAIN_CONFIG}', '${site_out}')")
get_property(LLVM_LIT_CONFIG_MAP GLOBAL PROPERTY LLVM_LIT_CONFIG_MAP)
diff --git a/utils/lit/CMakeLists.txt b/utils/lit/CMakeLists.txt
index d10decedaa8..43caf09f140 100644
--- a/utils/lit/CMakeLists.txt
+++ b/utils/lit/CMakeLists.txt
@@ -1,7 +1,12 @@
# 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_lit_site_cfg("tests/lit.site.cfg.in" "lit.site.cfg")
+configure_lit_site_cfg(
+ "${CMAKE_CURRENT_SOURCE_DIR}/tests/lit.site.cfg.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg"
+ OUTPUT_MAPPING
+ "${CMAKE_CURRENT_BINARY_DIR}/tests/lit.site.cfg"
+ )
# 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.
diff --git a/utils/lit/lit/util.py b/utils/lit/lit/util.py
index bdd407b57d5..174194f81be 100644
--- a/utils/lit/lit/util.py
+++ b/utils/lit/lit/util.py
@@ -9,6 +9,12 @@ import subprocess
import sys
import threading
+def norm_path(path):
+ path = os.path.realpath(path)
+ path = os.path.normpath(path)
+ path = os.path.normcase(path)
+ return path
+
def is_string(value):
try:
# Python 2 and Python 3 are different here.
diff --git a/utils/lit/tests/Inputs/config-map-discovery/driver.py b/utils/lit/tests/Inputs/config-map-discovery/driver.py
new file mode 100644
index 00000000000..c1acdfc972f
--- /dev/null
+++ b/utils/lit/tests/Inputs/config-map-discovery/driver.py
@@ -0,0 +1,14 @@
+import lit.util
+import os
+import sys
+
+main_config = sys.argv[1]
+
+config_map = {lit.util.norm_path(main_config) : sys.argv[2]}
+builtin_parameters = {'config_map' : config_map}
+
+if __name__=='__main__':
+ from lit.main import main
+ main_config_dir = os.path.dirname(main_config)
+ sys.argv = [sys.argv[0]] + sys.argv[3:] + [main_config_dir]
+ main(builtin_parameters)
diff --git a/utils/lit/tests/Inputs/config-map-discovery/invalid-test.txt b/utils/lit/tests/Inputs/config-map-discovery/invalid-test.txt
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/utils/lit/tests/Inputs/config-map-discovery/invalid-test.txt
diff --git a/utils/lit/tests/Inputs/config-map-discovery/lit.alt.cfg b/utils/lit/tests/Inputs/config-map-discovery/lit.alt.cfg
new file mode 100644
index 00000000000..8462c81bdca
--- /dev/null
+++ b/utils/lit/tests/Inputs/config-map-discovery/lit.alt.cfg
@@ -0,0 +1,9 @@
+import lit.formats
+import lit.util
+config.name = 'config-map'
+config.suffixes = ['.txt']
+config.test_format = lit.formats.ShTest()
+
+import os
+config.test_exec_root = lit.util.norm_path(os.path.dirname(__file__))
+config.test_source_root = os.path.join(config.test_exec_root, "tests")
diff --git a/utils/lit/tests/Inputs/config-map-discovery/main-config/lit.cfg b/utils/lit/tests/Inputs/config-map-discovery/main-config/lit.cfg
new file mode 100644
index 00000000000..380a05beb4a
--- /dev/null
+++ b/utils/lit/tests/Inputs/config-map-discovery/main-config/lit.cfg
@@ -0,0 +1 @@
+print("ERROR: lit.cfg invoked!") \ No newline at end of file
diff --git a/utils/lit/tests/Inputs/config-map-discovery/tests/test1.txt b/utils/lit/tests/Inputs/config-map-discovery/tests/test1.txt
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/utils/lit/tests/Inputs/config-map-discovery/tests/test1.txt
diff --git a/utils/lit/tests/Inputs/config-map-discovery/tests/test2.txt b/utils/lit/tests/Inputs/config-map-discovery/tests/test2.txt
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/utils/lit/tests/Inputs/config-map-discovery/tests/test2.txt
diff --git a/utils/lit/tests/discovery.py b/utils/lit/tests/discovery.py
index ba5247337a8..41a2d6cad3d 100644
--- a/utils/lit/tests/discovery.py
+++ b/utils/lit/tests/discovery.py
@@ -25,6 +25,28 @@
# CHECK-BASIC-OUT: top-level-suite :: test-one
# CHECK-BASIC-OUT: top-level-suite :: test-two
+# Check discovery when providing the special builtin 'config_map'
+# RUN: %{python} %{inputs}/config-map-discovery/driver.py \
+# RUN: %{inputs}/config-map-discovery/main-config/lit.cfg \
+# RUN: %{inputs}/config-map-discovery/lit.alt.cfg \
+# RUN: --single-process --debug --show-tests --show-suites > %t.out 2> %t.err
+# RUN: FileCheck --check-prefix=CHECK-CONFIG-MAP-OUT < %t.out %s
+# RUN: FileCheck --check-prefix=CHECK-CONFIG-MAP-ERR < %t.err %s
+
+# CHECK-CONFIG-MAP-OUT-NOT: ERROR: lit.cfg invoked
+# CHECK-CONFIG-MAP-OUT: -- Test Suites --
+# CHECK-CONFIG-MAP-OUT: config-map - 2 tests
+# CHECK-CONFIG-MAP-OUT: Source Root: {{.*[/\\]config-map-discovery[/\\]tests}}
+# CHECK-CONFIG-MAP-OUT: Exec Root : {{.*[/\\]tests[/\\]inputs[/\\]config-map-discovery}}
+# CHECK-CONFIG-MAP-OUT: -- Available Tests --
+# CHECK-CONFIG-MAP-OUT-NOT: invalid-test.txt
+# CHECK-CONFIG-MAP-OUT: config-map :: test1.txt
+# CHECK-CONFIG-MAP-OUT: config-map :: test2.txt
+
+# CHECK-CONFIG-MAP-ERR: loading suite config '{{.*}}lit.alt.cfg'
+# CHECK-CONFIG-MAP-ERR: loaded config '{{.*}}lit.alt.cfg'
+# CHECK-CONFIG-MAP-ERR: resolved input '{{.*config-map-discovery[/\\]main-config}}' to 'config-map'::()
+
# Check discovery when exact test names are given.
#