|  | # 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() |