Add HAL CTS tests using executables. (#7982) Fixes https://github.com/google/iree/issues/5678 (for `executable_cache_test`, tests issuing dispatches can follow on later) Tests are filtered based on the HAL driver and compiler target being enabled as well as the presence of a new `COMPILER_TARGET_BACKEND` parameter to the `iree_hal_cts_test_suite()` function. If all of those conditions are met, executable testdata is generated using the new `-iree-mlir-to-hal-executable` translation mode and relevant tests in the suite get to load and reference the generated data. --- Rough edges: * ~~`iree_file_toc_t` definition copy/paste from `generate_embed_data` (since leaf binaries provide their own implementations)~~ * Specifying executable formats in CMake is hacky (`"\"embedded-elf-\" IREE_ARCH"`) * We may also want to test the system loader as well as the embedded loader, which is possible with another `iree_hal_cts_test_suite()` call I was also expecting the CMake to be a bit gnarly, and it is. Could maybe refactor into some helper functions or golf on the logic a bit. The interface to each HAL implementation is pretty nice, but the new implicit dependency on `iree-translate` makes it harder to use with out-of-tree runtime HAL drivers + compiler targets. Could pass `TRANSLATE_TOOL` as well 🤔
diff --git a/build_tools/cmake/iree_bytecode_module.cmake b/build_tools/cmake/iree_bytecode_module.cmake index 6d9bc26..f918702 100644 --- a/build_tools/cmake/iree_bytecode_module.cmake +++ b/build_tools/cmake/iree_bytecode_module.cmake
@@ -25,8 +25,8 @@ # -DIREE_BUILD_TESTS=ON to CMake. # # Note: -# By default, iree_bytecode_module will create a library named ${NAME}_cc, -# and alias target iree::${NAME}_cc. The iree:: form should always be used. +# By default, iree_bytecode_module will create a library named ${NAME}_c, +# and alias target iree::${NAME}_c. The iree:: form should always be used. # This is to reduce namespace pollution. function(iree_bytecode_module) cmake_parse_arguments(
diff --git a/build_tools/cmake/iree_c_embed_data.cmake b/build_tools/cmake/iree_c_embed_data.cmake index ec13693..659e256 100644 --- a/build_tools/cmake/iree_c_embed_data.cmake +++ b/build_tools/cmake/iree_c_embed_data.cmake
@@ -49,7 +49,7 @@ list(APPEND _ARGS "--output_header=${_RULE_H_FILE_OUTPUT}") list(APPEND _ARGS "--output_impl=${_RULE_C_FILE_OUTPUT}") list(APPEND _ARGS "--identifier=${_IDENTIFIER}") - if(DEFINED _RULE_STRIP_PREFIX}) + if(DEFINED _RULE_STRIP_PREFIX) list(APPEND _ARGS "--strip_prefix=${_RULE_STRIP_PREFIX}") endif() if(${_RULE_FLATTEN})
diff --git a/build_tools/cmake/iree_hal_cts_test_suite.cmake b/build_tools/cmake/iree_hal_cts_test_suite.cmake index 68f166b..3c60e30 100644 --- a/build_tools/cmake/iree_hal_cts_test_suite.cmake +++ b/build_tools/cmake/iree_hal_cts_test_suite.cmake
@@ -16,6 +16,15 @@ # 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`. +# COMPILER_TARGET_BACKEND: Optional target backend name to pass to the +# `-iree-hal-target-backends` option of `iree-translate` to use for +# executable generation. If this is omitted, or the associated compiler +# target is not enabled, tests which use executables will be disabled. +# EXECUTABLE_FORMAT: Executable format identifier. Will be interpreted +# literally in C++ and may include macros like IREE_ARCH as needed. +# Examples: +# "\"vmvx-bytecode-fb\"" -> "vmvx-bytecode-fb" +# "\"embedded-elf-\" IREE_ARCH" -> "embedded-elf-x86_64" # 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 @@ -30,18 +39,117 @@ cmake_parse_arguments( _RULE "" - "DRIVER_NAME;DRIVER_REGISTRATION_HDR;DRIVER_REGISTRATION_FN" + "DRIVER_NAME;DRIVER_REGISTRATION_HDR;DRIVER_REGISTRATION_FN;COMPILER_TARGET_BACKEND;EXECUTABLE_FORMAT" "DEPS;EXCLUDED_TESTS;LABELS" ${ARGN} ) + # Omit tests for which the specified driver is not enabled. + string(TOUPPER ${_RULE_DRIVER_NAME} _UPPERCASE_DRIVER) + string(REPLACE "-" "_" _NORMALIZED_DRIVER ${_UPPERCASE_DRIVER}) + if(NOT DEFINED IREE_HAL_DRIVER_${_NORMALIZED_DRIVER}) + message(SEND_ERROR "Unknown driver '${_RULE_DRIVER_NAME}'. Check IREE_HAL_DRIVER_* options.") + endif() + if(NOT IREE_HAL_DRIVER_${_NORMALIZED_DRIVER}) + return() + endif() + list(APPEND _RULE_LABELS "driver=${_RULE_DRIVER_NAME}") + # Enable executable tests if a compiler target backend capable of producing + # executables compatible with the driver is provided and enabled. + set(_ENABLE_EXECUTABLE_TESTS OFF) + if(DEFINED _RULE_COMPILER_TARGET_BACKEND) + string(TOUPPER ${_RULE_COMPILER_TARGET_BACKEND} _UPPERCASE_TARGET_BACKEND) + string(REPLACE "-" "_" _NORMALIZED_TARGET_BACKEND ${_UPPERCASE_TARGET_BACKEND}) + if(NOT DEFINED IREE_TARGET_BACKEND_${_NORMALIZED_TARGET_BACKEND}) + message(SEND_ERROR "Unknown backend '${_RULE_COMPILER_TARGET_BACKEND}'. Check IREE_TARGET_BACKEND_* options.") + endif() + if(DEFINED IREE_HOST_BINARY_ROOT) + # If we're not building the host tools from source under this configuration, + # such as when cross compiling, then we can't easily check for which + # compiler target backends are enabled. Just assume all are enabled and only + # rely on the runtime HAL driver check above for filtering. + set(_ENABLE_EXECUTABLE_TESTS ON) + else() + # We are building the host tools, so check enabled compiler target backends. + if(IREE_TARGET_BACKEND_${_NORMALIZED_TARGET_BACKEND}) + set(_ENABLE_EXECUTABLE_TESTS ON) + endif() + endif() + endif() + + # Generate testdata if executable tests are enabled. + if(_ENABLE_EXECUTABLE_TESTS) + + set(_EXECUTABLES_TESTDATA_NAME "${_RULE_COMPILER_TARGET_BACKEND}_executables") + + set(_TRANSLATE_FLAGS + "-iree-mlir-to-hal-executable" + "-iree-hal-target-backends=${_RULE_COMPILER_TARGET_BACKEND}" + ) + if(ANDROID) + set(_TARGET_TRIPLE "aarch64-none-linux-android${ANDROID_PLATFORM_LEVEL}") + list(APPEND _TRANSLATE_FLAGS "--iree-llvm-target-triple=${_TARGET_TRIPLE}") + endif() + + # Skip if already created (multiple suites using the same compiler setting). + iree_package_name(_PACKAGE_NAME) + if(NOT TARGET ${_PACKAGE_NAME}_${_EXECUTABLES_TESTDATA_NAME}_c) + set(_EMBED_DATA_SOURCES "") + foreach(_FILE_NAME ${IREE_ALL_CTS_EXECUTABLE_SOURCES}) + # Note: this is an abuse of naming. We are not building a bytecode + # module, but this CMake rule already wraps iree-translate. + # We should add a new function like `iree_hal_executable()`. + iree_bytecode_module( + NAME + ${_RULE_COMPILER_TARGET_BACKEND}_${_FILE_NAME} + MODULE_FILE_NAME + "${_RULE_COMPILER_TARGET_BACKEND}_${_FILE_NAME}.bin" + SRC + "${IREE_ROOT_DIR}/iree/hal/cts/testdata/${_FILE_NAME}.mlir" + FLAGS + ${_TRANSLATE_FLAGS} + PUBLIC + TESTONLY + ) + list(APPEND _EMBED_DATA_SOURCES "${_RULE_COMPILER_TARGET_BACKEND}_${_FILE_NAME}.bin") + endforeach() + + iree_c_embed_data( + NAME + ${_EXECUTABLES_TESTDATA_NAME}_c + GENERATED_SRCS + ${_EMBED_DATA_SOURCES} + C_FILE_OUTPUT + "${_EXECUTABLES_TESTDATA_NAME}_c.c" + H_FILE_OUTPUT + "${_EXECUTABLES_TESTDATA_NAME}_c.h" + IDENTIFIER + "iree_cts_testdata_executables" + STRIP_PREFIX + "${_RULE_COMPILER_TARGET_BACKEND}_" + FLATTEN + PUBLIC + TESTONLY + ) + + endif() + + list(APPEND _RULE_DEPS + ::${_EXECUTABLES_TESTDATA_NAME}_c + ) + endif() + foreach(_TEST_NAME ${IREE_ALL_CTS_TESTS}) if("${_TEST_NAME}" IN_LIST _RULE_EXCLUDED_TESTS) continue() endif() + if("${_TEST_NAME}" IN_LIST IREE_EXECUTABLE_CTS_TESTS AND NOT _ENABLE_EXECUTABLE_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. @@ -55,6 +163,11 @@ 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}") + set(IREE_CTS_EXECUTABLE_FORMAT "${_RULE_EXECUTABLE_FORMAT}") + if(_ENABLE_EXECUTABLE_TESTS) + set(IREE_CTS_EXECUTABLES_TESTDATA_HDR "${_EXECUTABLES_TESTDATA_NAME}_c.h") + endif() + configure_file( "${IREE_ROOT_DIR}/iree/hal/cts/cts_test_template.cc.in" ${_TEST_SOURCE_NAME}
diff --git a/experimental/rocm/cts/CMakeLists.txt b/experimental/rocm/cts/CMakeLists.txt index 0f65682..e5d7d07 100644 --- a/experimental/rocm/cts/CMakeLists.txt +++ b/experimental/rocm/cts/CMakeLists.txt
@@ -6,11 +6,15 @@ iree_hal_cts_test_suite( DRIVER_NAME - vulkan + rocm DRIVER_REGISTRATION_HDR "experimental/rocm/registration/driver_module.h" DRIVER_REGISTRATION_FN "iree_hal_rocm_driver_module_register" + COMPILER_TARGET_BACKEND + "rocm" + EXECUTABLE_FORMAT + "\"PTXE\"" DEPS experimental::rocm::registration )
diff --git a/iree/hal/cts/CMakeLists.txt b/iree/hal/cts/CMakeLists.txt index 9e10a2e..dea7cfd 100644 --- a/iree/hal/cts/CMakeLists.txt +++ b/iree/hal/cts/CMakeLists.txt
@@ -12,12 +12,27 @@ "descriptor_set" "driver" "event" + "executable_cache" "executable_layout" "semaphore_submission" "semaphore" PARENT_SCOPE ) +# These tests use executables produced by the iree-translate compiler tool. +# If the compiler is disabled or a HAL driver implementation is not yet +# connected to a functional compiler target, these tests can be skipped. +set(IREE_EXECUTABLE_CTS_TESTS + "executable_cache" + PARENT_SCOPE +) + +# List of testdata/{name}.mlir source files. +set(IREE_ALL_CTS_EXECUTABLE_SOURCES + "executable_cache_test" + PARENT_SCOPE +) + iree_cc_library( NAME cts_test_base @@ -129,6 +144,18 @@ iree_cc_library( NAME + executable_cache_test_library + HDRS + "executable_cache_test.h" + DEPS + ::cts_test_base + iree::base + iree::hal + iree::testing::gtest +) + +iree_cc_library( + NAME semaphore_test_library HDRS "semaphore_test.h"
diff --git a/iree/hal/cts/cts_test_base.h b/iree/hal/cts/cts_test_base.h index 611926d..7f3599a 100644 --- a/iree/hal/cts/cts_test_base.h +++ b/iree/hal/cts/cts_test_base.h
@@ -11,6 +11,7 @@ #include <string> #include "iree/base/api.h" +#include "iree/base/string_view.h" #include "iree/hal/api.h" #include "iree/testing/gtest.h" #include "iree/testing/status_matchers.h" @@ -19,12 +20,18 @@ namespace hal { namespace cts { -// Leaf test binaries must implement this function, registering the driver -// that will be used with INSTANTIATE_TEST_SUITE_P. -// Multiple drivers _may_ be registered and used with parameterized test suite -// construction, but the expected use is 1 driver : 1 test suite. +// Registers the driver that will be used with INSTANTIATE_TEST_SUITE_P. +// Leaf test binaries must implement this function. iree_status_t register_test_driver(iree_hal_driver_registry_t* registry); +// Returns the executable format for the driver under test. +// Leaf test binaries must implement this function. +const char* get_test_executable_format(); + +// Returns a file's executable data for the driver under test. +// Leaf test binaries must implement this function. +iree_const_byte_span_t get_test_executable_data(iree_string_view_t file_name); + // Common setup for tests parameterized on driver names. class CtsTestBase : public ::testing::TestWithParam<std::string> { protected:
diff --git a/iree/hal/cts/cts_test_template.cc.in b/iree/hal/cts/cts_test_template.cc.in index 73dd0f2..be02a15 100644 --- a/iree/hal/cts/cts_test_template.cc.in +++ b/iree/hal/cts/cts_test_template.cc.in
@@ -10,6 +10,8 @@ #cmakedefine IREE_CTS_DRIVER_REGISTRATION_FN @IREE_CTS_DRIVER_REGISTRATION_FN@ #cmakedefine IREE_CTS_TEST_CLASS_NAME @IREE_CTS_TEST_CLASS_NAME@ #cmakedefine IREE_CTS_DRIVER_NAME "@IREE_CTS_DRIVER_NAME@" +#cmakedefine IREE_CTS_EXECUTABLE_FORMAT @IREE_CTS_EXECUTABLE_FORMAT@ +#cmakedefine IREE_CTS_EXECUTABLES_TESTDATA_HDR "@IREE_CTS_EXECUTABLES_TESTDATA_HDR@" // clang-format on #include IREE_CTS_TEST_FILE_PATH @@ -18,6 +20,10 @@ #include "iree/hal/cts/cts_test_base.h" #include "iree/testing/gtest.h" +#ifdef IREE_CTS_EXECUTABLES_TESTDATA_HDR +#include IREE_CTS_EXECUTABLES_TESTDATA_HDR +#endif + namespace iree { namespace hal { namespace cts { @@ -26,6 +32,28 @@ return IREE_CTS_DRIVER_REGISTRATION_FN(registry); } +const char* get_test_executable_format() { +#ifdef IREE_CTS_EXECUTABLE_FORMAT + return IREE_CTS_EXECUTABLE_FORMAT; +#else + return "UNDEFINED"; +#endif +} + +iree_const_byte_span_t get_test_executable_data(iree_string_view_t file_name) { +#ifdef IREE_CTS_EXECUTABLES_TESTDATA_HDR + const struct iree_file_toc_t* toc = iree_cts_testdata_executables_create(); + for (size_t i = 0; i < iree_cts_testdata_executables_size(); ++i) { + const auto& file = toc[i]; + if (iree_string_view_equal(file_name, iree_make_cstring_view(file.name))) { + return iree_make_const_byte_span(file.data, file.size); + } + } + // TODO(scotttodd): error handling / reporting? This a sharp edge. +#endif + return {NULL, 0}; +} + INSTANTIATE_TEST_SUITE_P(CTS, IREE_CTS_TEST_CLASS_NAME, ::testing::Values(IREE_CTS_DRIVER_NAME), GenerateTestName());
diff --git a/iree/hal/cts/executable_cache_test.h b/iree/hal/cts/executable_cache_test.h new file mode 100644 index 0000000..3801f2e --- /dev/null +++ b/iree/hal/cts/executable_cache_test.h
@@ -0,0 +1,86 @@ +// 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 + +#ifndef IREE_HAL_CTS_EXECUTABLE_CACHE_TEST_H_ +#define IREE_HAL_CTS_EXECUTABLE_CACHE_TEST_H_ + +#include "iree/base/api.h" +#include "iree/base/string_view.h" +#include "iree/hal/api.h" +#include "iree/hal/cts/cts_test_base.h" +#include "iree/testing/gtest.h" +#include "iree/testing/status_matchers.h" + +namespace iree { +namespace hal { +namespace cts { + +class executable_cache_test : public CtsTestBase {}; + +TEST_P(executable_cache_test, Create) { + iree_hal_executable_cache_t* executable_cache; + IREE_ASSERT_OK(iree_hal_executable_cache_create( + device_, iree_make_cstring_view("default"), &executable_cache)); + + iree_hal_executable_cache_release(executable_cache); +} + +TEST_P(executable_cache_test, CantPrepareUnknownFormat) { + iree_hal_executable_cache_t* executable_cache; + IREE_ASSERT_OK(iree_hal_executable_cache_create( + device_, iree_make_cstring_view("default"), &executable_cache)); + + EXPECT_FALSE(iree_hal_executable_cache_can_prepare_format( + executable_cache, /*caching_mode=*/0, iree_make_cstring_view("FOO?"))); + + iree_hal_executable_cache_release(executable_cache); +} + +TEST_P(executable_cache_test, PrepareExecutable) { + iree_hal_executable_cache_t* executable_cache; + IREE_ASSERT_OK(iree_hal_executable_cache_create( + device_, iree_make_cstring_view("default"), &executable_cache)); + + // Note: this layout must match the testdata executable. + iree_hal_descriptor_set_layout_t* descriptor_set_layout; + iree_hal_descriptor_set_layout_binding_t descriptor_set_layout_bindings[] = { + {0, IREE_HAL_DESCRIPTOR_TYPE_STORAGE_BUFFER}, + {1, IREE_HAL_DESCRIPTOR_TYPE_STORAGE_BUFFER}, + }; + IREE_ASSERT_OK(iree_hal_descriptor_set_layout_create( + device_, IREE_HAL_DESCRIPTOR_SET_LAYOUT_USAGE_TYPE_IMMUTABLE, + IREE_ARRAYSIZE(descriptor_set_layout_bindings), + descriptor_set_layout_bindings, &descriptor_set_layout)); + iree_hal_executable_layout_t* executable_layout; + IREE_ASSERT_OK(iree_hal_executable_layout_create( + device_, /*push_constants=*/0, /*set_layout_count=*/1, + &descriptor_set_layout, &executable_layout)); + + iree_hal_executable_spec_t executable_spec; + executable_spec.caching_mode = + IREE_HAL_EXECUTABLE_CACHING_MODE_ALIAS_PROVIDED_DATA; + executable_spec.executable_format = + iree_make_cstring_view(get_test_executable_format()); + executable_spec.executable_data = get_test_executable_data( + iree_make_cstring_view("executable_cache_test.bin")); + executable_spec.executable_layout_count = 1; + executable_spec.executable_layouts = &executable_layout; + + iree_hal_executable_t* executable; + IREE_ASSERT_OK(iree_hal_executable_cache_prepare_executable( + executable_cache, &executable_spec, &executable)); + + iree_hal_executable_release(executable); + iree_hal_executable_layout_release(executable_layout); + iree_hal_descriptor_set_layout_release(descriptor_set_layout); + iree_hal_executable_cache_release(executable_cache); +} + +} // namespace cts +} // namespace hal +} // namespace iree + +#endif // IREE_HAL_CTS_EXECUTABLE_CACHE_TEST_H_
diff --git a/iree/hal/cts/testdata/executable_cache_test.mlir b/iree/hal/cts/testdata/executable_cache_test.mlir new file mode 100644 index 0000000..0e0e73e --- /dev/null +++ b/iree/hal/cts/testdata/executable_cache_test.mlir
@@ -0,0 +1,37 @@ +// Bootstrapped from this source IR: +// +// func @abs(%input : tensor<f32>) -> (tensor<f32>) { +// %result = math.abs %input : tensor<f32> +// return %result : tensor<f32> +// } + +#executable_layout = #hal.executable.layout<push_constants = 0, sets = [ + #hal.descriptor_set.layout<0, bindings = [ + #hal.descriptor_set.binding<0, storage_buffer>, + #hal.descriptor_set.binding<1, storage_buffer> + ]> +]> + +hal.executable.source public @executable { + hal.executable.entry_point public @abs layout(#executable_layout) + + builtin.module { + func @abs() { + %c0 = arith.constant 0 : index + + %0 = hal.interface.binding.subspan set(0) binding(0) type(storage_buffer) offset(%c0) alignment(32) : !flow.dispatch.tensor<readonly:f32> + %1 = hal.interface.binding.subspan set(0) binding(1) type(storage_buffer) offset(%c0) alignment(32) : !flow.dispatch.tensor<writeonly:f32> + + %2 = flow.dispatch.tensor.load %0, offsets = [], sizes = [], strides = [] : !flow.dispatch.tensor<readonly:f32> -> tensor<f32> + %3 = linalg.init_tensor [] : tensor<f32> + %4 = linalg.generic {indexing_maps = [affine_map<() -> ()>, affine_map<() -> ()>], iterator_types = []} ins(%2 : tensor<f32>) outs(%3 : tensor<f32>) { + ^bb0(%arg0: f32, %arg1: f32): + %5 = math.abs %arg0 : f32 + linalg.yield %5 : f32 + } -> tensor<f32> + flow.dispatch.tensor.store %4, %1, offsets = [], sizes = [], strides = [] : tensor<f32> -> !flow.dispatch.tensor<writeonly:f32> + + return + } + } +}
diff --git a/iree/hal/cuda/cts/CMakeLists.txt b/iree/hal/cuda/cts/CMakeLists.txt index d0c6f59..520cd96 100644 --- a/iree/hal/cuda/cts/CMakeLists.txt +++ b/iree/hal/cuda/cts/CMakeLists.txt
@@ -11,6 +11,10 @@ "iree/hal/cuda/registration/driver_module.h" DRIVER_REGISTRATION_FN "iree_hal_cuda_driver_module_register" + COMPILER_TARGET_BACKEND + "cuda" + EXECUTABLE_FORMAT + "\"PTXE\"" DEPS iree::hal::cuda::registration EXCLUDED_TESTS
diff --git a/iree/hal/dylib/cts/CMakeLists.txt b/iree/hal/dylib/cts/CMakeLists.txt index 61c8efe..eb7337b 100644 --- a/iree/hal/dylib/cts/CMakeLists.txt +++ b/iree/hal/dylib/cts/CMakeLists.txt
@@ -4,8 +4,6 @@ # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -if(${IREE_HAL_DRIVER_DYLIB}) - iree_hal_cts_test_suite( DRIVER_NAME dylib @@ -13,14 +11,14 @@ "iree/hal/dylib/registration/driver_module.h" DRIVER_REGISTRATION_FN "iree_hal_dylib_driver_module_register" + COMPILER_TARGET_BACKEND + "dylib-llvm-aot" + EXECUTABLE_FORMAT + "\"embedded-elf-\" IREE_ARCH" DEPS iree::hal::dylib::registration ) -endif() - -if(${IREE_HAL_DRIVER_DYLIB_SYNC}) - iree_hal_cts_test_suite( DRIVER_NAME dylib-sync @@ -28,6 +26,10 @@ "iree/hal/dylib/registration/driver_module_sync.h" DRIVER_REGISTRATION_FN "iree_hal_dylib_sync_driver_module_register" + COMPILER_TARGET_BACKEND + "dylib-llvm-aot" + EXECUTABLE_FORMAT + "\"embedded-elf-\" IREE_ARCH" DEPS iree::hal::dylib::registration::sync EXCLUDED_TESTS @@ -36,5 +38,3 @@ "event" "semaphore_submission" ) - -endif()
diff --git a/iree/hal/vmvx/cts/CMakeLists.txt b/iree/hal/vmvx/cts/CMakeLists.txt index 7bc5db1..f85ae45 100644 --- a/iree/hal/vmvx/cts/CMakeLists.txt +++ b/iree/hal/vmvx/cts/CMakeLists.txt
@@ -4,8 +4,6 @@ # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -if(${IREE_HAL_DRIVER_VMVX}) - iree_hal_cts_test_suite( DRIVER_NAME vmvx @@ -13,14 +11,14 @@ "iree/hal/vmvx/registration/driver_module.h" DRIVER_REGISTRATION_FN "iree_hal_vmvx_driver_module_register" + COMPILER_TARGET_BACKEND + "vmvx" + EXECUTABLE_FORMAT + "\"vmvx-bytecode-fb\"" DEPS iree::hal::vmvx::registration ) -endif() - -if(${IREE_HAL_DRIVER_VMVX_SYNC}) - iree_hal_cts_test_suite( DRIVER_NAME vmvx-sync @@ -28,6 +26,10 @@ "iree/hal/vmvx/registration/driver_module_sync.h" DRIVER_REGISTRATION_FN "iree_hal_vmvx_sync_driver_module_register" + COMPILER_TARGET_BACKEND + "vmvx" + EXECUTABLE_FORMAT + "\"vmvx-bytecode-fb\"" DEPS iree::hal::vmvx::registration::sync EXCLUDED_TESTS @@ -36,5 +38,3 @@ "event" "semaphore_submission" ) - -endif()
diff --git a/iree/hal/vulkan/cts/CMakeLists.txt b/iree/hal/vulkan/cts/CMakeLists.txt index 7385754..0ca8b65 100644 --- a/iree/hal/vulkan/cts/CMakeLists.txt +++ b/iree/hal/vulkan/cts/CMakeLists.txt
@@ -11,6 +11,10 @@ "iree/hal/vulkan/registration/driver_module.h" DRIVER_REGISTRATION_FN "iree_hal_vulkan_driver_module_register" + COMPILER_TARGET_BACKEND + "vulkan-spirv" + EXECUTABLE_FORMAT + "\"SPVE\"" DEPS iree::hal::vulkan::registration )