Repository navigation
fix: link Windows ARM64 Vulkan against the native ARM64 Vulkan SDK - #94
Merged
Merged
Conversation
The v0.5.0 release retry (run 36004579792) failed only in the Windows arm64 Vulkan lane: lld-link : error : vulkan-1.lib(vulkan-1.dll): machine type x64 conflicts with arm64 That lane installed LunarG's x64 SDK, whose Lib/vulkan-1.lib is x64. The 09-23 VS 2022 run found the same x64 library and passed, so the new VS 2026 toolchain now rejects the mismatch that the old one accepted. LunarG ships a native ARM64 SDK at the pinned version under its "warm" platform. A shared composite action now installs the SDK matching the target arch. It checks each installer's SHA-256 against LunarG's file index and fails if vulkan-1.lib is not built for the target machine. native_release uses it for both arches; x64 keeps the same installer. validate_wrapper gains windows-arm64-vulkan, which runs the release build command on the VS 2026 arm64 image (pinned and v0.5.0) and checks that ggml-vulkan.dll is ARM64 and imports vulkan-1.dll. Until now PR CI never built this lane.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the one failure in the v0.5.0 release retry 36004579792:
build-windows (arm64, …, vulkan). All other finished build jobs passed: all four Android jobs, Windows arm64 blas, Linux, Apple, andsmoke-release-contract. Windows x64 CUDA was still running when this PR was opened.Cause
The arm64 lane installed LunarG's x64 SDK (
vulkansdk-windows-X64-1.4.313.2.exe), andtools/build.pypasses noVulkan_LIBRARYon arm64. FindVulkan therefore pickedC:/VulkanSDK/1.4.313.2/Lib/vulkan-1.lib, an x64 import library.The passing VS 2022 run 35850331498 found the same library (
-- Found Vulkan: C:/VulkanSDK/1.4.313.2/Lib/vulkan-1.lib) and linked it. Both runs linked with ClangCL'slld-linkagainst that same x64 library. What changed with the image is the LLVM version: Clang 19.1.5 onwindows-11-arm64, Clang 22.1.3 onwindows-11-vs2026-arm64. The newerlld-linkrejects the x64 import objects that 19.1.5 accepted. #91 flagged this lane as "first exercised by the next release dispatch", and this is what that dispatch hit. The cause is neither upstream v0.5.0 nor the other fixes.Change
.github/actions/install-vulkan-sdk-windows(arch: x64|arm64):warmplatform:https://sdk.lunarg.com/sdk/download/1.4.313.2/warm/vulkansdk-windows-ARM64-1.4.313.2.exe.https://vulkan.lunarg.com/sdk/files.json). Before this, the download wasn't checked at all.Lib/vulkan-1.libisn't built for the target machine (dumpbin /headers), so a wrong-architecture SDK can't reach the linker again.native_release.ymlWindows lanes use the action for both architectures.validate_wrapper.yml: newwindows-arm64-vulkanlane (pinned,v0.5.0) onwindows-11-vs2026-arm. It runs the release commandpython tools/build.py windows --arch arm64 --backend vulkanand checks thatggml-vulkan.dllis ARM64 and importsvulkan-1.dll. PR CI never built this lane before, which is why the problem only showed up in the release. It is wired into thewrapper-validationaggregate andtools/ci_scope.py.tests/test_windows_vulkan_sdk.pychecks the action's URLs and digests, and that both workflows use it. There's also a doc note indocs/platform_backend_strategy.md.Validation
python3 -m unittest discover -s tests: 161 tests OK.actionlint: the only findings are the known stalewindows-11-vs2026-armlabel and pre-existing shellcheck notes on PowerShell steps.windows-arm64-vulkan (pinned)and(v0.5.0), results to follow.Note on previously published arm64 Vulkan artifacts
v0.4.1 and v0.4.1-1
ggml-vulkan.dllfor Windows arm64 were linked by the VS 2022 toolchain against this x64 import library. I haven't determined whether that produced correct ARM64 import thunks. The new lane'sdumpbinchecks apply only to builds from now on. Testing an existing artifact on real Windows-on-ARM hardware would settle it.Independent review
A fresh reviewer independently confirmed:
files.json(HEAD requests only, nothing downloaded);\($machine\)pattern matches dumpbin's import-library output but not(ARM64EC);ci_scopetreats edits to the new action as native changes.It found no blockers, and all 25 hosted checks pass, including
windows-arm64-vulkan (pinned)and(v0.5.0).Its process note: do not re-run the failed job in 36004579792. A re-run uses that run's commit
6f2cb11, which still installs the x64 SDK. Dispatch a fresh release frommainafter this merges.Its other notes, none blocking:
windows-11-armrunner, without a GPU, usingdumpbin /importsandLoadLibrary.