diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 0407654..6481a60 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 @@ -82,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/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/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/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 97b7b92..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( @@ -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( @@ -161,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( @@ -196,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", ], ); @@ -234,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, @@ -247,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", @@ -279,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"); } @@ -306,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} @@ -394,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 @@ -420,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"), ) @@ -460,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"), ) @@ -491,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 { "" }, @@ -559,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() ); } @@ -588,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)); @@ -648,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!( @@ -735,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", @@ -764,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/native_opensvino_version_contract.rs b/xtask/tests/native_opensvino_version_contract.rs new file mode 100644 index 0000000..4351009 --- /dev/null +++ b/xtask/tests/native_opensvino_version_contract.rs @@ -0,0 +1,116 @@ +// 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) + ); + 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") + ); + } +} + +#[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}" + ); +} 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) + ); } } 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); }