|  | # Copyright 2022 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 | 
|  |  | 
|  | # Functions for setting up testing in the IREE project. Configures some specific | 
|  | # environment variables and sets up the creation of test-specific temporary | 
|  | # directories. | 
|  |  | 
|  | enable_testing(iree) | 
|  | # A property is apparently the only way to get an uncached global variable. | 
|  | set_property(GLOBAL PROPERTY IREE_TEST_TMPDIRS "") | 
|  | set(IREE_TEST_TMPDIR_ROOT "${IREE_BINARY_DIR}/test_tmpdir") | 
|  |  | 
|  | # iree_configure_test | 
|  | # | 
|  | # Registers test for temporary directory creation and adds properties common to | 
|  | # all IREE tests. This should be invoked with each test added with `add_test`. | 
|  | # | 
|  | # Parameters: | 
|  | #   TEST_NAME: the test name, e.g. iree/base/math_test | 
|  | function(iree_configure_test TEST_NAME) | 
|  | set(_TEST_TMPDIR "${IREE_TEST_TMPDIR_ROOT}/${TEST_NAME}_test_tmpdir") | 
|  | set_property(GLOBAL APPEND PROPERTY IREE_TEST_TMPDIRS ${_TEST_TMPDIR}) | 
|  | set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "TEST_TMPDIR=${_TEST_TMPDIR}") | 
|  |  | 
|  | # IREE_*_DISABLE environment variables may used to skip test cases which | 
|  | # require both a compiler target backend and compatible runtime HAL driver. | 
|  | # | 
|  | # These variables may be set by the test environment, typically as a property | 
|  | # of some continuous execution test runner or by an individual developer, or | 
|  | # here by the build system. | 
|  | # | 
|  | # Tests which only depend on a compiler target backend or a runtime HAL | 
|  | # driver, but not both, should generally use a different method of filtering. | 
|  | if(NOT IREE_TARGET_BACKEND_VULKAN_SPIRV OR NOT IREE_HAL_DRIVER_VULKAN) | 
|  | set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT "IREE_VULKAN_DISABLE=1") | 
|  | endif() | 
|  | endfunction() | 
|  |  | 
|  | # iree_create_ctest_customization | 
|  | # | 
|  | # Constructs a CTestCustom.cmake file with custom commands run before ctest | 
|  | # runs all tests. These commands create new temporary directories for each test | 
|  | # that was properly configured with `iree_configure_test`. | 
|  | # | 
|  | # Note that this must be called after all tests are registered as it depends on | 
|  | # a global variable (gross, I know). | 
|  | # | 
|  | # Takes no arguments | 
|  | function(iree_create_ctest_customization) | 
|  | get_property(IREE_TEST_TMPDIRS GLOBAL PROPERTY IREE_TEST_TMPDIRS) | 
|  | set(IREE_CREATE_TEST_TMPDIRS_COMMANDS "") | 
|  | set(_CMD_PREFIX "\"cmake -E make_directory") | 
|  | set(_CUR_CMD "${_CMD_PREFIX}") | 
|  | set(_CMD_LEN_LIMIT 8191) | 
|  | foreach(_DIR IN LISTS IREE_TEST_TMPDIRS) | 
|  | string(LENGTH "${_CUR_CMD}" _CUR_CMD_LEN) | 
|  | if(_CUR_CMD_LEN GREATER _CMD_LEN_LIMIT) | 
|  | message(SEND_ERROR | 
|  | "Make directory command for single test directory is longer than" | 
|  | " maximum command length ${_CMD_LEN_LIMIT}: '${_CUR_CMD}'") | 
|  | endif() | 
|  | string(LENGTH "${_DIR}" _DIR_LEN) | 
|  | math(EXPR _NEW_CMD_LEN "${_CUR_CMD_LEN} + ${_DIR_LEN} + 1") | 
|  | if(_NEW_CMD_LEN GREATER _CMD_LEN_LIMIT) | 
|  | string(APPEND _CUR_CMD "\"\n") | 
|  | string(APPEND IREE_CREATE_TEST_TMPDIRS_COMMANDS "${_CUR_CMD}") | 
|  | set(_CUR_CMD "${_CMD_PREFIX} ${_DIR}") | 
|  | else() | 
|  | string(APPEND _CUR_CMD " ${_DIR}") | 
|  | endif() | 
|  | endforeach() | 
|  | if(NOT _CUR_CMD STREQUAL _CMD_PREFIX) | 
|  | string(APPEND _CUR_CMD "\"\n") | 
|  | string(APPEND IREE_CREATE_TEST_TMPDIRS_COMMANDS "${_CUR_CMD}") | 
|  | endif() | 
|  |  | 
|  | configure_file("build_tools/cmake/CTestCustom.cmake.in" "${IREE_BINARY_DIR}/CTestCustom.cmake" @ONLY) | 
|  | endfunction() |