Index: llvm/CMakeLists.txt =================================================================== --- llvm/CMakeLists.txt +++ llvm/CMakeLists.txt @@ -897,7 +897,7 @@ NO_INSTALL ALWAYS_CLEAN) endif() - add_subdirectory(utils/lit) + add_subdirectory(utils/lit/tests) add_subdirectory(test) add_subdirectory(unittests) if( LLVM_INCLUDE_UTILS ) Index: llvm/utils/lit/CMakeLists.txt =================================================================== --- llvm/utils/lit/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -# 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 remove_directory "${CMAKE_CURRENT_BINARY_DIR}/tests" - 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") Index: llvm/utils/lit/tests/CMakeLists.txt =================================================================== --- /dev/null +++ llvm/utils/lit/tests/CMakeLists.txt @@ -0,0 +1,24 @@ +# 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("lit.site.cfg.in" "lit.site.cfg" @ONLY) + +# For every lit.cfg in the Inputs tree, create a lit.site.cfg that points at +# the tests back in the source directory. Running the tests this way keeps the +# temporary output files in the build directory. +file(GLOB inputs_suites "Inputs/*/lit.cfg") +foreach(lit_cfg ${inputs_suites}) + get_filename_component(LIT_TEST_SRC_DIR "${lit_cfg}" DIRECTORY) + file(RELATIVE_PATH LIT_TEST_BIN_DIR "${CMAKE_CURRENT_SOURCE_DIR}" "${LIT_TEST_SRC_DIR}") + set(LIT_TEST_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/${LIT_TEST_BIN_DIR}") + configure_file("Inputs/lit.site.cfg.in" "${LIT_TEST_BIN_DIR}/lit.site.cfg" @ONLY) +endforeach() + +# Add rules for lit's own test suite +add_lit_testsuite(check-lit "Running lit's tests" + ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS "FileCheck" "not" +) + +# For IDEs +set_target_properties(check-lit PROPERTIES FOLDER "Tests") Index: llvm/utils/lit/tests/Inputs/lit.site.cfg.in =================================================================== --- /dev/null +++ llvm/utils/lit/tests/Inputs/lit.site.cfg.in @@ -0,0 +1,3 @@ +lit_config.load_config(config, "@LIT_TEST_SRC_DIR@/lit.cfg") +config.test_source_root = "@LIT_TEST_SRC_DIR@" +config.test_exec_root = "@LIT_TEST_BIN_DIR@" Index: llvm/utils/lit/tests/lit.site.cfg.in =================================================================== --- llvm/utils/lit/tests/lit.site.cfg.in +++ llvm/utils/lit/tests/lit.site.cfg.in @@ -5,4 +5,6 @@ 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") +lit_config.load_config(config, "@LLVM_SOURCE_DIR@/utils/lit/tests/lit.cfg") +config.test_source_root = "@CMAKE_CURRENT_SOURCE_DIR@" +config.test_exec_root = "@CMAKE_CURRENT_BINARY_DIR@"