Files
forgefirm/kas/forgefirm-glowforge.yml
ScottW514 b2f50ad765 Release v0.0.1: pin meta-openglow, refresh the lock, add the acceptance artifact
The kas configuration takes the pinned-remote meta-openglow block, with
its commit in the lock file (d655e1e, the read-only rootfs), so a fresh
clone builds the release without a sibling checkout. The lock keeps the
upstream layers where they were.

releases/v0.0.1 carries the acceptance artifact the bench exported for
this image: campaign c-20260909160235-7649 on 20260909150456, 83 tests,
83 satisfied, none inherited, release authorized. The release gate
recomputes every test's fingerprint from the manifest inside the release
rootfs and signs only when the recorded results agree.
2026-09-09 13:15:37 -04:00

128 lines
4.9 KiB
YAML

# ============================================================================
# ForgeFIRM - kas build configuration (factory Glowforge control board)
# ============================================================================
# The forgefirm repo is the BASE: it controls the build and the output firmware
# images land here (build/tmp/deploy/images/glowforge/). The install, build and
# release procedures are on the documentation site: https://docs.forgefirm.org/
#
# Target : Yocto Scarthgap (5.0 LTS) + linux-fslc 6.12 (mainline LTS)
# Machine: glowforge (i.MX6 Solo SOM inside Basic/Plus/Pro)
# Distro : forgefirm
#
# kas generates bblayers.conf and local.conf.
#
# Run from the forgefirm repo root so outputs land inside it:
# cd forgefirm
# kas build kas/forgefirm-glowforge.yml # fetch layers + full build
# kas shell kas/forgefirm-glowforge.yml # interactive bitbake env
# kas dump kas/forgefirm-glowforge.yml # show resolved config
#
# Reproducible pins (after first checkout):
# kas lock kas/forgefirm-glowforge.yml # writes kas/forgefirm-glowforge.lock.yml
# ============================================================================
header:
version: 14
machine: glowforge
distro: forgefirm
target: forgefirm-image
# kas uses KAS_WORK_DIR (the dir you run kas from = the forgefirm repo root).
# Upstream layers are cloned into ./layers/, the build runs in ./build/, and
# caches go in ./downloads + ./sstate-cache - all gitignored, all inside forgefirm.
repos:
# --- This repo (forgefirm) - auto-detected, no url/path needed -------------
forgefirm:
layers:
meta-forgefirm:
# --- Upstream layers (cloned + pinned to the scarthgap branch by kas) ------
poky:
url: https://git.yoctoproject.org/poky.git
branch: scarthgap
path: layers/poky
layers:
meta:
meta-poky:
meta-openembedded:
url: https://github.com/openembedded/meta-openembedded.git
branch: scarthgap
path: layers/meta-openembedded
layers:
meta-oe:
meta-python:
meta-networking:
meta-freescale:
url: https://github.com/Freescale/meta-freescale.git
branch: scarthgap
path: layers/meta-freescale
layers:
.:
meta-freescale-distro:
# Provides conf/distro/include/fslc-base.inc, required by the forgefirm distro.
url: https://github.com/Freescale/meta-freescale-distro.git
branch: scarthgap
path: layers/meta-freescale-distro
layers:
.:
# --- meta-openglow - Glowforge BSP layers ---------------------------------
# Referenced as a local sibling checkout (no url => kas performs no git ops,
# so in-place BSP edits are what gets built). The kernel-module-glowforge
# sources are NOT a layer; the kernel-module-glowforge.bb recipe fetches them
# by pinned SRCREV, so kas does not manage them here.
# Release: the pinned-remote block, the commit in the lock file
# (kas/forgefirm-glowforge.lock.yml). The local-sibling alternative for
# development (no url => kas performs no git ops, so in-place BSP edits
# are what gets built; see the site, Developers, "Release flow"):
# meta-openglow:
# path: ../meta-openglow
# layers:
# meta-openglow-core:
# meta-glowforge-bsp:
meta-openglow:
url: https://github.com/openglow-org/meta-openglow.git
branch: scarthgap
path: layers/meta-openglow
layers:
meta-openglow-core:
meta-glowforge-bsp:
# ----------------------------------------------------------------------------
# local.conf additions
# ----------------------------------------------------------------------------
local_conf_header:
# Accept the NXP/Freescale firmware EULA - required to unpack firmware-imx
# (i.MX SDMA/VPU firmware blobs) pulled in by the i.MX6 BSP. ForgeFIRM targets
# the factory i.MX6 Glowforge board, so this firmware is intrinsic to the image.
eula: |
ACCEPT_FSL_EULA = "1"
# The kernel defaults to linux-fslc 6.12 in conf/machine/glowforge.conf
# (with the factory drivers forward-ported - EPIT/SDMA/OV5648/glowforge.ko -
# see the site, Developers, "Build"). This explicit pin is redundant but harmless.
kernel: |
PREFERRED_PROVIDER_virtual/kernel = "linux-fslc"
PREFERRED_VERSION_linux-fslc = "6.12%"
# NOTE: debug-tweaks (passwordless root) is deliberately NOT set here. It
# would apply to every target built from this config, including the release
# forgefirm-image. It lives in forgefirm-image-dev.bb's IMAGE_FEATURES so a
# single build yields a hardened release image and a debug dev image.
# release.sh checks the built release rootfs for the root policy (an
# empty root field, sshd refusing root and empty passwords).
build-tweaks: |
# Parallelism sized for a 12-core / 16 GB build VM; raise on larger hosts.
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
# Caches kept inside the forgefirm repo (gitignored):
DL_DIR ?= "${TOPDIR}/../downloads"
SSTATE_DIR ?= "${TOPDIR}/../sstate-cache"