blob: 1f9999746f8fabdd849946ec068ac1615338ab10 [file] [log] [blame]
# Copyright 2020 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
# iree_add_installed_test()
#
# Creates a build-time and exported install-time test. All tests are installed
# into the tests/ tree. Calling code must arrange to install dependencies of the
# test into that tree.
#
# Parameters:
# TEST_NAME: Name of the test (as in "some/path/to/test").
# COMMAND: Passed to add_test() as is.
# ENVIRONMENT: Set as the ENVIRONMENT property of the build-time test.
# INSTALLED_COMMAND: Corrollary to the 'COMMAND' argument but added to the
# install time definition.
# WORKING_DIRECTORY: Passed to add_test() as is. Note that in the install tree
# all tests run in the tests/ directory.
# LABELS: Labels to pass to add_test() and installed tests.
function(iree_add_installed_test)
cmake_parse_arguments(
_RULE
""
"TEST_NAME"
"COMMAND;ENVIRONMENT;INSTALLED_COMMAND;WORKING_DIRECTORY;LABELS"
${ARGN}
)
add_test(
NAME
${_RULE_TEST_NAME}
COMMAND
${_RULE_COMMAND}
)
if (DEFINED _RULE_WORKING_DIRECTORY)
set_property(
TEST
${_RULE_TEST_NAME}
PROPERTY WORKING_DIRECTORY
"${_RULE_WORKING_DIRECTORY}"
)
endif()
set_property(
TEST
${_RULE_TEST_NAME}
PROPERTY LABELS
"${_RULE_LABELS}"
)
set_property(
TEST
${_RULE_TEST_NAME}
PROPERTY ENVIRONMENT
"TEST_TMPDIR=${CMAKE_BINARY_DIR}/${_RULE_TEST_NAME}_test_tmpdir"
${_RULE_ENVIRONMENT}
)
iree_add_test_environment_properties(${_RULE_TEST_NAME})
# Write the to the installed ctest file template.
set(_installed_ctest_input_file
"${CMAKE_BINARY_DIR}/iree_installed_tests.cmake.in")
get_property(_has_tests GLOBAL PROPERTY IREE_HAS_INSTALLED_TESTS)
if(NOT _has_tests)
# First time.
file(WRITE "${_installed_ctest_input_file}") # Truncate.
set_property(GLOBAL PROPERTY IREE_HAS_INSTALLED_TESTS ON)
endif()
# Now write directives to the installed tests cmake file.
file(APPEND "${_installed_ctest_input_file}"
"add_test(${_RULE_TEST_NAME} ${_RULE_INSTALLED_COMMAND})\n"
"set_tests_properties(${_RULE_TEST_NAME} PROPERTIES LABELS \"${_RULE_LABELS}\")\n"
)
# First time generation and setup to install. Note that since this all runs
# at the generate phase, it doesn't matter that we trigger it before all
# tests accumulate.
if(NOT _has_tests)
set(_installed_ctest_output_file "${CMAKE_BINARY_DIR}/iree_installed_tests.cmake")
file(GENERATE
OUTPUT "${_installed_ctest_output_file}"
INPUT "${_installed_ctest_input_file}"
)
install(FILES "${_installed_ctest_output_file}"
DESTINATION tests
RENAME "CTestTestfile.cmake"
COMPONENT Tests
)
endif()
endfunction()