docs(ci): ADR-ci-003 — cross-platform release builds (D1 matrix)
Record the multi-platform build strategy as its own decision: cargo-zigbuild for the four non-macOS targets, the static/standalone posture per platform, the Windows synchronization stub, the test->build matrix workflow, and the macOS deferral with its licensing rationale (the public CI image can't carry the SDK). Shrinks the ci-001 amendment to a pointer; updates the index. Runtime-verified by the user: Linux x86_64 + Windows aarch64 run correctly.
This commit is contained in:
@@ -24,34 +24,14 @@ it rather than restating it.
|
||||
> previously forced website ADRs to be renumbered (see that namespace's
|
||||
> history note and ADR-0000 "Numbering discipline").
|
||||
|
||||
## Amendment — 2026-06-13: D1 matrix expanded (non-macOS targets)
|
||||
## Amendment — 2026-06-13: D1 matrix (non-macOS)
|
||||
|
||||
The release now builds the **four non-macOS D1 targets**, all cross-compiled
|
||||
from the Linux x86_64 runner with **`cargo-zigbuild`** (Zig's bundled clang +
|
||||
libc as one universal cross cc/linker — including the `cc`-crate compile of
|
||||
rusqlite's bundled SQLite C — added to the flake devShell, replacing the
|
||||
single-target musl cc):
|
||||
|
||||
- `x86_64-unknown-linux-musl`, `aarch64-unknown-linux-musl` — static (D2);
|
||||
- `x86_64-pc-windows-gnu`, `aarch64-pc-windows-gnullvm` — standalone `.exe`.
|
||||
|
||||
`release.yaml` became a **`test` (once, host) → `build` (matrix over the four
|
||||
targets)** workflow; each matrix job uploads its artifact + `.sha256` to the
|
||||
shared release (idempotent create-or-get).
|
||||
|
||||
**Windows link fix:** Rust's std links `-lsynchronization` (WaitOnAddress
|
||||
thread-parking), an import lib that rust-overlay's toolchain doesn't ship and
|
||||
Zig's mingw lacks. Those symbols are forwarded by `kernel32` (already linked),
|
||||
so an **empty stub** `libsynchronization.a` (committed at `ci/winstub/`, wired
|
||||
via `.cargo/config.toml` for the Windows targets only) satisfies the linker.
|
||||
Verified locally: all four build; the Linux binaries are statically linked; the
|
||||
Windows artifacts are valid PE32+ (x86-64 / Aarch64) — not yet runtime
|
||||
smoke-tested on Windows.
|
||||
|
||||
**macOS stays deferred** (see Deferred): `arboard`→AppKit needs Apple's SDK,
|
||||
which a Linux runner can't supply cleanly — and the CI image is *public*, so the
|
||||
SDK can't be baked in even if the licensing grey area were accepted. macOS is
|
||||
its own step (osxcross + a private SDK, or a real Mac runner).
|
||||
§3 (Release) below describes the original **single-target** (x86_64 Linux) job.
|
||||
The release is now a **`test` → `build` matrix** over the four non-macOS D1
|
||||
targets (Linux + Windows × x86_64/aarch64), cross-built with `cargo-zigbuild`.
|
||||
The full decision — tooling, targets, the Windows `synchronization` stub, the
|
||||
matrix shape, and the macOS deferral with its licensing rationale — is recorded
|
||||
in its own record: **[ADR-ci-003](20260613-adr-ci-003.md)**.
|
||||
|
||||
## Context
|
||||
|
||||
|
||||
Reference in New Issue
Block a user