Skip to content

build(windows): build 32-bit (i686) only, reject 64-bit (#36) - #37

Merged
swstegall merged 1 commit into
mainfrom
develop
Aug 9, 2026
Merged

swstegall merged 1 commit into
mainfrom
develop

Conversation

@swstegall

Copy link
Copy Markdown
Owner

The launcher patches the game by reading the suspended 32-bit ffxivgame.exe thread context (GetThreadContext), which a 64-bit process cannot do, so a 64-bit Windows launcher can't patch or launch the game. Standardize Windows on the 32-bit i686-pc-windows-msvc target everywhere:

  • src/lib.rs: compile_error! rejecting x86_64-pc-windows-msvc so a non-functional 64-bit binary can never be built or shipped. Inert on macOS/Linux and on the i686 target.
  • ci.yml: the Windows leg builds + tests --target i686-pc-windows-msvc (macOS/Linux build their native host via a per-OS matrix target).
  • release-binaries.yml: Windows artifact is now i686-pc-windows-msvc.
  • Both workflows install NASM on the Windows runner: aws-lc-sys (via librqbit -> aws-lc-rs for torrent-piece SHA-1) assembles its crypto with NASM, and the 32-bit target has no prebuilt objects.
  • scripts/package-windows.cmd: 32-bit only (dropped the --target override).

Local cargo build / cargo run default to 32-bit via a per-machine, gitignored .cargo/config.toml pinning build.target = i686-pc-windows-msvc; a committed pin can't be used because Cargo config is not host-conditional and would force i686 on macOS/Linux checkouts. Documented in dev-environment.md, CLAUDE.md, and AGENTS.md.

The launcher patches the game by reading the suspended 32-bit ffxivgame.exe
thread context (GetThreadContext), which a 64-bit process cannot do, so a
64-bit Windows launcher can't patch or launch the game. Standardize Windows
on the 32-bit i686-pc-windows-msvc target everywhere:

- src/lib.rs: compile_error! rejecting x86_64-pc-windows-msvc so a
  non-functional 64-bit binary can never be built or shipped. Inert on
  macOS/Linux and on the i686 target.
- ci.yml: the Windows leg builds + tests --target i686-pc-windows-msvc
  (macOS/Linux build their native host via a per-OS matrix target).
- release-binaries.yml: Windows artifact is now i686-pc-windows-msvc.
- Both workflows install NASM on the Windows runner: aws-lc-sys (via
  librqbit -> aws-lc-rs for torrent-piece SHA-1) assembles its crypto with
  NASM, and the 32-bit target has no prebuilt objects.
- scripts/package-windows.cmd: 32-bit only (dropped the --target override).

Local `cargo build` / `cargo run` default to 32-bit via a per-machine,
gitignored .cargo/config.toml pinning build.target = i686-pc-windows-msvc;
a committed pin can't be used because Cargo config is not host-conditional
and would force i686 on macOS/Linux checkouts. Documented in
dev-environment.md, CLAUDE.md, and AGENTS.md.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@swstegall
swstegall merged commit b8b6a8d into main Aug 9, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants