diff --git a/clang-tools-extra/CMakeLists.txt b/clang-tools-extra/CMakeLists.txt --- a/clang-tools-extra/CMakeLists.txt +++ b/clang-tools-extra/CMakeLists.txt @@ -4,6 +4,15 @@ option(CLANG_TIDY_ENABLE_STATIC_ANALYZER "Include static analyzer checks in clang-tidy" ON) +if(CLANG_INCLUDE_TESTS) + umbrella_lit_testsuite_begin(check-clang-tools) + + option(CLANG_TOOLS_TEST_USE_VG "Run Clang tools' tests under Valgrind" OFF) + if(CLANG_TOOLS_TEST_USE_VG) + set_property(GLOBAL APPEND PROPERTY LLVM_CLANG_TOOLS_LIT_EXTRA_ARGS "--vg") + endif() +endif() + add_subdirectory(clang-apply-replacements) add_subdirectory(clang-reorder-fields) add_subdirectory(modularize) @@ -18,12 +27,6 @@ add_subdirectory(pseudo) add_subdirectory(tool-template) -# Add the common testsuite after all the tools. -if(CLANG_INCLUDE_TESTS) -add_subdirectory(test) -add_subdirectory(unittests) -endif() - option(CLANG_TOOLS_EXTRA_INCLUDE_DOCS "Generate build targets for the Clang Extra Tools docs." ${LLVM_INCLUDE_DOCS}) if( CLANG_TOOLS_EXTRA_INCLUDE_DOCS ) @@ -36,3 +39,11 @@ if (CLANG_ENABLE_CLANGD) add_subdirectory(clangd) endif() + +# Add the common testsuite after all the tools. +if(CLANG_INCLUDE_TESTS) + add_subdirectory(test) + add_subdirectory(unittests) + umbrella_lit_testsuite_end(check-clang-tools) +endif() + diff --git a/clang-tools-extra/test/CMakeLists.txt b/clang-tools-extra/test/CMakeLists.txt --- a/clang-tools-extra/test/CMakeLists.txt +++ b/clang-tools-extra/test/CMakeLists.txt @@ -35,11 +35,6 @@ ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.cfg.py ) -option(CLANG_TOOLS_TEST_USE_VG "Run Clang tools' tests under Valgrind" OFF) -if(CLANG_TOOLS_TEST_USE_VG) - set(CLANG_TOOLS_TEST_EXTRA_ARGS ${CLANG_TEST_EXTRA_ARGS} "--vg") -endif() - set(CLANG_TOOLS_TEST_DEPS # For the clang-apply-replacements test that uses clang-rename. clang-rename @@ -107,14 +102,6 @@ endif() endif() -add_lit_testsuite(check-clang-tools "Running the Clang extra tools' regression tests" - ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS ${CLANG_TOOLS_TEST_DEPS} - ARGS ${CLANG_TOOLS_TEST_EXTRA_ARGS} - ) - -set_target_properties(check-clang-tools PROPERTIES FOLDER "Clang extra tools' tests") - add_lit_testsuites(CLANG-EXTRA ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${CLANG_TOOLS_TEST_DEPS} ) diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -191,6 +191,8 @@ else() set(LLVM_INCLUDE_TESTS OFF) endif() + + umbrella_lit_testsuite_begin(check-all) endif() set(BACKEND_PACKAGE_STRING "LLVM ${LLVM_PACKAGE_VERSION}") @@ -574,21 +576,7 @@ add_subdirectory(bindings/python/tests) if(CLANG_BUILT_STANDALONE) - # Add a global check rule now that all subdirectories have been traversed - # and we know the total set of lit testsuites. - get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) - get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) - get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) - get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) - get_property(LLVM_ADDITIONAL_TEST_TARGETS - GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_TARGETS) - add_lit_target(check-all - "Running all regression tests" - ${LLVM_LIT_TESTSUITES} - PARAMS ${LLVM_LIT_PARAMS} - DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_TARGETS} - ARGS ${LLVM_LIT_EXTRA_ARGS} - ) + umbrella_lit_testsuite_end(check-all) endif() add_subdirectory(utils/perf-training) endif() diff --git a/clang/bindings/python/tests/CMakeLists.txt b/clang/bindings/python/tests/CMakeLists.txt --- a/clang/bindings/python/tests/CMakeLists.txt +++ b/clang/bindings/python/tests/CMakeLists.txt @@ -46,5 +46,5 @@ if(RUN_PYTHON_TESTS) set_property(GLOBAL APPEND PROPERTY - LLVM_ADDITIONAL_TEST_TARGETS check-clang-python) + LLVM_ALL_ADDITIONAL_TEST_TARGETS check-clang-python) endif() diff --git a/clang/runtime/CMakeLists.txt b/clang/runtime/CMakeLists.txt --- a/clang/runtime/CMakeLists.txt +++ b/clang/runtime/CMakeLists.txt @@ -164,7 +164,7 @@ DEPENDS compiler-rt-build ${COMPILER_RT_TEST_DEPENDENCIES} WORKING_DIRECTORY ${BINARY_DIR} VERBATIM USES_TERMINAL) - set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS compiler-rt-test-depends) - set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_TARGETS check-compiler-rt) + set_property(GLOBAL APPEND PROPERTY LLVM_ALL_ADDITIONAL_TEST_DEPENDS compiler-rt-test-depends) + set_property(GLOBAL APPEND PROPERTY LLVM_ALL_ADDITIONAL_TEST_TARGETS check-compiler-rt) endif() endif() diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -1056,6 +1056,10 @@ llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2") endif() +if(LLVM_INCLUDE_TESTS) + umbrella_lit_testsuite_begin(check-all) +endif() + # Put this before tblgen. Else we have a circular dependence. add_subdirectory(lib/Demangle) add_subdirectory(lib/Support) @@ -1127,25 +1131,12 @@ add_subdirectory(utils/KillTheDoctor) endif() - # Add a global check rule now that all subdirectories have been traversed - # and we know the total set of lit testsuites. - get_property(LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES) - get_property(LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS) - get_property(LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS) - get_property(LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS) - get_property(LLVM_ADDITIONAL_TEST_TARGETS - GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_TARGETS) - get_property(LLVM_ADDITIONAL_TEST_DEPENDS - GLOBAL PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS) - add_lit_target(check-all - "Running all regression tests" - ${LLVM_LIT_TESTSUITES} - PARAMS ${LLVM_LIT_PARAMS} - DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_TARGETS} - ARGS ${LLVM_LIT_EXTRA_ARGS} - ) + umbrella_lit_testsuite_end(check-all) + get_property(LLVM_ALL_LIT_DEPENDS GLOBAL PROPERTY LLVM_ALL_LIT_DEPENDS) + get_property(LLVM_ALL_ADDITIONAL_TEST_DEPENDS + GLOBAL PROPERTY LLVM_ALL_ADDITIONAL_TEST_DEPENDS) add_custom_target(test-depends - DEPENDS ${LLVM_LIT_DEPENDS} ${LLVM_ADDITIONAL_TEST_DEPENDS}) + DEPENDS ${LLVM_ALL_LIT_DEPENDS} ${LLVM_ALL_ADDITIONAL_TEST_DEPENDS}) set_target_properties(test-depends PROPERTIES FOLDER "Tests") endif() diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -1822,17 +1822,63 @@ set_target_properties(${target} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD ON) endfunction() +# Convert a target name like check-clangd to a variable name like CLANG. +function(umbrella_lit_testsuite_var target outvar) + if (NOT target MATCHES "^check-") + message(FATAL_ERROR "umbrella lit suites must be check-*, not '${target}'") + endif() + string(SUBSTRING "${target}" 6 -1 var) + string(REPLACE "-" "_" var ${var}) + string(TOUPPER "${var}" var) + set(${outvar} "${var}" PARENT_SCOPE) +endfunction() + +# Start recording all lit test suites for a combined 'check-foo' target. +# The recording continues until umbrella_lit_testsuite_end() creates the target. +function(umbrella_lit_testsuite_begin target) + umbrella_lit_testsuite_var(${target} name) + set_property(GLOBAL APPEND PROPERTY LLVM_LIT_UMBRELLAS ${name}) +endfunction() + +# Create a combined 'check-foo' target for a set of related test suites. +# It runs all suites added since the matching umbrella_lit_testsuite_end() call. +# Tests marked EXCLUDE_FROM_CHECK_ALL are not gathered. +function(umbrella_lit_testsuite_end target) + umbrella_lit_testsuite_var(${target} name) + + get_property(testsuites GLOBAL PROPERTY LLVM_${name}_LIT_TESTSUITES) + get_property(params GLOBAL PROPERTY LLVM_${name}_LIT_PARAMS) + get_property(depends GLOBAL PROPERTY LLVM_${name}_LIT_DEPENDS) + get_property(extra_args GLOBAL PROPERTY LLVM_${name}_LIT_EXTRA_ARGS) + # Additional test targets are not gathered, but may be set externally. + get_property(additional_test_targets + GLOBAL PROPERTY LLVM_${name}_ADDITIONAL_TEST_TARGETS) + + string(TOLOWER ${name} name) + add_lit_target(${target} + "Running ${name} regression tests" + ${testsuites} + PARAMS ${params} + DEPENDS ${depends} ${additional_test_targets} + ARGS ${extra_args} + ) +endfunction() + # A function to add a set of lit test suites to be driven through 'check-*' targets. function(add_lit_testsuite target comment) cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) # EXCLUDE_FROM_ALL excludes the test ${target} out of check-all. if(NOT ARG_EXCLUDE_FROM_CHECK_ALL) - # Register the testsuites, params and depends for the global check rule. - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_TESTSUITES ${ARG_UNPARSED_ARGUMENTS}) - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_PARAMS ${ARG_PARAMS}) - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_DEPENDS ${ARG_DEPENDS}) - set_property(GLOBAL APPEND PROPERTY LLVM_LIT_EXTRA_ARGS ${ARG_ARGS}) + get_property(gather_names GLOBAL PROPERTY LLVM_LIT_UMBRELLAS) + set_property(GLOBAL APPEND PROPERTY LLVM_LIT_UMBRELLAS ${name}) + foreach(name ${gather_names}) + # Register the testsuites, params and depends for the umbrella check rule. + set_property(GLOBAL APPEND PROPERTY LLVM_${name}_LIT_TESTSUITES ${ARG_UNPARSED_ARGUMENTS}) + set_property(GLOBAL APPEND PROPERTY LLVM_${name}_LIT_PARAMS ${ARG_PARAMS}) + set_property(GLOBAL APPEND PROPERTY LLVM_${name}_LIT_DEPENDS ${ARG_DEPENDS}) + set_property(GLOBAL APPEND PROPERTY LLVM_${name}_LIT_EXTRA_ARGS ${ARG_ARGS}) + endforeach() endif() # Produce a specific suffixed check rule. diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -481,7 +481,7 @@ endif() if(LLVM_INCLUDE_TESTS) - set_property(GLOBAL APPEND PROPERTY LLVM_ADDITIONAL_TEST_DEPENDS runtimes-test-depends) + set_property(GLOBAL APPEND PROPERTY LLVM_ALL_ADDITIONAL_TEST_DEPENDS runtimes-test-depends) set(RUNTIMES_TEST_DEPENDS FileCheck