Files
Joseph MattielloandClaude Sonnet 5 e4e5415e55 fix(jaguar-toolchain): address final-review findings (CI, licensing, docs)
Consolidated fix pass over the 9-task Jaguar toolchain plan's final
whole-branch review:

- Add a no-push "docker build" validation step to jaguar-toolchain.yml so
  the Dockerfile is actually exercised in CI; correct
  jaguar-toolchain-image.yml's header comment, which falsely claimed that
  coverage already existed.
- Add tools/jaguar-toolchain/setup.sh to jaguar-toolchain-image.yml's
  paths: trigger -- the Dockerfile COPYs it, so editing it must republish.
- Align jaguar-toolchain.yml on actions/checkout@v7 (repo convention,
  matches its sibling workflow).
- Add an OCI description LABEL to the Dockerfile's final stage crediting
  42Bastian for new_bjl/lyxass, since the published image itself (not just
  the README) redistributes those Unlicense-credited binaries.
- README: state plainly that BootIntro-style demos needing
  `jagcrypt -tursi` still fail to build against the pinned pc_jagcrypt (a
  real upstream gap, 38/54 JaguarDemos Makefiles affected) without
  retracting the true claim that toolchain discovery/build wiring works;
  add the jagcrypt binary to the pin-refresh verification checklist.
- Add timeout-minutes + a concurrency block (PR-triggered workflow) to
  guard against rln's plain-HTTP fetch hanging; tighten the smoke step's
  `command -v` check to a per-tool loop so a missing tool actually fails
  the build.

Docker was unavailable in this environment (as in Task 7), so the new
validation step and LABEL are verified by YAML/shell syntax checks only,
not an actual build -- documented in
.superpowers/sdd/2026-08-23-jaguar-toolchain/final-fix-report.md.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-08-24 20:41:14 -04:00
..

Jaguar assembler toolchain

On-demand fetch + build for the Jaguar cross-development toolchain this repo's test suite can use: rmac/rln (68000 assembler + linker), lyxass (GPU/DSP assembler), pc_jagcrypt (BootIntro encrypt), and new_bjl (BJL_ROOT — loader stub binaries + 68K includes some JaguarDemos Makefiles reference).

None of these are vendored into this repo's git history — setup.sh clones each from its pinned source in PIN into a gitignored tools/vendor/jaguar-toolchain/, matching how test/jaguar-demos/ already handles its own on-demand clone.

Usage

make jaguar-toolchain-build   # fetch + build everything
eval "$(tools/jaguar-toolchain/setup.sh env)"   # add to PATH, set BJL_ROOT

smoke/hello68k.s and smoke/hellogpu.s are the minimal does-the-toolchain-work sources CI assembles on every change here (see .github/workflows/jaguar-toolchain.yml). Their header comments record the non-obvious syntax each assembler actually requires — notably that rmac rejects .org in a 68K section (the address goes on rln -a) and that lyxass emits nothing for code placed before its .run directive, while still exiting 0. Read them before writing new Jaguar assembly here.

Once built, test/jaguar-demos/run.sh's have_jag_toolchain() finds this automatically — make jaguar-demos-build starts actually building demos from source instead of skipping. Toolchain discovery and the rmac/rln/lyxass build path are proven working end-to-end; most individual demo builds still fail downstream of that, for a reason unrelated to this setup — see the license/build-gap note below.

Sources and licenses

tool source license
rmac / rln github.com/mwenge/rmac, tiddly.mooo.com/rln no LICENSE file found upstream
lyxass github.com/42Bastian/lyxass MIT
pc_jagcrypt github.com/cubanismo/pc_jagcrypt no LICENSE file found upstream
new_bjl github.com/42Bastian/new_bjl Unlicense (public domain) -- credit 42Bastian on any use

BootIntro-style demos and the jagcrypt -tursi gap: 38 of the 54 JaguarDemos Makefiles invoke jagcrypt -q -u -tursi as a build step, and the pinned cubanismo/pc_jagcrypt (verified against its real upstream history) has never supported a -tursi flag. Those demos' individual builds fail downstream of this toolchain for that reason -- a real gap in the pinned pc_jagcrypt upstream, not a bug in the fetch/build/discovery wiring here. Demos that only need rmac/rln/lyxass (no jagcrypt -tursi step), and any future microbenchmark ROMs built for #536, are unaffected.

Refreshing the pin

  1. Bump SHA= in PIN for the tool you're updating.
  2. make jaguar-toolchain-fetch && make jaguar-toolchain-build
  3. Confirm the built binaries still run (rmac -v, lyxass, rln -v, jagcrypt -- pc_jagcrypt's built binary is named jagcrypt, not pc_jagcrypt).
  4. Commit the PIN change.