Files
talos-builder/Makefile
T
2026-04-07 22:21:17 -05:00

162 lines
5.4 KiB
Makefile

PKG_VERSION = v1.12.0
TALOS_VERSION = v1.12.6
SBCOVERLAY_VERSION = v0.2.0
PUSH ?= true
REGISTRY ?= ghcr.io
ifndef RPI_MODEL
RPI_MODEL = rpi5
endif
REGISTRY_USERNAME ?= talos-$(RPI_MODEL)
TAG ?= $(shell git describe --tags --exact-match)
SED ?= sed
ASSET_TYPE ?= rpi_5
CONFIG_TXT ?= dtparam=i2c_arm=on
EXTENSIONS ?=
EXTENSION_ARGS = $(foreach ext,$(EXTENSIONS),--system-extension-image $(ext))
EXTRA_KERNEL_ARGS ?=
EXTRA_KERNEL = $(foreach arg,$(EXTRA_KERNEL_ARGS),--extra-kernel-arg $(arg))
PKG_REPOSITORY = https://github.com/siderolabs/pkgs.git
TALOS_REPOSITORY = https://github.com/siderolabs/talos.git
SBCOVERLAY_REPOSITORY = https://github.com/siderolabs/sbc-raspberrypi
CHECKOUTS_DIRECTORY := $(PWD)/checkouts
PATCHES_DIRECTORY := $(PWD)/patches
PKGS_TAG = $(shell cd $(CHECKOUTS_DIRECTORY)/pkgs && git describe --tag --always --dirty --match v[0-9]\*)
TALOS_TAG = $(shell cd $(CHECKOUTS_DIRECTORY)/talos && git describe --tag --always --dirty --match v[0-9]\*)
SBCOVERLAY_TAG = $(shell cd $(CHECKOUTS_DIRECTORY)/sbc-raspberrypi && git describe --tag --always --dirty --match v[0-9]\*)
#
# Help
#
.PHONY: help
help:
@echo "checkouts : Clone repositories required for the build"
@echo "patches : Apply all patches for Raspberry Pi 5"
@echo "kernel : Build kernel"
@echo "overlay : Build Raspberry Pi 5 overlay"
@echo "imager : Build imager docker image"
@echo "installer-base : Build installer-base docker image"
@echo "kern_initramfs : Build kernel and initramfs"
@echo "installer : Build installer"
@echo "image : Build disk image for Raspberry Pi 5"
@echo "pi5 : Full build pipeline for Raspberry Pi 5"
@echo "release : Use only when building the final release, this will tag relevant images with the current Git tag."
@echo "clean : Clean up any remains"
#
# Checkouts
#
.PHONY: checkouts checkouts-clean
checkouts:
git clone -c advice.detachedHead=false --branch "$(PKG_VERSION)" "$(PKG_REPOSITORY)" "$(CHECKOUTS_DIRECTORY)/pkgs"
git clone -c advice.detachedHead=false --branch "$(TALOS_VERSION)" "$(TALOS_REPOSITORY)" "$(CHECKOUTS_DIRECTORY)/talos"
git clone -c advice.detachedHead=false --branch "$(SBCOVERLAY_VERSION)" "$(SBCOVERLAY_REPOSITORY)" "$(CHECKOUTS_DIRECTORY)/sbc-raspberrypi"
checkouts-clean:
rm -rf "$(CHECKOUTS_DIRECTORY)/pkgs"
rm -rf "$(CHECKOUTS_DIRECTORY)/talos"
rm -rf "$(CHECKOUTS_DIRECTORY)/sbc-raspberrypi"
#
# Patches
#
.PHONY: patches-pkgs patches-talos patches patches
patches-pkgs:
cd "$(CHECKOUTS_DIRECTORY)/pkgs" && \
git am "$(PATCHES_DIRECTORY)/siderolabs/pkgs/0001-Patched-for-Raspberry-Pi-5.patch"
patches-talos:
cd "$(CHECKOUTS_DIRECTORY)/talos" && \
git am "$(PATCHES_DIRECTORY)/siderolabs/talos/0001-Patched-for-Raspberry-Pi-5.patch"
patches: patches-pkgs patches-talos
# Backwards-compatible alias
patches: patches
.PHONY: kernel
kernel:
cd "$(CHECKOUTS_DIRECTORY)/pkgs" && \
$(MAKE) \
REGISTRY=$(REGISTRY) USERNAME=$(REGISTRY_USERNAME) PUSH=$(PUSH) \
PLATFORM=linux/arm64 \
kernel
.PHONY: overlay
overlay:
@echo SBCOVERLAY_TAG = $(SBCOVERLAY_TAG)
cd "$(CHECKOUTS_DIRECTORY)/sbc-raspberrypi" && \
$(MAKE) \
REGISTRY=$(REGISTRY) USERNAME=$(REGISTRY_USERNAME) IMAGE_TAG=$(SBCOVERLAY_TAG) PUSH=$(PUSH) \
PKGS_PREFIX=$(REGISTRY)/$(REGISTRY_USERNAME) PKGS=$(PKGS_TAG) \
INSTALLER_ARCH=arm64 PLATFORM=linux/arm64 \
sbc-raspberrypi
.PHONY: imager
imager:
cd "$(CHECKOUTS_DIRECTORY)/talos" && \
$(MAKE) \
REGISTRY=$(REGISTRY) USERNAME=$(REGISTRY_USERNAME) PUSH=$(PUSH) \
PKG_KERNEL=$(REGISTRY)/$(REGISTRY_USERNAME)/kernel:$(PKGS_TAG) \
INSTALLER_ARCH=arm64 PLATFORM=linux/arm64 SED=$(SED) \
imager
.PHONY: installer-base
installer-base:
cd "$(CHECKOUTS_DIRECTORY)/talos" && \
$(MAKE) \
REGISTRY=$(REGISTRY) USERNAME=$(REGISTRY_USERNAME) PUSH=$(PUSH) \
PKG_KERNEL=$(REGISTRY)/$(REGISTRY_USERNAME)/kernel:$(PKGS_TAG) \
INSTALLER_ARCH=arm64 PLATFORM=linux/arm64 SED=$(SED) \
installer-base
.PHONY: kern_initramfs
kern_initramfs:
cd "$(CHECKOUTS_DIRECTORY)/talos" && \
$(MAKE) \
REGISTRY=$(REGISTRY) USERNAME=$(REGISTRY_USERNAME) PUSH=$(PUSH) \
PKG_KERNEL=$(REGISTRY)/$(REGISTRY_USERNAME)/kernel:$(PKGS_TAG) \
INSTALLER_ARCH=arm64 PLATFORM=linux/arm64 SED=$(SED) \
kernel initramfs
.PHONY: installer
installer:
cd "$(CHECKOUTS_DIRECTORY)/talos" && \
$(MAKE) \
REGISTRY=$(REGISTRY) USERNAME=$(REGISTRY_USERNAME) PUSH=$(PUSH) \
PKG_KERNEL=$(REGISTRY)/$(REGISTRY_USERNAME)/kernel:$(PKGS_TAG) \
INSTALLER_ARCH=arm64 PLATFORM=linux/arm64 SED=$(SED) \
installer
.PHONY: image
image:
cd "$(CHECKOUTS_DIRECTORY)/talos" && \
docker \
run --rm -t -v ./_out:/out -v /dev:/dev --privileged $(REGISTRY)/$(REGISTRY_USERNAME)/imager:$(TALOS_TAG) \
$(ASSET_TYPE) --arch arm64 \
--base-installer-image="$(REGISTRY)/$(REGISTRY_USERNAME)/installer:$(TALOS_TAG)" \
--overlay-name="rpi_5" \
--overlay-image="$(REGISTRY)/$(REGISTRY_USERNAME)/sbc-raspberrypi:$(SBCOVERLAY_TAG)" \
--overlay-option="configTxtAppend=$$CONFIG_TXT" \
$(EXTENSION_ARGS) \
$(EXTRA_KERNEL)
.PHONY: release
release:
docker pull $(REGISTRY)/$(REGISTRY_USERNAME)/installer:$(TALOS_TAG) && \
docker tag $(REGISTRY)/$(REGISTRY_USERNAME)/installer:$(TALOS_TAG) $(REGISTRY)/$(REGISTRY_USERNAME)/installer:$(TAG) && \
docker push $(REGISTRY)/$(REGISTRY_USERNAME)/installer:$(TAG)
.PHONY: pi5
pi5: checkouts-clean checkouts patches kernel kern_initramfs installer-base imager overlay installer image
.PHONY: clean
clean: checkouts-clean