#!/usr/bin/env bash source "$(dirname -- "${BASH_SOURCE[0]}")/lib.sh" [[ $# == 0 || ( $# == 1 && $1 == --rebuild ) ]] || die 'Usage: tools/build-kernel [--rebuild]' cd "$FDS_ROOT" use_xbps check_void_pin tools/prepare-void mkdir -p out/logs out/packages out/manifests package=fds-kernel-6.12.87_1.aarch64.xbps inputs=$(mktemp "$FDS_ROOT/out/kernel-inputs.XXXXXX") trap 'rm -f "$inputs"' EXIT sha256sum VOID_PACKAGES_COMMIT config/xbps-src.conf tools/build-kernel \ image/kernel/dasung.config packages/fds-kernel/template packages/fds-kernel/files/fds.config >"$inputs" if [[ $# == 0 && -s out/kernel/build-inputs.sha256 && -s out/kernel/payload.sha256 ]] && \ cmp -s "$inputs" out/kernel/build-inputs.sha256 && \ sha256sum -c out/kernel/artifacts.sha256 >/dev/null 2>&1 && \ (cd out/kernel && sha256sum -c payload.sha256 >/dev/null 2>&1); then XBPS_ARCH=aarch64 xbps-rindex -fa "out/packages/$package" printf 'PASS: reusing verified Pi kernel build with unchanged recorded inputs\n' exit 0 fi ( cd "$FDS_VOID" if [[ ${1:-} == --rebuild ]]; then xbps_src -f -a aarch64 pkg fds-kernel else xbps_src -a aarch64 pkg fds-kernel fi ) 2>&1 | tee out/logs/xbps-fds-kernel.log cp "$FDS_VOID/hostdir/binpkgs/$package" out/packages/ XBPS_ARCH=aarch64 xbps-rindex -fa "out/packages/$package" work=$(mktemp -d "$FDS_ROOT/out/kernel-build.XXXXXX") tar -xf "out/packages/$package" -C "$work" [[ -s $work/boot/kernel_2712.img && -s $work/boot/bcm2712-rpi-5-b.dtb ]] || die 'Missing Pi 5 kernel/DTB' # Preserve the existing mandatory display-protection requirement. while IFS= read -r setting; do [[ $setting == CONFIG_*=* || $setting == '# CONFIG_'*' is not set' ]] || continue grep -Fqx "$setting" "$work/boot/config-fds" || die "Dasung kernel requirement missing: $setting" done "$work/artifacts.sha256" cp "$work/artifacts.sha256" out/manifests/kernel-artifacts.sha256 cp "$inputs" "$work/build-inputs.sha256" (cd "$work" && find boot usr -type f -print0 | sort -z | xargs -0 sha256sum >payload.sha256) ln -sfn "${work##*/}" out/kernel printf 'PASS: pinned Pi 5 kernel, modules, DTBs and boot configuration built\n' printf 'SKIP: physical Pi boot and display behavior require hardware\n'