From bf7f1fb67ba2f081ecccdf24d45be6785da240c1 Mon Sep 17 00:00:00 2001 From: zackees Date: Sun, 28 Jun 2026 14:00:09 -0700 Subject: [PATCH] ci: re-add aarch64-pc-windows-msvc lane via blessed soldr build (#1012 PR 6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR 6 of 6 in soldr#1012. Closes the surgical sweep — fbuild's release matrix now ships 6 of 6 canonical targets, all from ubuntu-latest, all via \`soldr build\`. ## What this changes 1. **Re-adds the \`aarch64-pc-windows-msvc\` matrix entry** that was removed in FastLED/fbuild#786 due to the ring 0.17.x oversight. The blessed path (soldr#1015 clang shim + soldr#1016 Commands::Build prep) sidesteps the ring oversight by installing our shim ahead of system clang on PATH — ring's hardcoded \`c.compiler("clang")\` (build.rs:563) finds the shim, which re-routes to clang-cl for any \`--target=*-pc-windows-msvc\` arg. 2. **Migrates the win-msvc xwin lane to \`soldr build\`** instead of bare \`cargo xwin build\`. soldr build's Commands::Build arm installs the clang shim, sets cc-rs target env vars, and falls through to cargo-xwin's live SDK download when the catalogue xwin-cache row is absent for the target arch (today: arm64). x64 keeps its existing fast path; arm64 gains a working path for the first time. 3. **Bumps setup-soldr pinned soldr version from 0.7.61 → 0.7.63** to pull soldr#1015 (clang shim), soldr#1016 (Commands::Build prep), and soldr#1018 (always install shim regardless of cache state). Earlier soldr versions don't have the shim binary. ## After this lands \`fbuild release-auto.yml\` ships: - linux-musl-x64 - linux-musl-arm64 - mac-darwin-x64 - mac-darwin-arm64 - win-msvc-x64 - win-msvc-arm64 ← NEW (re-enabled) All on \`ubuntu-latest\`. Zero macOS/Windows runners. Zero cargo-xwin-style env-var workarounds; the shim handles everything. ## Followups (soldr#1010 Phase 4-7, not in #1012 scope) * Forge dispatch + ingest the arm64 xwin-cache row so soldr build's catalogue path materializes the SDK and skips cargo-xwin's live download entirely. Currently the shim works without it; this follow-up is purely a speed optimization. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/release-auto.yml | 26 +++++++++++--------- .github/workflows/template_native_build.yml | 27 +++++++++++++-------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/.github/workflows/release-auto.yml b/.github/workflows/release-auto.yml index 76a8f9f7..797f92db 100644 --- a/.github/workflows/release-auto.yml +++ b/.github/workflows/release-auto.yml @@ -198,18 +198,20 @@ jobs: linux_cross: false macos_cross: false - # NOTE: aarch64-pc-windows-msvc deliberately not in the - # matrix today. cargo-xwin + ring 0.17.x has a known - # incompatibility on linux-cross-to-arm64-windows: cc-rs - # selects plain `clang` (not `clang-cl`) for the aarch64 - # MSVC target despite identical `CC_=clang-cl` env - # vars working for the x86_64 lane. Ring's `curve25519.c` - # compile then fails at clang receiving `/imsvc ` - # (clang-cl-style include flags) and rejecting them. Adding - # this back blocks on either: ring 0.18+ with arm-msvc - # cross-fix; a cc-rs version bump that respects target env - # for arm64; or fbuild switching off `rustls-tls` (drops - # ring). Tracked in soldr#1006 Lane 2. + # aarch64-pc-windows-msvc re-enabled via soldr#1012 PR 6. + # The ring 0.17.x oversight (build.rs:563 hardcodes + # `c.compiler("clang")` for aarch64-windows-msvc, overriding + # whatever `CC_aarch64_pc_windows_msvc=clang-cl` says) is now + # sidestepped by soldr-clang-shim (soldr#1015) which routes + # plain `clang` to clang-cl when --target=*-pc-windows-msvc. + # `soldr build` (soldr#1013 / soldr#1016) installs the shim + # on PATH for any MSVC target, so ring's compile lands on + # clang-cl regardless of ring's hardcoded override. + - target: aarch64-pc-windows-msvc + runner: ubuntu-latest + binary_ext: ".exe" + linux_cross: false + macos_cross: false uses: ./.github/workflows/template_native_build.yml with: diff --git a/.github/workflows/template_native_build.yml b/.github/workflows/template_native_build.yml index dcbc9c5a..affb0f0d 100644 --- a/.github/workflows/template_native_build.yml +++ b/.github/workflows/template_native_build.yml @@ -72,17 +72,15 @@ jobs: - name: Setup soldr id: setup-soldr - # v0.9.62 defaults to soldr 0.7.51 — predates the `soldr prepare` - # builtin (added 0.7.54). v0.9.63 ships with 0.7.59 as the default - # which is what the mac-cross-from-linux lane needs to fetch the - # Apple SDK. Bump in one place so the whole template benefits. + # Bumped from 0.7.59 → 0.7.63 to pull soldr#1012 PRs 1+4+5+6: + # `soldr build` blessed verb, soldr-clang-shim binary, and + # Commands::Build blessed-cross-compile prep. Required for + # the aarch64-pc-windows-msvc lane re-added in this PR to + # sidestep the ring 0.17.x build.rs:563 oversight via the + # clang shim. uses: zackees/setup-soldr@v0.9.63 with: - # Pin the soldr version explicitly so a future bump of the - # action's default doesn't silently change build behavior in - # this template. 0.7.59 is the latest PyPI/npm/GH-Releases - # release at time of authoring (next release will be 0.7.60). - version: "0.7.59" + version: "0.7.63" cache: true build-cache: true target-cache: true @@ -200,7 +198,16 @@ jobs: -p fbuild-cli \ -p fbuild-daemon elif [ "${{ runner.os }}" = "Linux" ] && [[ "${{ inputs.target }}" == *-pc-windows-msvc ]]; then - cargo xwin build --release --target ${{ inputs.target }} \ + # Blessed Linux→Windows MSVC path (soldr#1012 PR 6). + # `soldr build` installs the soldr-clang-shim ahead of + # system clang on PATH so ring's hardcoded + # `c.compiler("clang")` (build.rs:563) routes to clang-cl + # for aarch64-windows-msvc. For x64 the shim is harmless + # passthrough. cargo-xwin is still installed (handles + # SDK download); soldr build delegates to cargo-xwin via + # internal env vars when the catalogue xwin-cache row is + # absent for the target arch. + soldr build --release --target ${{ inputs.target }} \ -p fbuild-cli \ -p fbuild-daemon elif [[ "${{ inputs.target }}" == *-unknown-linux-musl ]]; then