From a0bee35cc54f42bae69a59776333371f04130eb6 Mon Sep 17 00:00:00 2001 From: Wisbendji Fimerlus Date: Mon, 26 Oct 2026 15:49:56 -0400 Subject: [PATCH 1/4] test: keep OpenVINO fixtures clean under strict Clippy Replace the bool::then filter_map with an equivalent filter and map. The existing fixture trips filter_map_bool_then under the pinned Clippy toolchain and prevents the required quality gate from running its tests. Preserve the selected CPU and GPU fixture libraries and all existing contract assertions. The fixture's 15 tests pass with strict lint enabled. Signed-off-by: Wisbendji Fimerlus --- xtask/tests/fedora_openvino_package_contract.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xtask/tests/fedora_openvino_package_contract.rs b/xtask/tests/fedora_openvino_package_contract.rs index 97b7b92..432bcb1 100644 --- a/xtask/tests/fedora_openvino_package_contract.rs +++ b/xtask/tests/fedora_openvino_package_contract.rs @@ -151,9 +151,8 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { ("gpu", options.omit_gpu_plugin), ] .into_iter() - .filter_map(|(device, omitted)| { - (!omitted).then(|| format!("libopenvino_intel_{device}_plugin.so")) - }) + .filter(|(_, omitted)| !omitted) + .map(|(device, _)| format!("libopenvino_intel_{device}_plugin.so")) .collect::>(); for library in &preserved_plugins { compile_shared( From a5b3533f2cfcea40b49acae6dbb7f1a20cc60f25 Mon Sep 17 00:00:00 2001 From: Wisbendji Fimerlus Date: Mon, 26 Oct 2026 15:49:57 -0400 Subject: [PATCH 2/4] native: accept both supported OpenVINO SDK versions Accept exactly OpenVINO 2026.2.0 or 2026.2.1 from the explicit SDK prefix. The candidate tools use 2026.2.1, while existing 0.1.1 SDK checks still use 2026.2.0. Keep all other versions rejected with an explicit diagnostic. Add configure regressions for both supported versions and an unsupported version. Both tests fail on the old configuration and pass with the fix. Signed-off-by: Wisbendji Fimerlus --- native/CMakeLists.txt | 17 ++- .../native_opensvino_version_contract.rs | 104 ++++++++++++++++++ 2 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 xtask/tests/native_opensvino_version_contract.rs diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 0407654..6934e46 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -50,7 +50,7 @@ find_file( INTEL_NPU_OPENVINO_CONFIG NAMES OpenVINOConfig.cmake PATHS "${INTEL_NPU_SDK_PREFIX_REAL}" - PATH_SUFFIXES openvino/runtime/cmake openvino/cmake lib64/cmake/openvino2026.2.0 + PATH_SUFFIXES openvino/runtime/cmake openvino/cmake lib64/cmake/openvino2026.2.0 lib64/cmake/openvino2026.2.1 NO_DEFAULT_PATH REQUIRED ) @@ -61,11 +61,22 @@ intel_npu_require_in_sdk("${INTEL_NPU_OPENVINO_CONFIG}" "OpenVINO package config get_filename_component(INTEL_NPU_OPENVINO_CONFIG_DIR "${INTEL_NPU_OPENVINO_CONFIG}" DIRECTORY) find_package( - OpenVINO 2026.2.0 EXACT - CONFIG REQUIRED + OpenVINO 2026.2.1 EXACT + CONFIG QUIET PATHS "${INTEL_NPU_OPENVINO_CONFIG_DIR}" NO_DEFAULT_PATH ) +if(NOT OpenVINO_FOUND) + find_package( + OpenVINO 2026.2.0 EXACT + CONFIG QUIET + PATHS "${INTEL_NPU_OPENVINO_CONFIG_DIR}" + NO_DEFAULT_PATH + ) +endif() +if(NOT OpenVINO_FOUND) + message(FATAL_ERROR "OpenVINO 2026.2.1 or 2026.2.0 required: found ${INTEL_NPU_OPENVINO_CONFIG}") +endif() get_target_property( INTEL_NPU_OPENVINO_RUNTIME openvino::runtime diff --git a/xtask/tests/native_opensvino_version_contract.rs b/xtask/tests/native_opensvino_version_contract.rs new file mode 100644 index 0000000..e6a4b18 --- /dev/null +++ b/xtask/tests/native_opensvino_version_contract.rs @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: Apache-2.0 + +//! Regression contract for the native SDK probe's OpenVINO version acceptance. +//! +//! The tools package builds against the 2026.2.1-1 providers while local SDK +//! checks against an installed 0.1.1 stack resolve OpenVINO 2026.2.0, so the +//! native configure step must accept exactly those two versions and refuse +//! any other one instead of silently taking whatever the SDK ships. + +use std::fs; +use std::path::{Path, PathBuf}; +use std::process::{Command, Output}; + +fn sdk_fixture(root: &Path, version: &str, config_rel: &str) -> PathBuf { + let sdk = root.join(format!("sdk-{version}")); + fs::create_dir_all(sdk.join("include/level_zero")).expect("level zero include"); + fs::write(sdk.join("include/level_zero/ze_api.h"), "").expect("level zero header"); + fs::create_dir_all(sdk.join("lib64")).expect("lib64"); + fs::write(sdk.join("lib64/libze_loader.so"), "").expect("level zero loader"); + let runtime = sdk.join(format!("lib64/libopenvino.so.{version}")); + fs::write(&runtime, "").expect("openvino runtime"); + let config_dir = sdk.join(config_rel); + fs::create_dir_all(&config_dir).expect("config dir"); + fs::write( + config_dir.join("OpenVINOConfig.cmake"), + format!( + "add_library(openvino::runtime SHARED IMPORTED)\n\ + set_target_properties(openvino::runtime PROPERTIES\n\ + IMPORTED_LOCATION \"{}\"\n\ + IMPORTED_LOCATION_RELEASE \"{}\")\n", + runtime.display(), + runtime.display() + ), + ) + .expect("openvino config"); + fs::write( + config_dir.join("OpenVINOConfigVersion.cmake"), + format!( + "set(PACKAGE_VERSION \"{version}\")\n\ + if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)\n\ + set(PACKAGE_VERSION_COMPATIBLE TRUE)\n\ + set(PACKAGE_VERSION_EXACT TRUE)\n\ + else()\n\ + set(PACKAGE_VERSION_COMPATIBLE FALSE)\n\ + endif()\n" + ), + ) + .expect("openvino config version"); + sdk +} + +fn configure_native(sdk: &Path) -> Output { + let source = Path::new(env!("CARGO_MANIFEST_DIR")).join("../native"); + let build = sdk.parent().expect("fixture parent").join(format!( + "build-{}", + sdk.file_name().expect("sdk name").to_string_lossy() + )); + Command::new("cmake") + .arg("-S") + .arg(&source) + .arg("-B") + .arg(&build) + .arg(format!("-DINTEL_NPU_SDK_PREFIX={}", sdk.display())) + .arg("-DBUILD_TESTING=OFF") + .output() + .expect("run cmake configure") +} + +#[test] +fn accepts_both_supported_opensvino_versions() { + for version in ["2026.2.1", "2026.2.0"] { + let root = tempfile::tempdir().expect("fixture directory"); + let sdk = sdk_fixture( + root.path(), + version, + &format!("lib64/cmake/openvino{version}"), + ); + let output = configure_native(&sdk); + assert!( + output.status.success(), + "configure must accept OpenVINO {version}\nstdout: {}\nstderr: {}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + } +} + +#[test] +fn refuses_unsupported_opensvino_version() { + let root = tempfile::tempdir().expect("fixture directory"); + // openvino/cmake is a searched suffix, so the version gate itself must + // reject this SDK rather than the directory-name gate hiding it. + let sdk = sdk_fixture(root.path(), "2026.2.2", "openvino/cmake"); + let output = configure_native(&sdk); + assert!( + !output.status.success(), + "configure must refuse OpenVINO 2026.2.2" + ); + let stderr = String::from_utf8_lossy(&output.stderr); + assert!( + stderr.contains("2026.2.1") && stderr.contains("2026.2.0"), + "refusal must name the accepted versions\nstderr: {stderr}" + ); +} From 2cf89b12c56ed840cd317664171927f38eb01970 Mon Sep 17 00:00:00 2001 From: Wisbendji Fimerlus Date: Mon, 26 Oct 2026 16:18:51 -0400 Subject: [PATCH 3/4] native: validate the selected OpenVINO SDK ABI Write the expected runtime SONAME from the accepted SDK version and use it for the native helper ELF audit. This lets the standard runner validate 2026.2.1 without accepting a mismatched dependency or weakening hardening. Reject missing or unsupported ABI metadata. Update the controlled-PATH fixture and check that its RPATH-negative case reaches the ELF rejection. Cover both supported ABIs and mismatched, missing and unknown metadata. Signed-off-by: Wisbendji Fimerlus --- native/CMakeLists.txt | 8 ++ scripts/check-native.sh | 8 +- scripts/ci/test_native_sdk_abi.py | 77 +++++++++++++++++++ .../native_opensvino_version_contract.rs | 12 +++ xtask/tests/native_quality_script_contract.rs | 6 ++ 5 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 scripts/ci/test_native_sdk_abi.py diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 6934e46..6481a60 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -93,6 +93,14 @@ if(NOT INTEL_NPU_OPENVINO_RUNTIME) message(FATAL_ERROR "OpenVINO runtime has no Release or RelWithDebInfo library") endif() intel_npu_require_in_sdk("${INTEL_NPU_OPENVINO_RUNTIME}" "OpenVINO runtime") +if(OpenVINO_VERSION VERSION_EQUAL "2026.2.1") + set(INTEL_NPU_OPENVINO_SONAME "libopenvino.so.2621") +elseif(OpenVINO_VERSION VERSION_EQUAL "2026.2.0") + set(INTEL_NPU_OPENVINO_SONAME "libopenvino.so.2620") +else() + message(FATAL_ERROR "Unsupported OpenVINO SDK version: ${OpenVINO_VERSION}") +endif() +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/openvino-soname.txt" "${INTEL_NPU_OPENVINO_SONAME}\n") get_filename_component( INTEL_NPU_OPENVINO_RUNTIME_DIR "${INTEL_NPU_OPENVINO_RUNTIME}" diff --git a/scripts/check-native.sh b/scripts/check-native.sh index 1f572db..5467272 100755 --- a/scripts/check-native.sh +++ b/scripts/check-native.sh @@ -98,5 +98,11 @@ check_elf() { esac } +openvino_soname=$(/usr/bin/cat "$build_directory/openvino-soname.txt") || fail "OpenVINO ABI metadata cannot be read" +case "$openvino_soname" in + libopenvino.so.2620|libopenvino.so.2621) ;; + *) fail "OpenVINO ABI metadata is unsupported" ;; +esac + check_elf "$build_directory/intel-npu-level-zero-probe" "libze_loader.so.1" -check_elf "$build_directory/intel-npu-openvino-probe" "libopenvino.so.2620" +check_elf "$build_directory/intel-npu-openvino-probe" "$openvino_soname" diff --git a/scripts/ci/test_native_sdk_abi.py b/scripts/ci/test_native_sdk_abi.py new file mode 100644 index 0000000..5cc65d4 --- /dev/null +++ b/scripts/ci/test_native_sdk_abi.py @@ -0,0 +1,77 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Exercise the native runner's ABI check with real ELF files and stub builds.""" +import os +from pathlib import Path +import subprocess +import tempfile +import unittest + +ROOT = Path(__file__).resolve().parents[2] + + +class NativeSdkAbi(unittest.TestCase): + def run_case(self, metadata, linked="2620"): + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + sdk, build, fixtures, commands = (root / name for name in ["sdk", "build", "fixtures", "bin"]) + for path in [sdk, build, fixtures, commands]: + path.mkdir() + source = root / "source.c" + source.write_text("int fixture_symbol(void) { return 0; }\n") + main = root / "main.c" + main.write_text("extern int fixture_symbol(void); int main(void) { return fixture_symbol(); }\n") + for name, soname in [("intel-npu-level-zero-probe", "libze_loader.so.1"), + ("intel-npu-openvino-probe", "libopenvino.so." + linked)]: + library = root / soname + subprocess.run(["cc", "-shared", "-fPIC", str(source), "-Wl,-soname," + soname, + "-o", str(library)], check=True, capture_output=True) + subprocess.run(["cc", "-fPIE", "-pie", "-Wl,-z,relro,-z,now", str(main), str(library), + "-o", str(fixtures / name)], check=True, capture_output=True) + cmake = commands / "cmake" + cmake.write_text("""#!/usr/bin/python3 +import os +from pathlib import Path +import shutil +import sys +args = sys.argv[1:] +if args[0] == '--build': + for name in ['intel-npu-level-zero-probe', 'intel-npu-openvino-probe']: + shutil.copy2(Path(os.environ['FIXTURES']) / name, Path(args[1]) / name) +else: + build = Path(args[args.index('-B') + 1]) + if os.environ['ABI_METADATA'] != 'MISSING': + (build / 'openvino-soname.txt').write_text(os.environ['ABI_METADATA'] + '\\n') +""") + cmake.chmod(0o755) + ctest = commands / "ctest" + ctest.write_text("#!/bin/sh\nexit 0\n") + ctest.chmod(0o755) + env = dict(os.environ, PATH=str(commands) + os.pathsep + os.environ["PATH"], + FIXTURES=str(fixtures), ABI_METADATA=metadata) + return subprocess.run(["sh", str(ROOT / "scripts/check-native.sh"), str(sdk), str(build)], + env=env, capture_output=True, text=True, timeout=30) + + def test_accepts_2620_sdk_abi(self): + result = self.run_case("libopenvino.so.2620") + self.assertEqual(result.returncode, 0, result.stderr) + + def test_accepts_2621_sdk_abi(self): + result = self.run_case("libopenvino.so.2621", linked="2621") + self.assertEqual(result.returncode, 0, result.stderr) + + def test_rejects_wrong_linked_abi(self): + result = self.run_case("libopenvino.so.2621", linked="2620") + self.assertNotEqual(result.returncode, 0) + self.assertIn("required direct dependency", result.stderr) + + def test_rejects_unknown_abi_metadata(self): + result = self.run_case("libopenvino.so.9999") + self.assertNotEqual(result.returncode, 0) + + def test_rejects_missing_abi_metadata(self): + result = self.run_case("MISSING") + self.assertNotEqual(result.returncode, 0) + + +if __name__ == "__main__": + unittest.main() diff --git a/xtask/tests/native_opensvino_version_contract.rs b/xtask/tests/native_opensvino_version_contract.rs index e6a4b18..4351009 100644 --- a/xtask/tests/native_opensvino_version_contract.rs +++ b/xtask/tests/native_opensvino_version_contract.rs @@ -82,6 +82,18 @@ fn accepts_both_supported_opensvino_versions() { String::from_utf8_lossy(&output.stdout), String::from_utf8_lossy(&output.stderr) ); + let expected = if version == "2026.2.1" { + "2621" + } else { + "2620" + }; + let metadata = root + .path() + .join(format!("build-sdk-{version}/openvino-soname.txt")); + assert_eq!( + fs::read_to_string(metadata).expect("selected SDK ABI metadata"), + format!("libopenvino.so.{expected}\n") + ); } } diff --git a/xtask/tests/native_quality_script_contract.rs b/xtask/tests/native_quality_script_contract.rs index bf46b62..d87f3a0 100644 --- a/xtask/tests/native_quality_script_contract.rs +++ b/xtask/tests/native_quality_script_contract.rs @@ -76,6 +76,7 @@ else done [ -n "$build" ] printf '%s\n' configured > "$build/.fake-configured" + printf '%s\n' libopenvino.so.2620 > "$build/openvino-soname.txt" fi "#, ); @@ -193,5 +194,10 @@ printf '\n' >> "$TRACE_PATH" .output() .expect("execute RPATH-negative gate"); assert!(!bad.status.success()); + assert!( + String::from_utf8_lossy(&bad.stderr).contains("RPATH or RUNPATH"), + "RPATH-negative case must reach the ELF check: {}", + String::from_utf8_lossy(&bad.stderr) + ); } } From eb951848f2989e3089b9c29e59d2bacea027deed Mon Sep 17 00:00:00 2001 From: Wisbendji Fimerlus Date: Mon, 26 Oct 2026 16:18:51 -0400 Subject: [PATCH 4/4] packaging: stage the OpenVINO 2026.2.1 candidate Pin OpenVINO 2026.2.1 and the RC2 NPU compiler source, retaining the checked unbounded-Reshape guard. Align the candidate manifest, provider paths, tools package contracts and generated candidate release with 0.2.0. The manifest remains bound to the retained release-1 provider artifacts. Preserve the historical changelog entries and leave production profiles unchanged. These source changes do not install or promote the candidate. Signed-off-by: Wisbendji Fimerlus --- packaging/fedora/44/installed-manifest.toml | 120 ++++++++-------- packaging/fedora/44/package-gate.py | 4 +- packaging/fedora/44/provider-sources.toml | 14 +- .../44/rpm/intel-npu-stack/check-packages.py | 12 +- .../intel-npu-stack-tools.spec | 20 ++- .../intel-npu-stack/test-package-contract.py | 12 +- packaging/fedora/44/rpm/openvino/SOURCES.md | 15 +- .../44/rpm/openvino/check-install-layout.py | 4 +- .../rpm/openvino/check-installed-compiler.py | 4 +- .../openvino/check-unbounded-reshape-guard.py | 18 +++ .../fedora/44/rpm/openvino/openvino.spec | 19 ++- ...check-unbounded-reshape-input-bounds.patch | 35 +++++ .../fedora/44/test-profile-generation.py | 15 +- xtask/src/fedora_openvino_package.rs | 14 +- xtask/src/fedora_profile.rs | 38 ++--- .../tests/fedora_openvino_package_contract.rs | 136 +++++++++--------- .../fixtures/lunar-lake-x86_64-candidate.toml | 32 ++--- .../tests/openvino_install_layout_contract.rs | 8 +- 18 files changed, 301 insertions(+), 219 deletions(-) create mode 100644 packaging/fedora/44/rpm/openvino/check-unbounded-reshape-guard.py create mode 100644 packaging/fedora/44/rpm/openvino/patches/0015-check-unbounded-reshape-input-bounds.patch diff --git a/packaging/fedora/44/installed-manifest.toml b/packaging/fedora/44/installed-manifest.toml index a0d80a1..9f04f28 100644 --- a/packaging/fedora/44/installed-manifest.toml +++ b/packaging/fedora/44/installed-manifest.toml @@ -1,24 +1,24 @@ # SPDX-License-Identifier: Apache-2.0 schema_version = 1 profile_id = "fedora-44-lunar-lake-x86_64" -stack_release = "0.1.0" +stack_release = "0.2.0" status = "candidate" reboot_required = true -source_lock_sha256 = "54cfdc2e998b446ba123933476bd4c8fb57a638d970cc1db67e2bb2416876ab7" +source_lock_sha256 = "3701e9913758f724998dc9b201a5a3d694257d5c3db65464609bbe70a313e378" [[providers]] name = "intel-npu-compiler" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "intel-npu-compiler-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "6479009ffffc2d96f6a63c5bfb96f340c90df9163888c9feac10853e8a1820fa" +rpm_filename = "intel-npu-compiler-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "b23747b356f5c5bf9d1a91a2d821dc51d5cb425d2907cd2ef444666dab19b0a6" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause) AND (Apache-2.0 WITH LLVM-exception) AND NCSA AND BSD-2-Clause AND ISC AND Spencer-94 AND Unicode-DFS-2015 AND LicenseRef-LLVM-MD5" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler.so" -sha256 = "80211ba1c8bc31a693542a853dfdd0a9e66158e6d039c55421559ec3abf298e0" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler.so" +sha256 = "75c20d701d54ab05d8b2d6a0d6f0095c8b560664671fc7b89e18dcc479de1ced" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler_loader.so" -sha256 = "aeb981a054369e57f0a458b837eb8aad3ef157a8786830e25896ab1979e210ef" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler_loader.so" +sha256 = "95103389cadb22f06987f549449de1d88c930585c782a690584b45b9e045f9c0" [[providers]] name = "intel-npu-driver" @@ -44,69 +44,69 @@ sha256 = "cdfe2ebd66aaec21d896134c93d82d60de2d8eede75a2c62898aeb9006e5a26f" [[providers]] name = "libopenvino-ir-frontend" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "libopenvino-ir-frontend-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "a308dbe87199950b3bcbff833b5055eb05277c110e4319157d1cfa03291622a8" +rpm_filename = "libopenvino-ir-frontend-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "2ee3a30bf624827c7f977d57037edd4b9c54a3ab8ab4189b96a8f2298a74ca8c" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/libopenvino_ir_frontend.so.2026.2.0" -sha256 = "4fa3fde5c41d595236218fa28dc70c6511783ffd49f985ee61c0fc1bd9df982d" +path = "/usr/lib64/libopenvino_ir_frontend.so.2026.2.1" +sha256 = "7f1fc805bafbd90ba1a73e973b09b3b69da9f33deebd9b6ccb833fa4d3f5431d" [[providers]] name = "libopenvino-onnx-frontend" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "libopenvino-onnx-frontend-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "31657a6e29c4f6a405e58e49fe582fd57e1c46a504cbcb9b3e9b4f94e8fc1120" +rpm_filename = "libopenvino-onnx-frontend-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "1e195d7e261ab219026e1fcc7db28b853234b8ab7240f997ad0a203521507cf7" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/libopenvino_onnx_frontend.so.2026.2.0" -sha256 = "69aee2c7589656f57ffd38c1ba95480e334c6a264c3b41c6ed2df034143abf68" +path = "/usr/lib64/libopenvino_onnx_frontend.so.2026.2.1" +sha256 = "d32c762615683baa1e7ab23314bacd7482f14e094c09b5f3dcd4974125ed2ebf" [[providers]] name = "libopenvino-paddle-frontend" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "libopenvino-paddle-frontend-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "8d3b06e55278f325bbe756b3aa91ba4297094d25ac472ff2637a4f85fde1a0ad" +rpm_filename = "libopenvino-paddle-frontend-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "f74b2b946a1a522e89684d9d55e909d198d27b70574af1cd11f06282772f06e8" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/libopenvino_paddle_frontend.so.2026.2.0" -sha256 = "b7e341fcb998b2bc7dd3bd4625110bfa8da23f6184e6c0093c9cfefcfaaf26d6" +path = "/usr/lib64/libopenvino_paddle_frontend.so.2026.2.1" +sha256 = "383c183f7b02fa54f0cf408cb32af53e11883bd71a9dde634561985a8a887e8e" [[providers]] name = "libopenvino-pytorch-frontend" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "libopenvino-pytorch-frontend-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "54ea520454f7782ece6055eb0a8ebd11e4dd52c538d26f61406044ce69392f47" +rpm_filename = "libopenvino-pytorch-frontend-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "e03c0572ecbde4d7b2728f65c43781908475f7f17d7ed3abbb5d26d5fadd16da" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/libopenvino_pytorch_frontend.so.2026.2.0" -sha256 = "4ecc0b9e7a4505a1165ed406af34049db6c21644972ac23db5a45d968fc493d9" +path = "/usr/lib64/libopenvino_pytorch_frontend.so.2026.2.1" +sha256 = "48d7ca02fcbee8e8d6a3e98fe43af79c47e1b571e937159f6dc759abfc44f091" [[providers]] name = "libopenvino-tensorflow-frontend" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "libopenvino-tensorflow-frontend-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "c217a6c2197fdd0d411a74ebfa3987ef3ed23ec04833861c43bacde37c384bd9" +rpm_filename = "libopenvino-tensorflow-frontend-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "f92f6aa71f27b4826cb8766c4b4bfa6f0eccee5a26dc37991bd76b6fa7c3d80c" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/libopenvino_tensorflow_frontend.so.2026.2.0" -sha256 = "fa3a4e9edfb408379ed731c93eb5ab7248485def3df727cae58105d0559f9788" +path = "/usr/lib64/libopenvino_tensorflow_frontend.so.2026.2.1" +sha256 = "42ee551ce3de0e6cc633ae689d66a5fb30a4a4b7cc84b21f83a10e27931b4b12" [[providers]] name = "libopenvino-tensorflow-lite-frontend" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "libopenvino-tensorflow-lite-frontend-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "6bba2040a9e74ce3f5cdb60ccc587ed61b04c1accbdc890e5e9df746ee0cf7ed" +rpm_filename = "libopenvino-tensorflow-lite-frontend-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "bb8422862f68a05b47de024eb1665b2e1bc445d3e8ebae72e93d7c5792a72960" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/libopenvino_tensorflow_lite_frontend.so.2026.2.0" -sha256 = "73b818252af535c93f697363ccbbea4e8b0ac5c40a1e829d2a47dc6011103e6e" +path = "/usr/lib64/libopenvino_tensorflow_lite_frontend.so.2026.2.1" +sha256 = "4c5b17ea4c7729137cc4f37419c9fa9cfe54ab101695a0857b162577c6d22096" [[providers]] name = "oneapi-level-zero" @@ -127,40 +127,40 @@ sha256 = "cb40020b63fba2ce06dd24d86b0379ecb3deb46e1e0aa7bc78ecdae1d529db17" [[providers]] name = "openvino" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "openvino-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "32d488fac4102d95e6a5623a25add0b951bb22c99b7fa318bef700eb01685a50" +rpm_filename = "openvino-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "6b21decd0fd9a9b869786f292fc666673c711994dafc54a134edd49a88e983cc" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/libopenvino.so.2026.2.0" -sha256 = "a7cade50be53141a7733e4c94522fc030bcb331c92ceb093c4dfb79bd0169757" +path = "/usr/lib64/libopenvino.so.2026.2.1" +sha256 = "c88fbb03e1eba6ec1f84ab60e1fbf1df343469d10143b035f1e68478ae7f73a6" [[providers.files]] -path = "/usr/lib64/libopenvino_c.so.2026.2.0" -sha256 = "1514c68ac22d12c04ea9088d023666fdf4f14a233f46b16d79a5900df48d1b95" +path = "/usr/lib64/libopenvino_c.so.2026.2.1" +sha256 = "2874084046c324bd8e18d3e2771c62f4075910a123888b5d000958eb36764f18" [[providers]] name = "openvino-plugins" -nevr = "0:2026.2.0-2.intelnpu.fc44" +nevr = "0:2026.2.1-1.intelnpu.fc44" arch = "x86_64" -rpm_filename = "openvino-plugins-2026.2.0-2.intelnpu.fc44.x86_64.rpm" -rpm_sha256 = "f0a85349cdc71208b623c4dfde0a1cce8efe444fe246d981f50deb485fb9eecc" +rpm_filename = "openvino-plugins-2026.2.1-1.intelnpu.fc44.x86_64.rpm" +rpm_sha256 = "b65db4a9409ea6ee002ba532371457e4ad3dcd7bf651e552d0da73e826b3c05f" license = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/cache.json" +path = "/usr/lib64/openvino-2026.2.1/cache.json" sha256 = "0b2ad2a99516a3411ce3fef274e8ae2880b41a6f00c9bac6768cd4a94b87c41c" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_auto_plugin.so" -sha256 = "712f2544d69cbd14feabb85a874d90c63fc6d11049ee843a9e391c6570f3b0ac" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_auto_plugin.so" +sha256 = "0772f409d80caef2610c829541af3aaf25380e30da0499a522add1f629b028db" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_hetero_plugin.so" -sha256 = "22190243eb94ba685c7487b96164e24dbd7be7d85be6d2da0027dad6c2bd3cdd" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_hetero_plugin.so" +sha256 = "eea13817f0da4e04c95a35c2580399a93e526038ea3b8a6c39bfa4bef458e66a" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_cpu_plugin.so" -sha256 = "eda5d7b83b5595c6651caf45c68c2b745f22c1b20a26156c346308178b0838ba" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_cpu_plugin.so" +sha256 = "fa47affa46b208453fb8a1aef22fbbc9a0c84bd7fc98a649a3b351fb61370a37" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_gpu_plugin.so" -sha256 = "735919daf0e7c88fa2f4fea00e199496859cc640fe37774162e7ffc85dfb9573" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_gpu_plugin.so" +sha256 = "eb17e2afef4814891eeaf688f254265c5c7c8dbce61142f40fd3e368c8dcf53a" [[providers.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so" -sha256 = "f42910f012b331002104934999edc10d5c54b6e154ca909fcd89a29fc531c251" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so" +sha256 = "8c36e7618aaa81480f859a24e67d91b02f3870914d83d2fbd88c710ad1908233" diff --git a/packaging/fedora/44/package-gate.py b/packaging/fedora/44/package-gate.py index e3bb820..9b462e6 100644 --- a/packaging/fedora/44/package-gate.py +++ b/packaging/fedora/44/package-gate.py @@ -26,7 +26,7 @@ RECIPES = {'firmware': ('intel-npu-stack-firmware', '1.38.0-1.intelnpu.fc44', 'noarch'), 'driver': ('intel-npu-driver', '1.38.0-1.intelnpu.fc44', 'x86_64'), 'level-zero': ('oneapi-level-zero', '1.32.0-1.intelnpu.fc44', 'x86_64'), - 'openvino': ('openvino', '2026.2.0-2.intelnpu.fc44', 'x86_64')} + 'openvino': ('openvino', '2026.2.1-1.intelnpu.fc44', 'x86_64')} def require(value, message): @@ -300,7 +300,7 @@ def orchestrate(args): for phase, build_name in [('prepare', ''), ('build', 'build1'), ('build', 'build2'), ('compare', '')]: image = args.builder_image if phase == 'build' else args.audit_image command = [args.runtime, 'run', '--pull=never', '--restart=no', '--network=none', '--cpus='+str(args.jobs), - '--cpuset-cpus='+args.cpuset, '--memory=22g', '--memory-swap=30g', '--user='+str(os.getuid())+':'+str(os.getgid()), + '--cpuset-cpus='+args.cpuset, '--memory=22g', '--memory-swap=52g', '--user='+str(os.getuid())+':'+str(os.getgid()), '--cap-drop=ALL', '--security-opt=no-new-privileges', '--read-only', '--tmpfs', '/tmp:rw,nosuid,nodev,size=1g,mode=1777'] if args.runtime == 'podman': command += ['--userns=keep-id'] diff --git a/packaging/fedora/44/provider-sources.toml b/packaging/fedora/44/provider-sources.toml index 1c7a7d2..e38e81c 100644 --- a/packaging/fedora/44/provider-sources.toml +++ b/packaging/fedora/44/provider-sources.toml @@ -189,10 +189,10 @@ name = "npu-compiler" role = "npu_compiler" kind = "git_annotated_tag" url = "https://github.com/openvinotoolkit/npu_compiler.git" -tag = "npu_ud_2026_28_rc1" -tag_object = "77a77b017875b42ba41f4ffeba2a742f495c0c88" -commit = "6a7a7c531f54baed1dddfda1b80299413c4c6943" -archive_sha256 = "e8e23e1c66de83756466b646f315fa0a163bbed3340d0343c5e1b66b5c665dfd" +tag = "npu_ud_2026_28_rc2" +tag_object = "b24ca143d53f6dd5242435e21ee18099beee294c" +commit = "deb423b11b00af945fa788c9d38c51e30f0cf3d5" +archive_sha256 = "4d78b31db20d8595c0ff60ff34bf5df1ebc8f0162d2f37ba4efcf77d9ea2d555" license_expression = "Apache-2.0 AND MIT AND (Apache-2.0 WITH LLVM-exception)" license_files = [ "packaging/fedora/44/licenses/npu-compiler-LICENSE", @@ -270,9 +270,9 @@ name = "openvino" role = "inference_runtime" kind = "git_tag" url = "https://github.com/openvinotoolkit/openvino.git" -tag = "2026.2.0" -commit = "52ddc07385712456dd9f8c5ecf05d7e49c6da329" -archive_sha256 = "17c12aef94919e9a70a33a02fe7c93d51f9017cba10ea218c4624ac94d45d099" +tag = "2026.2.1" +commit = "ede283a88e35465f0d680dabbf1f44080f8fc387" +archive_sha256 = "b4ccf3698ba40ffc0a965f6a46c2bada0e6c24106112fdd552a86fcc9adde99a" license_expression = "Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause)" license_files = [ "packaging/fedora/44/licenses/openvino-LICENSE", diff --git a/packaging/fedora/44/rpm/intel-npu-stack/check-packages.py b/packaging/fedora/44/rpm/intel-npu-stack/check-packages.py index f729b28..3ecdc83 100644 --- a/packaging/fedora/44/rpm/intel-npu-stack/check-packages.py +++ b/packaging/fedora/44/rpm/intel-npu-stack/check-packages.py @@ -37,16 +37,16 @@ def sha(path): and manifest.get('reboot_required') is True, 'manifest candidate/activation policy') required = { 'intel-npu-stack': { - ('intel-npu-stack-tools(x86-64)', '=', '0.1.0-3.intelnpu.fc44'), + ('intel-npu-stack-tools(x86-64)', '=', '0.2.0-3.intelnpu.fc44'), ('intel-npu-driver(x86-64)', '=', '1.38.0-1.intelnpu.fc44'), ('intel-npu-stack-firmware', '=', '1.38.0-1.intelnpu.fc44'), ('oneapi-level-zero(x86-64)', '=', '1.32.0-1.intelnpu.fc44'), - ('openvino(x86-64)', '=', '2026.2.0-2.intelnpu.fc44'), - ('openvino-plugins(x86-64)', '=', '2026.2.0-2.intelnpu.fc44'), - ('intel-npu-compiler(x86-64)', '=', '2026.2.0-2.intelnpu.fc44'), + ('openvino(x86-64)', '=', '2026.2.1-1.intelnpu.fc44'), + ('openvino-plugins(x86-64)', '=', '2026.2.1-1.intelnpu.fc44'), + ('intel-npu-compiler(x86-64)', '=', '2026.2.1-1.intelnpu.fc44'), }, 'intel-npu-stack-tools': { - ('openvino(x86-64)', '=', '2026.2.0-2.intelnpu.fc44'), + ('openvino(x86-64)', '=', '2026.2.1-1.intelnpu.fc44'), ('oneapi-level-zero(x86-64)', '=', '1.32.0-1.intelnpu.fc44'), }, } @@ -69,7 +69,7 @@ def sha(path): require(name in required and name not in packages, 'exact two distinct package identities') packages.add(name) expected_arch = 'noarch' if name == 'intel-npu-stack' else 'x86_64' - require(nevr == '0:0.1.0-3.intelnpu.fc44' and arch == expected_arch and algorithm == '8', 'RPM version/arch/SHA256') + require(nevr == '0:0.2.0-3.intelnpu.fc44' and arch == expected_arch and algorithm == '8', 'RPM version/arch/SHA256') for option in ['--scripts', '--triggers', '--filetriggers']: require(not query(rpm, option).strip(), 'script-free package: ' + name) relations = set() diff --git a/packaging/fedora/44/rpm/intel-npu-stack/intel-npu-stack-tools.spec b/packaging/fedora/44/rpm/intel-npu-stack/intel-npu-stack-tools.spec index 15625e6..7863904 100644 --- a/packaging/fedora/44/rpm/intel-npu-stack/intel-npu-stack-tools.spec +++ b/packaging/fedora/44/rpm/intel-npu-stack/intel-npu-stack-tools.spec @@ -4,7 +4,7 @@ %global _vpath_srcdir native Name: intel-npu-stack-tools -Version: 0.1.0 +Version: 0.2.0 Release: 3.intelnpu.fc44 Summary: Read-only Intel NPU stack status and diagnostic tools License: Apache-2.0 AND Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-3.0 AND (Apache-2.0 WITH LLVM-exception) @@ -22,11 +22,11 @@ BuildRequires: gcc-c++ = 16.2.1-2.fc44 BuildRequires: ninja-build = 1.13.2-2.fc44 BuildRequires: python3 = 3.14.7-1.fc44 BuildRequires: oneapi-level-zero-devel = 1.28.6-1.fc44 -BuildRequires: openvino-devel = 2026.2.0-2.intelnpu.fc44 +BuildRequires: openvino-devel = 2026.2.1-1.intelnpu.fc44 BuildRequires: util-linux-core = 2.41.5-1.fc44 Requires: oneapi-level-zero%{?_isa} = 1.32.0-1.intelnpu.fc44 -Requires: openvino%{?_isa} = 2026.2.0-2.intelnpu.fc44 +Requires: openvino%{?_isa} = 2026.2.1-1.intelnpu.fc44 %description Read-only status CLI, isolated native probes, documentation and a manifest @@ -41,9 +41,9 @@ Requires: intel-npu-stack-tools(x86-64) = %{version}-%{release} Requires: intel-npu-driver(x86-64) = 1.38.0-1.intelnpu.fc44 Requires: intel-npu-stack-firmware = 1.38.0-1.intelnpu.fc44 Requires: oneapi-level-zero(x86-64) = 1.32.0-1.intelnpu.fc44 -Requires: openvino(x86-64) = 2026.2.0-2.intelnpu.fc44 -Requires: openvino-plugins(x86-64) = 2026.2.0-2.intelnpu.fc44 -Requires: intel-npu-compiler(x86-64) = 2026.2.0-2.intelnpu.fc44 +Requires: openvino(x86-64) = 2026.2.1-1.intelnpu.fc44 +Requires: openvino-plugins(x86-64) = 2026.2.1-1.intelnpu.fc44 +Requires: intel-npu-compiler(x86-64) = 2026.2.1-1.intelnpu.fc44 %description -n intel-npu-stack Metadata-only package selecting the exact candidate provider versions. @@ -88,7 +88,7 @@ cp -pr LICENSE NOTICE vendor-licenses rust-stdlib-licenses %{buildroot}%{_datadi hardlink -t %{buildroot}%{_datadir}/licenses/%{name} %check -test "$(target/release/intel-npu-stack version)" = '0.1.0' +test "$(target/release/intel-npu-stack version)" = '0.1.1' ctest --test-dir %{__cmake_builddir} --output-on-failure --no-tests=error %files -n intel-npu-stack @@ -104,6 +104,12 @@ ctest --test-dir %{__cmake_builddir} --output-on-failure --no-tests=error %{_datadir}/intel-npu-stack/installed-manifest.toml %changelog +* Tue Oct 06 2026 Wisbendji Fimerlus - 0.2.0-3.intelnpu.fc44 +- Move the tools and metapackage to 0.2.0-3 on the 2026.2.1-1 provider set: + the openvino 2026.2.1-1 rebuild whose compiler subpackage pins the 1.38.0 + driver and its plugins. The CLI keeps the workspace 0.1.1 version, so + %check asserts that output while the package contract fixtures expect + the 0.2.0-3 NEVR surface. * Sat Sep 19 2026 Wisbendji Fimerlus - 0.1.0-3.intelnpu.fc44 - Keep native probe JSON separate from SDK stdout and shutdown diagnostics. * Tue Sep 15 2026 Intel NPU Stack maintainers - 0.1.0-2.intelnpu.fc44 diff --git a/packaging/fedora/44/rpm/intel-npu-stack/test-package-contract.py b/packaging/fedora/44/rpm/intel-npu-stack/test-package-contract.py index 80cd118..a6de2bb 100644 --- a/packaging/fedora/44/rpm/intel-npu-stack/test-package-contract.py +++ b/packaging/fedora/44/rpm/intel-npu-stack/test-package-contract.py @@ -36,24 +36,24 @@ def case(mutation): spec = root / 'SPECS/fixture.spec' spec.write_text('''%global debug_package %{nil} Name: intel-npu-stack-tools -Version: 0.1.0 +Version: 0.2.0 Release: 3.intelnpu.fc44 Summary: Contract fixture License: Apache-2.0 -Requires: openvino(x86-64) = 2026.2.0-2.intelnpu.fc44 +Requires: openvino(x86-64) = 2026.2.1-1.intelnpu.fc44 Requires: oneapi-level-zero(x86-64) = 1.32.0-1.intelnpu.fc44 %description Tool fixture. %package -n intel-npu-stack Summary: Metadata fixture BuildArch: noarch -Requires: intel-npu-stack-tools(x86-64) = 0.1.0-3.intelnpu.fc44 +Requires: intel-npu-stack-tools(x86-64) = 0.2.0-3.intelnpu.fc44 Requires: intel-npu-driver(x86-64) = ''' + requirement + '''-1.intelnpu.fc44 Requires: intel-npu-stack-firmware = 1.38.0-1.intelnpu.fc44 Requires: oneapi-level-zero(x86-64) = 1.32.0-1.intelnpu.fc44 -Requires: openvino(x86-64) = 2026.2.0-2.intelnpu.fc44 -Requires: openvino-plugins(x86-64) = 2026.2.0-2.intelnpu.fc44 -Requires: intel-npu-compiler(x86-64) = 2026.2.0-2.intelnpu.fc44 +Requires: openvino(x86-64) = 2026.2.1-1.intelnpu.fc44 +Requires: openvino-plugins(x86-64) = 2026.2.1-1.intelnpu.fc44 +Requires: intel-npu-compiler(x86-64) = 2026.2.1-1.intelnpu.fc44 %description -n intel-npu-stack Metadata fixture. %install diff --git a/packaging/fedora/44/rpm/openvino/SOURCES.md b/packaging/fedora/44/rpm/openvino/SOURCES.md index 415360d..d574b76 100644 --- a/packaging/fedora/44/rpm/openvino/SOURCES.md +++ b/packaging/fedora/44/rpm/openvino/SOURCES.md @@ -14,8 +14,8 @@ names expected by the source-built NPU compiler. | Archive | Destination | Purpose | |---|---|---| -| `openvino.tar` | build root | OpenVINO `2026.2.0` | -| `npu-compiler.tar` | `thirdparty/npu-compiler` | compiler tag `npu_ud_2026_28_rc1` | +| `openvino.tar` | build root | OpenVINO `2026.2.1` | +| `npu-compiler.tar` | `thirdparty/npu-compiler` | compiler tag `npu_ud_2026_28_rc2` | | `npu-compiler-elf-openvino.tar` | compiler `thirdparty/elf` | compiler ELF support | | `intel-npu-compiler-llvm.tar` | compiler `thirdparty/llvm-project` | source-built LLVM/MLIR | | `intel-npu-nn-cost-model.tar` | compiler `thirdparty/vpucostmodel` | NPU cost models | @@ -274,6 +274,17 @@ diagnostic. Isolated candidate verification and complete package acceptance must pass before this correction is treated as release-qualified; GPU hardware inference tests remain a separate gate. +Patch 0015 guards the dynamic Reshape importer's missing-bound inference in the +NPU compiler: an unbounded input made the unchecked `dyn_cast` of +`BoundedTensorType` dereference null and terminated the compiling process. The +guard throws the importer's normal diagnostic instead (issue #20; proposed +upstream as npu_compiler #352 and hardware-validated there: unbounded NPU +compilation becomes a catchable error, static, bounded and plugin-batched +behavior unchanged). The same defect is present in `npu_ud_2026_28_rc1` and +`npu_ud_2026_38_rc1`; drop the patch when an upstream release carries the fix. +`check-unbounded-reshape-guard.py` runs after `%prep` and refuses the unguarded +spelling in the prepared source. + The GPU component also installs its pinned `kernel_selector/cache/cache.json` tuning data beside the plugin. The Linux kernel selector looks up that exact path. `openvino-plugins` owns it and the staged-layout check requires it; the diff --git a/packaging/fedora/44/rpm/openvino/check-install-layout.py b/packaging/fedora/44/rpm/openvino/check-install-layout.py index ac6cdfd..095ef1a 100644 --- a/packaging/fedora/44/rpm/openvino/check-install-layout.py +++ b/packaging/fedora/44/rpm/openvino/check-install-layout.py @@ -7,13 +7,13 @@ import sys root = Path(sys.argv[1]).resolve(strict=True) -version = '2026.2.0' +version = '2026.2.1' lib = 'usr/lib64/' plugins = lib + 'openvino-' + version + '/' frontends = ['ir', 'onnx', 'paddle', 'pytorch', 'tensorflow', 'tensorflow_lite'] libraries = ['openvino', 'openvino_c'] + ['openvino_' + x + '_frontend' for x in frontends] expected = {lib + 'lib' + name + '.so' + suffix for name in libraries - for suffix in ['', '.2620', '.' + version]} + for suffix in ['', '.2621', '.' + version]} expected |= {plugins + 'libopenvino_' + name + '.so' for name in ['auto_plugin', 'hetero_plugin', 'intel_cpu_plugin', 'intel_gpu_plugin', 'intel_npu_plugin', 'intel_npu_compiler', 'intel_npu_compiler_loader']} diff --git a/packaging/fedora/44/rpm/openvino/check-installed-compiler.py b/packaging/fedora/44/rpm/openvino/check-installed-compiler.py index 96008d8..ec96066 100644 --- a/packaging/fedora/44/rpm/openvino/check-installed-compiler.py +++ b/packaging/fedora/44/rpm/openvino/check-installed-compiler.py @@ -13,7 +13,7 @@ parent.mkdir(parents=True, exist_ok=True) evidence = Path(tempfile.mkdtemp(prefix='run-', dir=parent)) lib = root / 'usr/lib64' -plugins = lib / 'openvino-2026.2.0' +plugins = lib / 'openvino-2026.2.1' env = dict(os.environ, LD_LIBRARY_PATH=str(lib) + ':' + str(plugins), LD_DEBUG='libs', LD_DEBUG_OUTPUT=str(evidence / 'loader-trace')) command = ['/usr/bin/python3', str(checker), str(binary), str(config), str(evidence / 'tests')] @@ -24,7 +24,7 @@ for line in trace.read_text().splitlines(): if 'calling init:' in line: initialized.add(line.split('calling init:', 1)[1].strip()) -required = {str(lib / 'libopenvino.so.2620'), +required = {str(lib / 'libopenvino.so.2621'), str(plugins / 'libopenvino_intel_npu_compiler_loader.so'), str(plugins / 'libopenvino_intel_npu_compiler.so')} missing = sorted(required - initialized) diff --git a/packaging/fedora/44/rpm/openvino/check-unbounded-reshape-guard.py b/packaging/fedora/44/rpm/openvino/check-unbounded-reshape-guard.py new file mode 100644 index 0000000..b53b0b5 --- /dev/null +++ b/packaging/fedora/44/rpm/openvino/check-unbounded-reshape-guard.py @@ -0,0 +1,18 @@ +#!/usr/bin/python3 +# SPDX-License-Identifier: Apache-2.0 +"""Require the unbounded Reshape input guard in the prepared compiler source.""" +from pathlib import Path +import sys + +source = Path(sys.argv[1]).resolve(strict=True) / 'thirdparty/npu-compiler/src/vpux_compiler/src/frontend/IE.cpp' +text = source.read_text(encoding='utf-8') + +unguarded = 'mlir::dyn_cast(inputs[0].getType()).getBounds()' +guarded_throw = 'VPUX_THROW_WHEN(boundedInputType == nullptr,' +guarded_call = 'boundedInputType.getBounds()' + +if unguarded in text: + raise SystemExit(f'check-unbounded-reshape-guard: unguarded bounds dereference present in {source}') +if text.count(guarded_throw) != 1 or text.count(guarded_call) != 1: + raise SystemExit(f'check-unbounded-reshape-guard: guard not found exactly once in {source}') +print('check-unbounded-reshape-guard: ok') diff --git a/packaging/fedora/44/rpm/openvino/openvino.spec b/packaging/fedora/44/rpm/openvino/openvino.spec index f74682e..4bf3062 100644 --- a/packaging/fedora/44/rpm/openvino/openvino.spec +++ b/packaging/fedora/44/rpm/openvino/openvino.spec @@ -1,6 +1,6 @@ # SPDX-License-Identifier: Apache-2.0 -%global so_ver 2620 +%global so_ver 2621 # Large DWARF payloads exceed the builder memory budget when processed together. # Keep compilation parallel while serializing debug extraction and compression. %global _find_debuginfo_opts %{?_find_debuginfo_opts} -j1 @@ -21,8 +21,8 @@ package or when debugging this package.\ %{nil} Name: openvino -Version: 2026.2.0 -Release: 2.intelnpu.fc44 +Version: 2026.2.1 +Release: 1.intelnpu.fc44 Summary: Toolkit for optimizing and deploying AI inference License: Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause) @@ -75,6 +75,8 @@ Source44: install-provider-notices.py Source45: provider-sources.toml Source46: provider-license-evidence.tar Source47: json-3.12.0-LICENSE.MIT +Source48: 0015-check-unbounded-reshape-input-bounds.patch +Source49: check-unbounded-reshape-guard.py ExclusiveArch: x86_64 @@ -246,6 +248,9 @@ mv intel-npu-nn-cost-model thirdparty/npu-compiler/thirdparty/vpucostmodel /usr/bin/patch --batch --forward --fuzz=0 -p1 \ -d thirdparty/npu-compiler < %{SOURCE40} /usr/bin/patch --batch --forward --fuzz=0 -p1 < %{SOURCE42} +/usr/bin/patch --batch --forward --fuzz=0 -p1 \ + -d thirdparty/npu-compiler < %{SOURCE48} +/usr/bin/python3 %{SOURCE49} "$PWD" /usr/bin/python3 %{SOURCE44} --kind openvino \ --source "$PWD" --archives "$(dirname -- '%{SOURCE0}')" --spec %{_specdir}/openvino.spec \ @@ -326,7 +331,7 @@ export CMAKE_BUILD_PARALLEL_LEVEL=%{_smp_build_ncpus} -DENABLE_NPU_MONO=OFF \ -DENABLE_PREBUILT_LLVM_MLIR_LIBS=OFF \ -DENABLE_PRIVATE_TESTS=OFF \ - -DNPU_COMPILER_SOURCE_COMMIT=6a7a7c531f54baed1dddfda1b80299413c4c6943 \ + -DNPU_COMPILER_SOURCE_COMMIT=deb423b11b00af945fa788c9d38c51e30f0cf3d5 \ -DNPU_LOADER_SOURCE_COMMIT=0c96256285114a596988bfa6e4face817165396c /usr/bin/python3 %{SOURCE26} %{_vpath_builddir} /usr/bin/python3 %{SOURCE28} %{_vpath_builddir} @@ -433,6 +438,12 @@ cp -a ../provider-notices/openvino ../provider-notices/intel-npu-compiler \ %{_libdir}/libopenvino_tensorflow_lite_frontend.so.%{so_ver} %changelog +* Wed Sep 30 2026 Intel NPU Stack maintainers - 2026.2.1-1.intelnpu.fc44 +- OpenVINO 2026.2.1 (NPU plugin shared Level Zero command-queue priority fix) + and the NPU compiler from npu_ud_2026_28_rc2. Add 0015 to reject an + unbounded Reshape input with a diagnostic instead of a null dereference + (archledger/intel-npu-stack issue 20, proposed upstream as npu_compiler + issue 352). * Tue Sep 15 2026 Intel NPU Stack maintainers - 2026.2.0-2.intelnpu.fc44 - Rebuild the coupled candidate: intel-npu-compiler requires the 1.38.0 userspace driver. Sources are unchanged from 2026.2.0-1. diff --git a/packaging/fedora/44/rpm/openvino/patches/0015-check-unbounded-reshape-input-bounds.patch b/packaging/fedora/44/rpm/openvino/patches/0015-check-unbounded-reshape-input-bounds.patch new file mode 100644 index 0000000..702954b --- /dev/null +++ b/packaging/fedora/44/rpm/openvino/patches/0015-check-unbounded-reshape-input-bounds.patch @@ -0,0 +1,35 @@ +Subject: [PATCH] Reject an unbounded Reshape input instead of dereferencing null + +This packaging patch applies only to the sealed NPU compiler source +deb423b11b00af945fa788c9d38c51e30f0cf3d5 (npu_ud_2026_28_rc2). The +dynamic Reshape importer infers a missing output bound from the input +bounds. For an unbounded input the mlir::dyn_cast +returns null and the direct .getBounds() dereference terminates the +calling process (SIGSEGV) before the importer's post-walk rejection can +run. Check the cast and throw the same style of diagnostic used a few +lines above, so an unbounded model returns a normal API error. +Proposed upstream as openvinotoolkit/npu_compiler issue 352; the fix was +validated on hardware (issue archledger/intel-npu-stack 20): unbounded +NPU compilation changes from SIGSEGV to a catchable error and static, +bounded and plugin-batched cases are unchanged. The guard drops when an +upstream release carries the fix. + +Regression: check-unbounded-reshape-guard.py refuses the unguarded +spelling in the prepared source and requires the checked form. + +--- a/src/vpux_compiler/src/frontend/IE.cpp ++++ b/src/vpux_compiler/src/frontend/IE.cpp +@@ -2076,7 +2076,12 @@ + "Reshape node '{0}': expected exactly 1 dynamic output bound dimension, got {1}", nodeName, + dynamicDimCount); + +- const auto& inputBounds = mlir::dyn_cast(inputs[0].getType()).getBounds(); ++ const auto boundedInputType = mlir::dyn_cast(inputs[0].getType()); ++ VPUX_THROW_WHEN(boundedInputType == nullptr, ++ "Reshape node '{0}': input type carries no bounds, cannot infer the missing " ++ "output bound", ++ nodeName); ++ const auto& inputBounds = boundedInputType.getBounds(); + const int64_t inputBoundsProduct = + std::accumulate(inputBounds.begin(), inputBounds.end(), int64_t{1}, std::multiplies()); + const int64_t outputBoundsProduct = diff --git a/packaging/fedora/44/test-profile-generation.py b/packaging/fedora/44/test-profile-generation.py index cd7fa6f..79e4c7d 100644 --- a/packaging/fedora/44/test-profile-generation.py +++ b/packaging/fedora/44/test-profile-generation.py @@ -8,20 +8,20 @@ manifest=tomllib.loads(Path('packaging/fedora/44/installed-manifest.toml').read_text()) packages={p['name']:p for p in manifest['providers']} packages['intel-npu-driver']['license'] = 'MIT AND Apache-2.0 AND (GPL-2.0-only WITH Linux-syscall-note)' -packages['intel-npu-stack-tools']={'nevr':'0:0.1.0-3.intelnpu.fc44','arch':'x86_64','license':'Apache-2.0 AND Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-3.0 AND (Apache-2.0 WITH LLVM-exception)', +packages['intel-npu-stack-tools']={'nevr':'0:0.2.0-3.intelnpu.fc44','arch':'x86_64','license':'Apache-2.0 AND Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-3.0 AND (Apache-2.0 WITH LLVM-exception)', 'files':[{'path':'/usr/bin/intel-npu-stack'}, {'path':'/usr/libexec/intel-npu-stack/intel-npu-level-zero-probe'}, {'path':'/usr/libexec/intel-npu-stack/intel-npu-openvino-probe'}, {'path':'/usr/share/intel-npu-stack/installed-manifest.toml'}]} -packages['intel-npu-stack']={'nevr':'0:0.1.0-3.intelnpu.fc44','arch':'noarch','license':'Apache-2.0','files':[]} +packages['intel-npu-stack']={'nevr':'0:0.2.0-3.intelnpu.fc44','arch':'noarch','license':'Apache-2.0','files':[]} packages['intel-npu-compiler']['license'] = 'Apache-2.0 AND MIT AND BSL-1.0 AND HPND AND BSD-3-Clause AND (GPL-2.0-only OR BSD-3-Clause) AND (Apache-2.0 WITH LLVM-exception) AND NCSA AND BSD-2-Clause AND ISC AND Spencer-94 AND Unicode-DFS-2015 AND LicenseRef-LLVM-MD5' license_owners={'intel-npu-stack-tools','intel-npu-driver','intel-npu-stack-firmware','oneapi-level-zero','openvino','intel-npu-compiler'} with tempfile.TemporaryDirectory(prefix='profile-rpm-contract-') as temporary: root=Path(temporary) for name in ['BUILD','SOURCES','SPECS','RPMS','SRPMS','tmp']:(root/name).mkdir() - spec=['%global debug_package %{nil}', 'Name: intel-npu-stack-tools', 'Version: 0.1.0', 'Release: 3.intelnpu.fc44', + spec=['%global debug_package %{nil}', 'Name: intel-npu-stack-tools', 'Version: 0.2.0', 'Release: 3.intelnpu.fc44', 'Summary: Profile generation fixture','License: '+packages['intel-npu-stack-tools']['license'], 'Requires: oneapi-level-zero(x86-64) = 1.32.0-1.intelnpu.fc44', - 'Requires: openvino(x86-64) = 2026.2.0-2.intelnpu.fc44','%description','Fixture.'] + 'Requires: openvino(x86-64) = 2026.2.1-1.intelnpu.fc44','%description','Fixture.'] for name,p in sorted(packages.items()): if name=='intel-npu-stack-tools':continue version,release=p['nevr'].split(':')[1].split('-',1) @@ -29,7 +29,7 @@ 'Release: '+release,'License: '+p['license']] if p['arch']=='noarch':spec.append('BuildArch: noarch') if name.startswith('libopenvino-') or name in ['intel-npu-compiler','openvino-plugins']: - spec.append('Requires: openvino(x86-64) = 2026.2.0-2.intelnpu.fc44') + spec.append('Requires: openvino(x86-64) = 2026.2.1-1.intelnpu.fc44') if name=='intel-npu-stack': for dependency in ['intel-npu-stack-tools','intel-npu-driver','intel-npu-stack-firmware', 'oneapi-level-zero','openvino','openvino-plugins','intel-npu-compiler']: @@ -63,6 +63,7 @@ def generate(output,*extra): assert first.read_bytes()==second.read_bytes() profile=tomllib.loads(first.read_text()) assert profile['status']=='candidate' and 'qualification' not in profile + assert profile['stack_release']==manifest['stack_release']=='0.2.0', profile['stack_release'] assert profile['platform']=={'id':'fedora','version_id':'44','arch':'x86_64'} assert profile['hardware']==[{'vendor':'8086','device':'643e'}] and profile['kernel']['module']=='intel_vpu' assert profile['components']['level_zero_loader']['provider']['version']=='0:1.32.0-1.intelnpu.fc44' @@ -86,12 +87,12 @@ def generate(output,*extra): changed='\n'.join(spec)+'\n' if case=='wrong-release':changed=changed.replace('1.intelnpu.fc44','1.intelnpu.fc43') if case=='wrong-driver':changed=changed.replace('%package -n intel-npu-driver\nSummary: Profile generation fixture\nVersion: 1.38.0','%package -n intel-npu-driver\nSummary: Profile generation fixture\nVersion: 1.35.0') - if case=='wrong-openvino':changed=changed.replace('Version: 2026.2.0','Version: 2025.1.0') + if case=='wrong-openvino':changed=changed.replace('Version: 2026.2.1','Version: 2025.1.0') if case=='wrong-arch':changed=changed.replace('%package -n oneapi-level-zero\n','%package -n oneapi-level-zero\nBuildArch: noarch\n') if case=='script':changed+='\n%post\necho forbidden\n' if case=='overlap':changed=changed.replace('%files -n intel-npu-driver\n','%files -n intel-npu-driver\n/usr/bin/intel-npu-stack\n') if case=='conflicting-requirement':changed=changed.replace('%description -n intel-npu-stack\n','Requires: intel-npu-driver(x86-64) = 1.35.0-1.intelnpu.fc44\n%description -n intel-npu-stack\n') - if case=='missing-frontend-file':changed=changed.replace('/usr/lib64/libopenvino_ir_frontend.so.2026.2.0','/usr/share/fixture-missing-frontend') + if case=='missing-frontend-file':changed=changed.replace('/usr/lib64/libopenvino_ir_frontend.so.2026.2.1','/usr/share/fixture-missing-frontend') if case=='unreviewed-license':changed=changed.replace('License: MIT AND Apache-2.0','License: LicenseRef-Unreviewed') if case=='missing-compiler-license':changed=changed.replace('%license /usr/share/licenses/intel-npu-compiler/LICENSE','/usr/share/licenses/intel-npu-compiler/LICENSE') if case=='legacy-compiler-license':changed=changed.replace('License: '+packages['intel-npu-compiler']['license'], 'License: '+packages['openvino']['license']) diff --git a/xtask/src/fedora_openvino_package.rs b/xtask/src/fedora_openvino_package.rs index a6be4a2..0249ee7 100644 --- a/xtask/src/fedora_openvino_package.rs +++ b/xtask/src/fedora_openvino_package.rs @@ -45,37 +45,37 @@ const FRONTENDS: [&str; 6] = [ const REQUIRED_ELFS: [(&str, &str, &str, bool); 6] = [ ( "openvino", - "/usr/lib64/libopenvino.so.2026.2.0", - "libopenvino.so.2620", + "/usr/lib64/libopenvino.so.2026.2.1", + "libopenvino.so.2621", true, ), ( "openvino-plugins", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_cpu_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_cpu_plugin.so", "libopenvino_intel_cpu_plugin.so", false, ), ( "openvino-plugins", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_gpu_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_gpu_plugin.so", "libopenvino_intel_gpu_plugin.so", false, ), ( "openvino-plugins", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so", "libopenvino_intel_npu_plugin.so", false, ), ( "intel-npu-compiler", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler.so", "libopenvino_intel_npu_compiler.so", false, ), ( "intel-npu-compiler", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler_loader.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler_loader.so", "libopenvino_intel_npu_compiler_loader.so", true, ), diff --git a/xtask/src/fedora_profile.rs b/xtask/src/fedora_profile.rs index 5b6c84e..0fdaf52 100644 --- a/xtask/src/fedora_profile.rs +++ b/xtask/src/fedora_profile.rs @@ -128,7 +128,7 @@ fn expected_packages() -> BTreeMap { ] { packages.insert( name.to_owned(), - ("0:2026.2.0-2.intelnpu.fc44".to_owned(), "x86_64".to_owned()), + ("0:2026.2.1-1.intelnpu.fc44".to_owned(), "x86_64".to_owned()), ); } for (name, nevr, arch) in [ @@ -139,8 +139,8 @@ fn expected_packages() -> BTreeMap { "noarch", ), ("oneapi-level-zero", "0:1.32.0-1.intelnpu.fc44", "x86_64"), - ("intel-npu-stack", "0:0.1.0-3.intelnpu.fc44", "noarch"), - ("intel-npu-stack-tools", "0:0.1.0-3.intelnpu.fc44", "x86_64"), + ("intel-npu-stack", "0:0.2.0-3.intelnpu.fc44", "noarch"), + ("intel-npu-stack-tools", "0:0.2.0-3.intelnpu.fc44", "x86_64"), ] { packages.insert(name.to_owned(), (nevr.to_owned(), arch.to_owned())); } @@ -182,22 +182,22 @@ fn required_payload(name: &str) -> Vec { "/usr/lib64/libze_validation_layer.so.1.32.0", ], "openvino" => &[ - "/usr/lib64/libopenvino.so.2026.2.0", - "/usr/lib64/libopenvino_c.so.2026.2.0", + "/usr/lib64/libopenvino.so.2026.2.1", + "/usr/lib64/libopenvino_c.so.2026.2.1", ], "intel-npu-compiler" => &[ - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler.so", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler_loader.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler_loader.so", ], "openvino-plugins" => &[ - "/usr/lib64/openvino-2026.2.0/cache.json", - "/usr/lib64/openvino-2026.2.0/libopenvino_auto_plugin.so", - "/usr/lib64/openvino-2026.2.0/libopenvino_hetero_plugin.so", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_cpu_plugin.so", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_gpu_plugin.so", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so", + "/usr/lib64/openvino-2026.2.1/cache.json", + "/usr/lib64/openvino-2026.2.1/libopenvino_auto_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_hetero_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_cpu_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_gpu_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so", ], - _ => return vec![format!("/usr/lib64/{}.so.2026.2.0", name.replace('-', "_"))], + _ => return vec![format!("/usr/lib64/{}.so.2026.2.1", name.replace('-', "_"))], }; files.iter().map(|file| (*file).to_owned()).collect() } @@ -374,7 +374,7 @@ fn license_provider<'a>( let relationship = ( "openvino(x86-64)".to_owned(), "=".to_owned(), - "2026.2.0-2.intelnpu.fc44".to_owned(), + "2026.2.1-1.intelnpu.fc44".to_owned(), ); require( shared_family @@ -559,19 +559,19 @@ pub fn generate_candidate( "npu_compiler", "intel-npu-compiler", "npu-compiler", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler.so", ), ( "openvino_runtime", "openvino", "openvino", - "/usr/lib64/libopenvino.so.2026.2.0", + "/usr/lib64/libopenvino.so.2026.2.1", ), ( "openvino_npu_plugin", "openvino-plugins", "openvino", - "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so", + "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so", ), ]; let mut components = BTreeMap::new(); @@ -649,7 +649,7 @@ pub fn generate_candidate( let profile = Profile { schema_version: 1, id: "fedora-44-lunar-lake-x86_64".to_owned(), - stack_release: "0.1.0".to_owned(), + stack_release: "0.2.0".to_owned(), status: ProfileStatus::Candidate, package_manager: PackageManager::Rpm, conflicts: Vec::new(), diff --git a/xtask/tests/fedora_openvino_package_contract.rs b/xtask/tests/fedora_openvino_package_contract.rs index 432bcb1..35fb275 100644 --- a/xtask/tests/fedora_openvino_package_contract.rs +++ b/xtask/tests/fedora_openvino_package_contract.rs @@ -63,7 +63,7 @@ fn package_name(package: &Path) -> String { fn policy() -> OpenvinoPackagePolicy { OpenvinoPackagePolicy { - openvino_nevr: "0:2026.2.0-2.intelnpu.fc44".to_owned(), + openvino_nevr: "0:2026.2.1-1.intelnpu.fc44".to_owned(), driver_requirement: "intel-npu-driver(x86-64) = 1.38.0-1.intelnpu.fc44".to_owned(), } } @@ -126,13 +126,13 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { compile_shared( &sources, - "libopenvino.so.2026.2.0", + "libopenvino.so.2026.2.1", if options.omit_runtime_soname { "" } else { - "libopenvino.so.2620" + "libopenvino.so.2621" }, - "int ov_runtime(void) { return 2620; }\n", + "int ov_runtime(void) { return 2621; }\n", &[], ); compile_shared( @@ -160,7 +160,7 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { library, "", "extern int ov_runtime(void); int preserved_plugin(void) { return ov_runtime(); }\n", - &["-Wl,--no-as-needed", "-l:libopenvino.so.2026.2.0"], + &["-Wl,--no-as-needed", "-l:libopenvino.so.2026.2.1"], ); } compile_shared( @@ -195,7 +195,7 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { "extern int ov_runtime(void); extern int npu_load(void); int npu_plugin(void) { return ov_runtime() + npu_load(); }\n", &[ "-Wl,--no-as-needed", - "-l:libopenvino.so.2026.2.0", + "-l:libopenvino.so.2026.2.1", "-l:libopenvino_intel_npu_compiler_loader.so", ], ); @@ -233,8 +233,8 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { "tensorflow", "tensorflow_lite", ] { - let output = format!("libopenvino_{frontend}_frontend.so.2026.2.0"); - let soname = format!("libopenvino_{frontend}_frontend.so.2620"); + let output = format!("libopenvino_{frontend}_frontend.so.2026.2.1"); + let soname = format!("libopenvino_{frontend}_frontend.so.2621"); compile_shared( &sources, &output, @@ -246,28 +246,28 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { let payload_root = root.path().join("payload"); let library_root = payload_root.join("usr/lib64"); - let plugin_root = library_root.join("openvino-2026.2.0"); + let plugin_root = library_root.join("openvino-2026.2.1"); fs::create_dir_all(&plugin_root).expect("create extracted fixture library roots"); fs::create_dir_all(payload_root.join("usr/include/openvino")) .expect("create extracted fixture include root"); for library in [ - "libopenvino.so.2026.2.0", - "libopenvino_ir_frontend.so.2026.2.0", - "libopenvino_onnx_frontend.so.2026.2.0", - "libopenvino_paddle_frontend.so.2026.2.0", - "libopenvino_pytorch_frontend.so.2026.2.0", - "libopenvino_tensorflow_frontend.so.2026.2.0", - "libopenvino_tensorflow_lite_frontend.so.2026.2.0", + "libopenvino.so.2026.2.1", + "libopenvino_ir_frontend.so.2026.2.1", + "libopenvino_onnx_frontend.so.2026.2.1", + "libopenvino_paddle_frontend.so.2026.2.1", + "libopenvino_pytorch_frontend.so.2026.2.1", + "libopenvino_tensorflow_frontend.so.2026.2.1", + "libopenvino_tensorflow_lite_frontend.so.2026.2.1", ] { fs::copy(sources.join(library), library_root.join(library)) .expect("copy extracted fixture library"); } symlink( - "libopenvino.so.2026.2.0", - library_root.join("libopenvino.so.2620"), + "libopenvino.so.2026.2.1", + library_root.join("libopenvino.so.2621"), ) .expect("create runtime SONAME link"); - symlink("libopenvino.so.2620", library_root.join("libopenvino.so")) + symlink("libopenvino.so.2621", library_root.join("libopenvino.so")) .expect("create runtime development link"); for frontend in [ "ir", @@ -278,8 +278,8 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { "tensorflow_lite", ] { symlink( - format!("libopenvino_{frontend}_frontend.so.2026.2.0"), - library_root.join(format!("libopenvino_{frontend}_frontend.so.2620")), + format!("libopenvino_{frontend}_frontend.so.2026.2.1"), + library_root.join(format!("libopenvino_{frontend}_frontend.so.2621")), ) .expect("create frontend SONAME link"); } @@ -305,22 +305,22 @@ fn build_fixture_packages_with(options: &FixtureOptions) -> FixtureRpms { %global debug_package %{nil} %global __strip /usr/bin/true Name: openvino -Version: 2026.2.0 -Release: 2.intelnpu.fc44 +Version: 2026.2.1 +Release: 1.intelnpu.fc44 Summary: OpenVINO fixture License: Apache-2.0 Source0: LICENSE Source1: openvino.hpp -Source2: libopenvino.so.2026.2.0 +Source2: libopenvino.so.2026.2.1 Source3: libopenvino_intel_npu_plugin.so Source4: libopenvino_intel_npu_compiler.so Source5: libopenvino_intel_npu_compiler_loader.so -Source6: libopenvino_ir_frontend.so.2026.2.0 -Source7: libopenvino_onnx_frontend.so.2026.2.0 -Source8: libopenvino_paddle_frontend.so.2026.2.0 -Source9: libopenvino_pytorch_frontend.so.2026.2.0 -Source10: libopenvino_tensorflow_frontend.so.2026.2.0 -Source11: libopenvino_tensorflow_lite_frontend.so.2026.2.0 +Source6: libopenvino_ir_frontend.so.2026.2.1 +Source7: libopenvino_onnx_frontend.so.2026.2.1 +Source8: libopenvino_paddle_frontend.so.2026.2.1 +Source9: libopenvino_pytorch_frontend.so.2026.2.1 +Source10: libopenvino_tensorflow_frontend.so.2026.2.1 +Source11: libopenvino_tensorflow_lite_frontend.so.2026.2.1 Requires: libopenvino-ir-frontend%{?_isa} = %{version}-%{release} Requires: libopenvino-onnx-frontend%{?_isa} = %{version}-%{release} Requires: libopenvino-paddle-frontend%{?_isa} = %{version}-%{release} @@ -393,25 +393,25 @@ Package-contract fixture. %install install -Dm0644 %{SOURCE0} %{buildroot}%{_licensedir}/%{name}/LICENSE install -Dm0644 %{SOURCE1} %{buildroot}%{_includedir}/openvino/openvino.hpp -install -Dm0755 %{SOURCE2} %{buildroot}%{_libdir}/libopenvino.so.2026.2.0 -ln -s libopenvino.so.2026.2.0 %{buildroot}%{_libdir}/libopenvino.so.2620 -ln -s libopenvino.so.2620 %{buildroot}%{_libdir}/libopenvino.so -install -Dm0755 %{SOURCE3} %{buildroot}%{_libdir}/openvino-2026.2.0/libopenvino_intel_npu_plugin.so -install -Dm0755 %{SOURCE4} %{buildroot}%{_libdir}/openvino-2026.2.0/libopenvino_intel_npu_compiler.so -install -Dm0755 %{SOURCE5} %{buildroot}%{_libdir}/openvino-2026.2.0/libopenvino_intel_npu_compiler_loader.so -install -Dm0755 %{SOURCE6} %{buildroot}%{_libdir}/libopenvino_ir_frontend.so.2026.2.0 -install -Dm0755 %{SOURCE7} %{buildroot}%{_libdir}/libopenvino_onnx_frontend.so.2026.2.0 -install -Dm0755 %{SOURCE8} %{buildroot}%{_libdir}/libopenvino_paddle_frontend.so.2026.2.0 -install -Dm0755 %{SOURCE9} %{buildroot}%{_libdir}/libopenvino_pytorch_frontend.so.2026.2.0 -install -Dm0755 %{SOURCE10} %{buildroot}%{_libdir}/libopenvino_tensorflow_frontend.so.2026.2.0 -install -Dm0755 %{SOURCE11} %{buildroot}%{_libdir}/libopenvino_tensorflow_lite_frontend.so.2026.2.0 +install -Dm0755 %{SOURCE2} %{buildroot}%{_libdir}/libopenvino.so.2026.2.1 +ln -s libopenvino.so.2026.2.1 %{buildroot}%{_libdir}/libopenvino.so.2621 +ln -s libopenvino.so.2621 %{buildroot}%{_libdir}/libopenvino.so +install -Dm0755 %{SOURCE3} %{buildroot}%{_libdir}/openvino-2026.2.1/libopenvino_intel_npu_plugin.so +install -Dm0755 %{SOURCE4} %{buildroot}%{_libdir}/openvino-2026.2.1/libopenvino_intel_npu_compiler.so +install -Dm0755 %{SOURCE5} %{buildroot}%{_libdir}/openvino-2026.2.1/libopenvino_intel_npu_compiler_loader.so +install -Dm0755 %{SOURCE6} %{buildroot}%{_libdir}/libopenvino_ir_frontend.so.2026.2.1 +install -Dm0755 %{SOURCE7} %{buildroot}%{_libdir}/libopenvino_onnx_frontend.so.2026.2.1 +install -Dm0755 %{SOURCE8} %{buildroot}%{_libdir}/libopenvino_paddle_frontend.so.2026.2.1 +install -Dm0755 %{SOURCE9} %{buildroot}%{_libdir}/libopenvino_pytorch_frontend.so.2026.2.1 +install -Dm0755 %{SOURCE10} %{buildroot}%{_libdir}/libopenvino_tensorflow_frontend.so.2026.2.1 +install -Dm0755 %{SOURCE11} %{buildroot}%{_libdir}/libopenvino_tensorflow_lite_frontend.so.2026.2.1 @PRESERVED_PLUGIN_INSTALL@ @OPT_INSTALL@ %files %license %{_licensedir}/%{name}/LICENSE -%{_libdir}/libopenvino.so.2026.2.0 -%{_libdir}/libopenvino.so.2620 +%{_libdir}/libopenvino.so.2026.2.1 +%{_libdir}/libopenvino.so.2621 %files devel %{_includedir}/openvino/openvino.hpp @@ -419,39 +419,39 @@ install -Dm0755 %{SOURCE11} %{buildroot}%{_libdir}/libopenvino_tensorflow_lite_f @DUPLICATE_FILE@ %files plugins -%{_libdir}/openvino-2026.2.0/libopenvino_intel_npu_plugin.so +%{_libdir}/openvino-2026.2.1/libopenvino_intel_npu_plugin.so @PRESERVED_PLUGIN_FILES@ @OPT_FILE@ %files -n intel-npu-compiler -%{_libdir}/openvino-2026.2.0/libopenvino_intel_npu_compiler.so -%{_libdir}/openvino-2026.2.0/libopenvino_intel_npu_compiler_loader.so +%{_libdir}/openvino-2026.2.1/libopenvino_intel_npu_compiler.so +%{_libdir}/openvino-2026.2.1/libopenvino_intel_npu_compiler_loader.so %files -n libopenvino-ir-frontend -%{_libdir}/libopenvino_ir_frontend.so.2026.2.0 -%{_libdir}/libopenvino_ir_frontend.so.2620 +%{_libdir}/libopenvino_ir_frontend.so.2026.2.1 +%{_libdir}/libopenvino_ir_frontend.so.2621 %files -n libopenvino-onnx-frontend -%{_libdir}/libopenvino_onnx_frontend.so.2026.2.0 -%{_libdir}/libopenvino_onnx_frontend.so.2620 +%{_libdir}/libopenvino_onnx_frontend.so.2026.2.1 +%{_libdir}/libopenvino_onnx_frontend.so.2621 %files -n libopenvino-paddle-frontend -%{_libdir}/libopenvino_paddle_frontend.so.2026.2.0 -%{_libdir}/libopenvino_paddle_frontend.so.2620 +%{_libdir}/libopenvino_paddle_frontend.so.2026.2.1 +%{_libdir}/libopenvino_paddle_frontend.so.2621 %files -n libopenvino-pytorch-frontend -%{_libdir}/libopenvino_pytorch_frontend.so.2026.2.0 -%{_libdir}/libopenvino_pytorch_frontend.so.2620 +%{_libdir}/libopenvino_pytorch_frontend.so.2026.2.1 +%{_libdir}/libopenvino_pytorch_frontend.so.2621 %files -n libopenvino-tensorflow-frontend -%{_libdir}/libopenvino_tensorflow_frontend.so.2026.2.0 -%{_libdir}/libopenvino_tensorflow_frontend.so.2620 +%{_libdir}/libopenvino_tensorflow_frontend.so.2026.2.1 +%{_libdir}/libopenvino_tensorflow_frontend.so.2621 %files -n libopenvino-tensorflow-lite-frontend -%{_libdir}/libopenvino_tensorflow_lite_frontend.so.2026.2.0 -%{_libdir}/libopenvino_tensorflow_lite_frontend.so.2620 +%{_libdir}/libopenvino_tensorflow_lite_frontend.so.2026.2.1 +%{_libdir}/libopenvino_tensorflow_lite_frontend.so.2621 @SCRIPTLET@ "# .replace( "@PRESERVED_PLUGIN_INSTALL@", &preserved_plugins .iter() - .map(|library| format!("install -Dm0755 %{{_sourcedir}}/{library} %{{buildroot}}%{{_libdir}}/openvino-2026.2.0/{library}")) + .map(|library| format!("install -Dm0755 %{{_sourcedir}}/{library} %{{buildroot}}%{{_libdir}}/openvino-2026.2.1/{library}")) .collect::>() .join("\n"), ) @@ -459,7 +459,7 @@ install -Dm0755 %{SOURCE11} %{buildroot}%{_libdir}/libopenvino_tensorflow_lite_f "@PRESERVED_PLUGIN_FILES@", &preserved_plugins .iter() - .map(|library| format!("%{{_libdir}}/openvino-2026.2.0/{library}")) + .map(|library| format!("%{{_libdir}}/openvino-2026.2.1/{library}")) .collect::>() .join("\n"), ) @@ -490,7 +490,7 @@ install -Dm0755 %{SOURCE11} %{buildroot}%{_libdir}/libopenvino_tensorflow_lite_f .replace( "@DUPLICATE_FILE@", if options.duplicate_runtime_file { - "%{_libdir}/libopenvino.so.2026.2.0" + "%{_libdir}/libopenvino.so.2026.2.1" } else { "" }, @@ -558,7 +558,7 @@ fn fixture_rpm_and_elf_construction_succeeds_before_contract_work() { assert!( fixture .payload_root - .join("usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so") + .join("usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so") .is_file() ); } @@ -587,7 +587,7 @@ fn accepts_exact_openvino_runtime_compiler_and_frontend_closure() { let payload = fs::read( fixture .payload_root - .join("usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so"), + .join("usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so"), ) .expect("read extracted fixture plugin"); let payload_digest = format!("{:x}", Sha256::digest(payload)); @@ -647,7 +647,7 @@ fn rejects_a_missing_or_unbound_npu_plugin_payload() { fs::remove_file( fixture .payload_root - .join("usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so"), + .join("usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so"), ) .expect("remove extracted NPU plugin fixture"); assert_eq!( @@ -734,8 +734,8 @@ fn production_spec_declares_the_source_built_openvino_npu_boundary() { for required in [ "Name: openvino", - "Version: 2026.2.0", - "Release: 2.intelnpu.fc44", + "Version: 2026.2.1", + "Release: 1.intelnpu.fc44", "ExclusiveArch: x86_64", "openvino.tar", "npu-compiler.tar", @@ -763,7 +763,7 @@ fn production_spec_declares_the_source_built_openvino_npu_boundary() { "-DENABLE_SYSTEM_PROTOBUF=OFF", "-Dprotobuf_BUILD_TESTS=OFF", "-DBUILD_COMPILER_FOR_DRIVER=ON", - "-DNPU_COMPILER_SOURCE_COMMIT=6a7a7c531f54baed1dddfda1b80299413c4c6943", + "-DNPU_COMPILER_SOURCE_COMMIT=deb423b11b00af945fa788c9d38c51e30f0cf3d5", "-DNPU_LOADER_SOURCE_COMMIT=0c96256285114a596988bfa6e4face817165396c", "libopenvino_intel_npu_plugin.so", "libopenvino_intel_npu_compiler.so", diff --git a/xtask/tests/fixtures/lunar-lake-x86_64-candidate.toml b/xtask/tests/fixtures/lunar-lake-x86_64-candidate.toml index f113a5b..b112f32 100644 --- a/xtask/tests/fixtures/lunar-lake-x86_64-candidate.toml +++ b/xtask/tests/fixtures/lunar-lake-x86_64-candidate.toml @@ -50,21 +50,21 @@ redistribution = "allowed" evidence_sha256 = "25e40deca9c4f523d84d990ee55896e2bc07f6bd7cb8169386a298f6743a1583" [components.npu_compiler] -version = "2026.2.0" +version = "2026.2.1" source = "https://github.com/openvinotoolkit/npu_compiler.git" sha256 = "6479009ffffc2d96f6a63c5bfb96f340c90df9163888c9feac10853e8a1820fa" [components.npu_compiler.provider] package = "intel-npu-compiler" -version = "0:2026.2.0-2.intelnpu.fc44" +version = "0:2026.2.1-1.intelnpu.fc44" activation = "immediate" [[components.npu_compiler.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler.so" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler.so" sha256 = "80211ba1c8bc31a693542a853dfdd0a9e66158e6d039c55421559ec3abf298e0" [[components.npu_compiler.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_compiler_loader.so" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_compiler_loader.so" sha256 = "aeb981a054369e57f0a458b837eb8aad3ef157a8786830e25896ab1979e210ef" [components.npu_compiler.license] @@ -111,37 +111,37 @@ redistribution = "allowed" evidence_sha256 = "8aa681c855145b8fa787d67cfcdc197ad20fb2fefa24d0c4ef17c327166a78e4" [components.openvino_npu_plugin] -version = "2026.2.0" +version = "2026.2.1" source = "https://github.com/openvinotoolkit/openvino.git" sha256 = "f0a85349cdc71208b623c4dfde0a1cce8efe444fe246d981f50deb485fb9eecc" [components.openvino_npu_plugin.provider] package = "openvino-plugins" -version = "0:2026.2.0-2.intelnpu.fc44" +version = "0:2026.2.1-1.intelnpu.fc44" activation = "immediate" [[components.openvino_npu_plugin.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/cache.json" +path = "/usr/lib64/openvino-2026.2.1/cache.json" sha256 = "0b2ad2a99516a3411ce3fef274e8ae2880b41a6f00c9bac6768cd4a94b87c41c" [[components.openvino_npu_plugin.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_auto_plugin.so" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_auto_plugin.so" sha256 = "712f2544d69cbd14feabb85a874d90c63fc6d11049ee843a9e391c6570f3b0ac" [[components.openvino_npu_plugin.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_hetero_plugin.so" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_hetero_plugin.so" sha256 = "22190243eb94ba685c7487b96164e24dbd7be7d85be6d2da0027dad6c2bd3cdd" [[components.openvino_npu_plugin.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_cpu_plugin.so" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_cpu_plugin.so" sha256 = "eda5d7b83b5595c6651caf45c68c2b745f22c1b20a26156c346308178b0838ba" [[components.openvino_npu_plugin.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_gpu_plugin.so" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_gpu_plugin.so" sha256 = "735919daf0e7c88fa2f4fea00e199496859cc640fe37774162e7ffc85dfb9573" [[components.openvino_npu_plugin.provider.files]] -path = "/usr/lib64/openvino-2026.2.0/libopenvino_intel_npu_plugin.so" +path = "/usr/lib64/openvino-2026.2.1/libopenvino_intel_npu_plugin.so" sha256 = "f42910f012b331002104934999edc10d5c54b6e154ca909fcd89a29fc531c251" [components.openvino_npu_plugin.license] @@ -150,21 +150,21 @@ redistribution = "allowed" evidence_sha256 = "f5ca0a7b674eaf7afebc76f1a4bee8eafdb1ac44723ee3f1a5d955333573a2b8" [components.openvino_runtime] -version = "2026.2.0" +version = "2026.2.1" source = "https://github.com/openvinotoolkit/openvino.git" sha256 = "32d488fac4102d95e6a5623a25add0b951bb22c99b7fa318bef700eb01685a50" [components.openvino_runtime.provider] package = "openvino" -version = "0:2026.2.0-2.intelnpu.fc44" +version = "0:2026.2.1-1.intelnpu.fc44" activation = "immediate" [[components.openvino_runtime.provider.files]] -path = "/usr/lib64/libopenvino.so.2026.2.0" +path = "/usr/lib64/libopenvino.so.2026.2.1" sha256 = "a7cade50be53141a7733e4c94522fc030bcb331c92ceb093c4dfb79bd0169757" [[components.openvino_runtime.provider.files]] -path = "/usr/lib64/libopenvino_c.so.2026.2.0" +path = "/usr/lib64/libopenvino_c.so.2026.2.1" sha256 = "1514c68ac22d12c04ea9088d023666fdf4f14a233f46b16d79a5900df48d1b95" [components.openvino_runtime.license] diff --git a/xtask/tests/openvino_install_layout_contract.rs b/xtask/tests/openvino_install_layout_contract.rs index 43c73ee..2a2d034 100644 --- a/xtask/tests/openvino_install_layout_contract.rs +++ b/xtask/tests/openvino_install_layout_contract.rs @@ -6,7 +6,7 @@ use std::process::{Command, Output}; use tempfile::TempDir; -const PLUGINS: &str = "usr/lib64/openvino-2026.2.0/"; +const PLUGINS: &str = "usr/lib64/openvino-2026.2.1/"; fn write(root: &Path, relative: &str) { let path = root.join(relative); @@ -26,7 +26,7 @@ fn fixture() -> TempDir { "openvino_tensorflow_frontend", "openvino_tensorflow_lite_frontend", ] { - for suffix in ["", ".2620", ".2026.2.0"] { + for suffix in ["", ".2621", ".2026.2.1"] { if name != "openvino_ir_frontend" || !suffix.is_empty() { write(root.path(), &format!("usr/lib64/lib{name}.so{suffix}")); } @@ -59,14 +59,14 @@ fn fixture() -> TempDir { ] { write( root.path(), - &format!("usr/share/doc/{name}-2026.2.0/copyright"), + &format!("usr/share/doc/{name}-2026.2.1/copyright"), ); } for name in [ "usr/include/npu_driver_compiler.h", "usr/include/openvino/openvino.hpp", "usr/lib64/pkgconfig/openvino.pc", - "usr/lib64/cmake/openvino2026.2.0/OpenVINOConfig.cmake", + "usr/lib64/cmake/openvino2026.2.1/OpenVINOConfig.cmake", ] { write(root.path(), name); }