blob: 68f166ba9b111a8fa36ecad8776738d70049abb2 [file] [log] [blame]
# Copyright 2021 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
include(CMakeParseArguments)
# iree_hal_cts_test_suite()
#
# Creates a set of tests for a provided Hardware Abstraction Layer (HAL) driver,
# with one generated test for each test in the Conformance Test Suite (CTS).
#
# Parameters:
# DRIVER_NAME: The name of the driver to test. Used for both target names and
# for `iree_hal_driver_registry_try_create_by_name()` within test code.
# DRIVER_REGISTRATION_HDR: The C #include path for `DRIVER_REGISTRATION_FN`.
# DRIVER_REGISTRATION_FN: The C function which registers `DRIVER_NAME`.
# DEPS: List of other libraries to link in to the binary targets (typically
# the dependency for `DRIVER_REGISTRATION_HDR`).
# EXCLUDED_TESTS: List of test names from `IREE_ALL_CTS_TESTS` to
# exclude from the test suite for this driver.
# LABELS: Additional labels to forward to `iree_cc_test`. The package path
# and "driver=${DRIVER}" are added automatically.
function(iree_hal_cts_test_suite)
if(NOT IREE_BUILD_TESTS)
return()
endif()
cmake_parse_arguments(
_RULE
""
"DRIVER_NAME;DRIVER_REGISTRATION_HDR;DRIVER_REGISTRATION_FN"
"DEPS;EXCLUDED_TESTS;LABELS"
${ARGN}
)
list(APPEND _RULE_LABELS "driver=${_RULE_DRIVER_NAME}")
foreach(_TEST_NAME ${IREE_ALL_CTS_TESTS})
if("${_TEST_NAME}" IN_LIST _RULE_EXCLUDED_TESTS)
continue()
endif()
# Note: driver names may contain dashes and other special characters. We
# could sanitize for file and target names, but passing through directly
# may be more intuitive.
set(_TEST_SOURCE_NAME "${_TEST_NAME}_${_RULE_DRIVER_NAME}_test.cc")
set(_TEST_LIBRARY_DEP "iree::hal::cts::${_TEST_NAME}_test_library")
# Generate the source file for this [test x driver] pair.
# TODO(scotttodd): Move to build time instead of configure time?
set(IREE_CTS_TEST_FILE_PATH "iree/hal/cts/${_TEST_NAME}_test.h")
set(IREE_CTS_DRIVER_REGISTRATION_HDR "${_RULE_DRIVER_REGISTRATION_HDR}")
set(IREE_CTS_DRIVER_REGISTRATION_FN "${_RULE_DRIVER_REGISTRATION_FN}")
set(IREE_CTS_TEST_CLASS_NAME "${_TEST_NAME}_test")
set(IREE_CTS_DRIVER_NAME "${_RULE_DRIVER_NAME}")
configure_file(
"${IREE_ROOT_DIR}/iree/hal/cts/cts_test_template.cc.in"
${_TEST_SOURCE_NAME}
)
iree_cc_test(
NAME
${_RULE_DRIVER_NAME}_${_TEST_NAME}_test
SRCS
"${CMAKE_CURRENT_BINARY_DIR}/${_TEST_SOURCE_NAME}"
DEPS
${_RULE_DEPS}
${_TEST_LIBRARY_DEP}
iree::base
iree::hal
iree::hal::cts::cts_test_base
iree::testing::gtest_main
LABELS
${_RULE_LABELS}
)
endforeach()
endfunction()