Files
forgefirm/BUILD.md
T
ScottW514 0a05b6b114 docs: present-state build and update docs; fix the ring-size arithmetic
- kas/README.md: the real-time rationale rests on the feeder's bounded
  queue depth, not ring size; the ring is 16 MiB (~84 s at 200 kHz,
  ~28 min at the 10 kHz cloud tick), a capacity for cloud-mode preload.
- BUILD.md, kas config, release checklist, cold-build workflow: only
  forgefirm and meta-openglow (branch scarthgap) are cloned as
  siblings; every ForgeFIRM source repo is fetched by pinned SRCREV.
- UPDATE-SYSTEM.md reads as the present-state design: the cloud-mode
  compatibility baseline is the cloud client's configured firmware
  version, not release metadata; decisions and open items listed
  plainly.
- README.md states what GRBL mode still needs the Glowforge service
  for (camera-referenced homing) and what runs without it.
- BRINGUP.md: generic build-host and fwup-lab references, the retained
  reproductions of the no-fire drill, the System tab.
- LIGHTBURN.md: the arm-window timeouts are machine settings.
- forgefirm-image.bb describes forgectrl as the machine-services
  daemon and points at the right backlog entry.
- American spelling throughout.
2026-08-15 06:12:51 -04:00

93 lines
3.1 KiB
Markdown

# Build
ForgeFIRM is built with [**kas**](https://kas.readthedocs.io/), which manages
the Yocto layers and pins their versions. The **forgefirm** repo is the base
of the build.
Builds run on a Linux host, or on **WSL2** (officially supported by Yocto —
keep the tree on the native ext4 filesystem, not `/mnt/c`).
## Host setup
On Ubuntu/Debian (including WSL2), install the Yocto host packages and kas:
```console
sudo apt-get install -y gawk wget git diffstat unzip texinfo gcc build-essential \
chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 python3-subunit zstd liblz4-tool file \
locales libacl1 lz4 rsync
sudo locale-gen en_US.UTF-8
pipx install kas # use pipx — Ubuntu 24.04 (PEP 668) blocks `pip install --user`
```
For other distros, see the
[Yocto Project Quick Build](https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html).
Do not build as root (the Yocto sanity checks refuse it).
## Get the sources
Clone the two repos as siblings (the kas config references `meta-openglow`,
branch `scarthgap`, at `../meta-openglow`; kas fetches the upstream Yocto
layers itself, and every ForgeFIRM source repo — the kernel module, the
controller, the daemon, the cloud apps — is fetched by its recipe at a pinned
revision):
```console
git clone https://github.com/ScottW514/forgefirm.git
git clone -b scarthgap https://github.com/ScottW514/meta-openglow.git
```
```
openglow-forgefirm/
├── forgefirm/ ← base repo, build runs here
└── meta-openglow/
```
## Build the image
```console
cd forgefirm
kas build kas/forgefirm-glowforge.yml
```
kas fetches the upstream layers into `forgefirm/layers/`, builds in
`forgefirm/build/`, and produces the bootable image at:
```
forgefirm/build/tmp/deploy/images/glowforge/forgefirm-image-glowforge.rootfs.wic.gz
```
(The `u-boot-glowforge.imx` also deployed there is **reference-only**: every
supported install/boot flow keeps the factory bootloader on the eMMC. Its env
Kconfig now matches the factory layout — 0x80000 primary / 0x82000 redundant —
but it is not wired into any install path and flashing it is unsupported.)
For exact, reproducible layer versions, generate a lockfile once:
```console
kas lock kas/forgefirm-glowforge.yml
```
See [`kas/README.md`](kas/README.md) for details, the container-build option,
and the Scarthgap migration backlog.
## Third-party firmware licensing
The i.MX6 BSP installs NXP firmware blobs (VPU, EPDC) that are distributed
under NXP's firmware EULA. The build config accepts it
(`ACCEPT_FSL_EULA = "1"`), and the image ships the license text alongside the
blobs at `/usr/share/licenses/firmware-imx/EULA` — keep it there in any
redistributed image. The SDMA firmware comes from `linux-firmware`, which
carries its own license package.
## Write to an SD card
```console
cd build/tmp/deploy/images/glowforge
sudo zcat forgefirm-image-glowforge.rootfs.wic.gz | dd of=/dev/sdX bs=1M
```
To install onto the factory eMMC (into the unused A/B slot, with the factory
firmware archived first — one OS runs at a time), see
[`INSTALL.md`](INSTALL.md).