From 0853cea20a5e85705f69884feee405a9510bd1ff Mon Sep 17 00:00:00 2001 From: Jhin Lee Date: Thu, 24 Sep 2026 08:07:06 -0400 Subject: [PATCH 1/2] ci: build Windows ARM64 with Visual Studio 2026 GitHub is migrating the windows-11-arm label to the Windows 11 Arm64 with Visual Studio 2026 image between 2026-09-21 and 2026-09-30 (actions/runner-images#14602). That image has no VS 2022 instance, so the windows-arm64-full preset's hardcoded "Visual Studio 17 2022" generator fails at configure. Native release run 35976011426 lost both arm64 lanes (blas, vulkan) this way; the same lanes passed on the VS 2022 image in run 35850331498 on the same commit. Switch the preset to "Visual Studio 18 2026" and pin the arm64 jobs to windows-11-vs2026-arm so the image cannot flip mid-rollout. ClangCL, the ARM64 and x64 MSVC tools, and CMake 4.4 are all present on that image. --- .github/workflows/native_release.yml | 4 ++-- .github/workflows/validate_wrapper.yml | 2 +- CMakePresets.json | 2 +- docs/platform_backend_strategy.md | 6 ++++++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/native_release.yml b/.github/workflows/native_release.yml index b76e433..56f6f10 100644 --- a/.github/workflows/native_release.yml +++ b/.github/workflows/native_release.yml @@ -697,7 +697,7 @@ jobs: backend_glob: "*ggml-blas*.dll" - arch: arm64 vcpkg_triplet: arm64-windows - runs_on: windows-11-arm + runs_on: windows-11-vs2026-arm backend: vulkan include_core: true needs_cuda: false @@ -706,7 +706,7 @@ jobs: backend_glob: "*ggml-vulkan*.dll" - arch: arm64 vcpkg_triplet: arm64-windows - runs_on: windows-11-arm + runs_on: windows-11-vs2026-arm backend: blas include_core: false needs_cuda: false diff --git a/.github/workflows/validate_wrapper.yml b/.github/workflows/validate_wrapper.yml index f63edae..8d7eb1c 100644 --- a/.github/workflows/validate_wrapper.yml +++ b/.github/workflows/validate_wrapper.yml @@ -134,7 +134,7 @@ jobs: windows-arm64-kleidiai: needs: changes if: needs.changes.outputs.native == 'true' - runs-on: windows-11-arm + runs-on: windows-11-vs2026-arm timeout-minutes: 30 strategy: fail-fast: false diff --git a/CMakePresets.json b/CMakePresets.json index 2ac4822..9fb51bd 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -175,7 +175,7 @@ "name": "windows-arm64-full", "inherits": "windows-base", "binaryDir": "${sourceDir}/build/wa64", - "generator": "Visual Studio 17 2022", + "generator": "Visual Studio 18 2026", "architecture": { "value": "ARM64", "strategy": "set" diff --git a/docs/platform_backend_strategy.md b/docs/platform_backend_strategy.md index 4047e42..bdde67f 100644 --- a/docs/platform_backend_strategy.md +++ b/docs/platform_backend_strategy.md @@ -69,6 +69,12 @@ The Android artifact check is `tools/validate_android_cpu_isa.py --help`. - `third_party/opencl-stubs/` - auto-built OpenCL ICD loader from `third_party/OpenCL-ICD-Loader` + `third_party/OpenCL-Headers` - Linux arm64 builds on x64 runners require `aarch64-linux-gnu-gcc/g++`, `libopenblas-dev:arm64`, and `libvulkan-dev:arm64`. +- Windows ARM64 uses the `Visual Studio 18 2026` generator (CMake >= 4.2) with + the ClangCL toolset. CI pins the `windows-11-vs2026-arm` runner because the + `windows-11-arm` label moved to that image in September 2026 + (actions/runner-images#14602), and that image has no VS 2022 instance. With + only VS 2022 installed, pass `-G "Visual Studio 17 2022"` after + `--preset windows-arm64-full`. - Windows MSVC builds disable IPO/LTCG for `llama-common` and `mtmd` by default. Current MSVC `link.exe` can access-violate when linking the large `llama-common` utility DLL with `/LTCG`. CMake's automatic Windows export From 4a88e863340ecedc122513987fdc891a01911d29 Mon Sep 17 00:00:00 2001 From: Jhin Lee Date: Thu, 24 Sep 2026 08:19:45 -0400 Subject: [PATCH 2/2] docs: scope the VS 2022 fallback to direct cmake configures --- docs/platform_backend_strategy.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/platform_backend_strategy.md b/docs/platform_backend_strategy.md index bdde67f..d1a0158 100644 --- a/docs/platform_backend_strategy.md +++ b/docs/platform_backend_strategy.md @@ -72,9 +72,11 @@ The Android artifact check is `tools/validate_android_cpu_isa.py --help`. - Windows ARM64 uses the `Visual Studio 18 2026` generator (CMake >= 4.2) with the ClangCL toolset. CI pins the `windows-11-vs2026-arm` runner because the `windows-11-arm` label moved to that image in September 2026 - (actions/runner-images#14602), and that image has no VS 2022 instance. With - only VS 2022 installed, pass `-G "Visual Studio 17 2022"` after - `--preset windows-arm64-full`. + (actions/runner-images#14602), and that image has no VS 2022 instance. + `tools/build.py windows --arch arm64` therefore needs VS 2026. With only + VS 2022 installed, configure directly with + `cmake --preset windows-arm64-full -G "Visual Studio 17 2022"` in a fresh + build directory. - Windows MSVC builds disable IPO/LTCG for `llama-common` and `mtmd` by default. Current MSVC `link.exe` can access-violate when linking the large `llama-common` utility DLL with `/LTCG`. CMake's automatic Windows export