Distribute native per-arch stable binaries (no FPC/make on install)
- Type: feature (release / distribution)
- Status: backlog
- Owner: —
- Opened: 2026-06-24
- Found-by:
./install.shon aarch64 — committed stable binary is x86-64 only, so install aborted ("pinned compiler did not run a smoke compile").
Goal
A fresh git clone should be runnable on any supported host without FPC or
make — the self-bootstrap promise. Today only stable_linux_amd64/ ships an
x86-64 binary; on aarch64 / arm32 / i386 there is no runnable compiler in the
checkout, so install.sh must fall back to make bootstrap (needs FPC).
(Interim: install.sh now detects this and offers make bootstrap; this ticket
is the real fix — ship the binaries.)
Scope
- Commit a native stable binary per host arch:
stable_linux_<arch>/…(x86_64 / aarch64 / arm32 / i386), each an ELF that RUNS on that arch. Produced by the existing cross backends:pxx --target=<arch> compiler.pas. - Host-default target. A cross-built
pxx-aarch64still defaultsTargetArch := TARGET_X86_64at startup (compiler.pas), so by itself it would emit x86-64 code on an aarch64 host. Two options:- the generated
./pxxwrapper passes--target=<host-arch>(cheap, works now —tools/install.shwould add it for the non-x86_64 native binary), or - a real host-default: detect/compile-in the native target so bare
pxxemits host code (cleaner; needed for a binary used without the wrapper).
- the generated
- Verify each native binary self-hosts under QEMU (compile a hello + the regression set) before committing.
- Wire into
tools/release.shso every release ships all four.
Done when
git clone+./install.shon aarch64 (and arm32 / i386) produces a working./pxxwith no FPC/make, building+running the demos.makegate unaffected (these are committed artifacts, not built in CI).
Notes
- Binary size: ~3 MB each → ~9 MB added to the repo. Acceptable for the self-bootstrap guarantee; revisit with git-lfs if it grows.
- The pin/stabilize machinery is x86-64-centric (
stable_linux_amd64/); this generalises the layout tostable_linux_<arch>/.
Log
- 2026-06-24 — DONE. Committed native cross-built binaries
native/pxx-{aarch64, arm32,i386}(x86-64 host keeps the auto-trackingpinnedsymlink). Built with the pinned compiler (pxx --target=<arch> compiler.pas); each verified end-to-end under QEMU: the binary runs on its arch and compiles+runs a hello. Host-default-target handled by option 1 (wrapper injects--target=<host>):tools/install.sh --target ARCHadds it, and rootinstall.shselectsnative/pxx-<arch>for the host and passes the target. So a baregit clone./install.shon aarch64/arm32/i386 needs no FPC/make. (Native make-bootstrap remains the fallback if no committed binary matches.) NOTE: these binaries are committed artifacts and go stale on a compiler change; rebuild them when re-pinning (amaketarget to regenerate is a follow-up). Option-2 (a real compiled-in host default so barepxxneeds no--target) is left for later — the wrapper covers the install UX today.