document optional Linux cross-build path

Wine runs the test binary cleanly when targeting x86_64-pc-windows-gnu,
so wire that target's runner to wine in .cargo/config.toml. The default
windows-msvc build is unaffected.

README gains a 'Linux Cross-Build (Optional)' section with the dotnet
10 / mingw-w64 / wine prerequisites and the EnableWindowsTargeting=true
recipe needed to cross-build the net8.0-windows C# UI from Linux.
This commit is contained in:
Claude
2026-04-28 17:02:38 +00:00
parent 3adb61b751
commit 65c415a59a
2 changed files with 29 additions and 0 deletions
+6
View File
@@ -1,2 +1,8 @@
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]
# Linux cross-build (optional). Only takes effect when you explicitly pass
# `--target x86_64-pc-windows-gnu`. Windows builds (the default) are unaffected.
# See README "Linux cross-build" for prerequisites.
[target.x86_64-pc-windows-gnu]
runner = "wine"
+23
View File
@@ -150,6 +150,29 @@ cargo build --release
Interactive GUI/TUI flows now have a Windows VM smoke harness for packaged installer behavior, while broader automated coverage is still limited.
## Linux Cross-Build (Optional)
Day-to-day work happens on Windows. This section documents an opt-in path for type-checking and running unit tests from a Linux host (useful for CI containers or quick iteration without a VM).
Prerequisites (Ubuntu 24.04 names):
- `dotnet-sdk-10.0` — the C# UI build script (`build.rs`) invokes `dotnet publish`.
- `mingw-w64` — provides the `x86_64-w64-mingw32-*` toolchain that the `windows-gnu` target links against.
- `wine` — runs the resulting test binary. Already wired up via `runner = "wine"` in [`.cargo/config.toml`](.cargo/config.toml) for the `x86_64-pc-windows-gnu` target only.
- `rustup target add x86_64-pc-windows-gnu`.
The dotnet SDK needs `EnableWindowsTargeting=true` to cross-build a `net8.0-windows` project from Linux:
```bash
EnableWindowsTargeting=true cargo check --target x86_64-pc-windows-gnu
EnableWindowsTargeting=true cargo test --target x86_64-pc-windows-gnu
```
Caveats:
- `cargo run` (and the `package`/`install`/`uninstall` flows generally) require real Win32 — Wine handles unit-test execution but is not a substitute for the Windows VM smoke harness.
- The `windows-msvc` target (the default on Windows) is unaffected by this section.
## Windows VM Smoke Test
A Windows Hyper-V Vagrant VM now lives in [`Vagrantfile`](C:\Users\jasonross\workspace\covenant-setup\Vagrantfile), and the host harness in [`scripts/run-windows-vm-smoke.ps1`](C:\Users\jasonross\workspace\covenant-setup\scripts\run-windows-vm-smoke.ps1) packages `covenant-setup`, boots the VM, opens Hyper-V's console viewer, and runs the packaged installer inside the guest's interactive desktop session.