Problem
Our cross-compilation toolchain in GitHub Actions builds a hand-curated subset of FPC packages (rtl, rtl-objpas, rtl-generics, fcl-process) instead of installing cross packages through FPC's normal package workflow.
That works until GocciaScript starts using a unit from another shipped FPC package. The recent Base64 failure is one example: Base64 lives in fcl-base, so cross builds failed even though the unit is part of the standard FCL distribution.
Why this is a design problem
The current approach makes cross-package availability an ad hoc allowlist maintained inside CI.
Consequences:
- standard FPC packages appear to be "missing" in cross builds even when they ship with FPC
- each new dependency risks another CI failure
- fixes tend to be incremental package exceptions rather than structural improvements
- the cross toolchain diverges from how a normal FPC installation behaves
Desired direction
Refactor the cross-toolchain bootstrap so it installs target packages through FPC's package install flow rather than manually compiling selected package units.
The end state should look more like:
- bootstrap cross compilers
- install the target RTL and package set into
$PREFIX/lib/fpc/$FPC_VERSION/units/$TARGET/*
- build GocciaScript against that installed unit tree instead of a curated package list
Acceptance criteria
- cross CI no longer depends on a manually maintained package allowlist
- standard shipped FPC/FCL packages are available to cross builds without per-package CI edits
- the project build step can use the installed cross unit tree directly
- the
Base64 / fcl-base problem becomes a non-issue under the new design
Problem
Our cross-compilation toolchain in GitHub Actions builds a hand-curated subset of FPC packages (
rtl,rtl-objpas,rtl-generics,fcl-process) instead of installing cross packages through FPC's normal package workflow.That works until GocciaScript starts using a unit from another shipped FPC package. The recent
Base64failure is one example:Base64lives infcl-base, so cross builds failed even though the unit is part of the standard FCL distribution.Why this is a design problem
The current approach makes cross-package availability an ad hoc allowlist maintained inside CI.
Consequences:
Desired direction
Refactor the cross-toolchain bootstrap so it installs target packages through FPC's package install flow rather than manually compiling selected package units.
The end state should look more like:
$PREFIX/lib/fpc/$FPC_VERSION/units/$TARGET/*Acceptance criteria
Base64/fcl-baseproblem becomes a non-issue under the new design