diff --git a/openmp/CMakeLists.txt b/openmp/CMakeLists.txt --- a/openmp/CMakeLists.txt +++ b/openmp/CMakeLists.txt @@ -37,6 +37,35 @@ set(OPENMP_TEST_CXX_COMPILER ${CMAKE_CXX_COMPILER} CACHE STRING "C++ compiler to use for testing OpenMP runtime libraries.") set(OPENMP_LLVM_TOOLS_DIR "" CACHE PATH "Path to LLVM tools for testing.") + + if (NOT DEFINED LLVM_PATH) + set(LLVM_PATH ${CMAKE_CURRENT_LIST_DIR}/../llvm CACHE PATH "" FORCE) + endif() + + if(NOT IS_DIRECTORY ${LLVM_PATH}) + message(WARNING + "The provided LLVM_PATH (${LLVM_PATH}) is not a valid directory.") + endif() + + set(LLVM_PATH ${LLVM_PATH} CACHE PATH "Path to LLVM source tree") + set(LLVM_MAIN_SRC_DIR ${LLVM_PATH}) + set(LLVM_CMAKE_DIR "${LLVM_PATH}/cmake/modules") + + set(LLVM_LIT_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/bin") + + if (EXISTS "${LLVM_CMAKE_DIR}") + list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") + find_package(Python3 REQUIRED COMPONENTS Interpreter) + include(AddLLVM) + endif() + + set(DEFAULT_LIT_ARGS "-sv --show-unsupported --show-xfail") + if (MSVC OR XCODE) + set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --no-progress-bar") + endif() + set(OPENMP_LIT_ARGS "${DEFAULT_LIT_ARGS}" CACHE STRING "Options for lit.") + set(LLVM_LIT_ARGS "${OPENMP_LIT_ARGS}") + separate_arguments(OPENMP_LIT_ARGS) else() set(OPENMP_ENABLE_WERROR ${LLVM_ENABLE_WERROR}) # If building in tree, we honor the same install suffix LLVM uses. @@ -120,3 +149,12 @@ # Now that we have seen all testsuites, create the check-openmp target. construct_check_openmp_target() + +if (OPENMP_STANDALONE_BUILD AND EXISTS "${LLVM_MAIN_SRC_DIR}") + # Make sure the llvm-lit script is generated into the bin directory, and + # do it after adding all tests, since the generated script will only work + # correctly discovered tests against test locations from the source tree + # that have already been discovered. + add_subdirectory(${LLVM_MAIN_SRC_DIR}/utils/llvm-lit + ${CMAKE_CURRENT_BINARY_DIR}/llvm-lit) +endif() diff --git a/openmp/cmake/OpenMPTesting.cmake b/openmp/cmake/OpenMPTesting.cmake --- a/openmp/cmake/OpenMPTesting.cmake +++ b/openmp/cmake/OpenMPTesting.cmake @@ -13,15 +13,19 @@ endif() # Find executables. - find_program(OPENMP_LLVM_LIT_EXECUTABLE - NAMES llvm-lit.py llvm-lit lit.py lit - PATHS ${OPENMP_LLVM_TOOLS_DIR}) - if (NOT OPENMP_LLVM_LIT_EXECUTABLE) - message(STATUS "Cannot find llvm-lit.") - message(STATUS "Please put llvm-lit in your PATH, set OPENMP_LLVM_LIT_EXECUTABLE to its full path, or point OPENMP_LLVM_TOOLS_DIR to its directory.") - message(WARNING "The check targets will not be available!") - set(ENABLE_CHECK_TARGETS FALSE PARENT_SCOPE) - return() + # If we've got add_lit_testsuite, we've got the main llvm source directory, + # and will generate the llvm-lit script at the end. + if (NOT COMMAND add_lit_testsuite) + find_program(OPENMP_LLVM_LIT_EXECUTABLE + NAMES llvm-lit.py llvm-lit lit.py lit + PATHS ${OPENMP_LLVM_TOOLS_DIR}) + if (NOT OPENMP_LLVM_LIT_EXECUTABLE) + message(STATUS "Cannot find llvm-lit.") + message(STATUS "Please put llvm-lit in your PATH, set OPENMP_LLVM_LIT_EXECUTABLE to its full path, or point OPENMP_LLVM_TOOLS_DIR to its directory.") + message(WARNING "The check targets will not be available!") + set(ENABLE_CHECK_TARGETS FALSE PARENT_SCOPE) + return() + endif() endif() find_program(OPENMP_FILECHECK_EXECUTABLE @@ -49,14 +53,6 @@ if (${OPENMP_STANDALONE_BUILD}) find_standalone_test_dependencies() - - # Set lit arguments. - set(DEFAULT_LIT_ARGS "-sv --show-unsupported --show-xfail") - if (MSVC OR XCODE) - set(DEFAULT_LIT_ARGS "${DEFAULT_LIT_ARGS} --no-progress-bar") - endif() - set(OPENMP_LIT_ARGS "${DEFAULT_LIT_ARGS}" CACHE STRING "Options for lit.") - separate_arguments(OPENMP_LIT_ARGS) else() if (NOT TARGET "FileCheck") message(STATUS "Cannot find 'FileCheck'.") @@ -190,7 +186,7 @@ set_property(GLOBAL APPEND PROPERTY OPENMP_LIT_DEPENDS ${ARG_DEPENDS}) endif() - if (${OPENMP_STANDALONE_BUILD}) + if (NOT COMMAND add_lit_testsuite) set(LIT_ARGS ${OPENMP_LIT_ARGS} ${ARG_ARGS}) add_custom_target(${target} COMMAND ${PYTHON_EXECUTABLE} ${OPENMP_LLVM_LIT_EXECUTABLE} ${LIT_ARGS} ${ARG_UNPARSED_ARGUMENTS} @@ -199,19 +195,23 @@ USES_TERMINAL ) else() + if (NOT OPENMP_STANDALONE_BUILD) + list(APPEND ARG_DEPENDS clang FileCheck not) + endif() + if (ARG_EXCLUDE_FROM_CHECK_ALL) add_lit_testsuite(${target} ${comment} ${ARG_UNPARSED_ARGUMENTS} EXCLUDE_FROM_CHECK_ALL - DEPENDS clang FileCheck not ${ARG_DEPENDS} + DEPENDS ${ARG_DEPENDS} ARGS ${ARG_ARGS} ) else() add_lit_testsuite(${target} ${comment} ${ARG_UNPARSED_ARGUMENTS} - DEPENDS clang FileCheck not ${ARG_DEPENDS} + DEPENDS ${ARG_DEPENDS} ARGS ${ARG_ARGS} ) endif() diff --git a/openmp/runtime/test/CMakeLists.txt b/openmp/runtime/test/CMakeLists.txt --- a/openmp/runtime/test/CMakeLists.txt +++ b/openmp/runtime/test/CMakeLists.txt @@ -43,4 +43,10 @@ # Configure the lit.site.cfg.in file set(AUTO_GEN_COMMENT "## Autogenerated by libomp configuration.\n# Do not edit!") -configure_file(lit.site.cfg.in lit.site.cfg @ONLY) +if (COMMAND configure_lit_site_cfg) + configure_lit_site_cfg("${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in" "${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg" + MAIN_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg") +else() + # Building standalone, without the main llvm directory available. + configure_file(lit.site.cfg.in lit.site.cfg @ONLY) +endif()