68 lines
2.8 KiB
Makefile
68 lines
2.8 KiB
Makefile
# Kamado Pool — StartOS 0.4.0 package.
|
|
#
|
|
# Prerequisites: node/npm, docker (with buildx), start-cli, rsync.
|
|
# First run `npm ci`, then:
|
|
# make -> kamado-pool.s9pk, the universal package (x86_64 +
|
|
# aarch64 in one file) — this is what to ship.
|
|
# make x86 / arm -> single-arch packages, for faster dev iteration.
|
|
#
|
|
# Building the aarch64 image on an x86 host needs qemu binfmt handlers and
|
|
# a builder that advertises linux/arm64 — `make setup` registers both.
|
|
#
|
|
# KamadoPool source is expected in a sibling checkout at ../KamadoPool
|
|
# (override with `make KAMADO_SRC=/path/to/KamadoPool`). It is synced into
|
|
# ./kamado-src before packing, because `start-cli s9pk pack` builds the
|
|
# Dockerfile with this directory as the only build context.
|
|
|
|
ARCHES := x86 arm
|
|
# Ship one universal s9pk by default rather than a per-arch pair.
|
|
TARGETS := universal
|
|
|
|
# Buildx builder used by `make setup`. Must advertise linux/amd64 and
|
|
# linux/arm64; network=host works around container-DNS breakage on hosts
|
|
# running systemd-resolved.
|
|
BUILDER ?= kamado-hostnet
|
|
KAMADO_SRC ?= ../KamadoPool
|
|
|
|
# Source files whose changes should trigger a re-sync + repack (excludes
|
|
# node_modules/dist build artifacts).
|
|
KAMADO_DEPS := $(shell find "$(KAMADO_SRC)/api" "$(KAMADO_SRC)/ui" "$(KAMADO_SRC)/ckpool" \
|
|
\( -name node_modules -o -name dist \) -prune -o -type f -print 2>/dev/null)
|
|
|
|
ifeq (,$(wildcard node_modules/@start9labs/start-sdk/s9pk.mk))
|
|
$(error node_modules missing — run 'npm ci' first)
|
|
endif
|
|
|
|
# overrides to s9pk.mk must precede the include statement
|
|
include node_modules/@start9labs/start-sdk/s9pk.mk
|
|
|
|
kamado-src: $(KAMADO_DEPS)
|
|
@test -d "$(KAMADO_SRC)/api" || { echo "Error: KamadoPool source not found at '$(KAMADO_SRC)'. Set KAMADO_SRC=/path/to/KamadoPool"; exit 1; }
|
|
@echo " Syncing KamadoPool source from '$(KAMADO_SRC)'..."
|
|
@rsync -a --delete --exclude node_modules --exclude dist \
|
|
"$(KAMADO_SRC)/api" "$(KAMADO_SRC)/ui" "$(KAMADO_SRC)/ckpool" kamado-src/
|
|
@touch kamado-src
|
|
|
|
# Extra prerequisites for the pack targets defined in s9pk.mk: the Docker
|
|
# image build consumes ./kamado-src, so keep it fresh.
|
|
$(BASE_NAME).s9pk: kamado-src
|
|
$(BASE_NAME)_x86_64.s9pk: kamado-src
|
|
$(BASE_NAME)_aarch64.s9pk: kamado-src
|
|
|
|
# One-time (per boot) cross-arch build setup: register qemu binfmt
|
|
# handlers so the emulated aarch64 ckpool stage can run, and create a
|
|
# buildx builder that advertises both platforms.
|
|
setup:
|
|
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
|
-docker buildx rm $(BUILDER) 2>/dev/null
|
|
docker buildx create --name $(BUILDER) --driver docker-container \
|
|
--driver-opt network=host \
|
|
--platform linux/amd64,linux/arm64 --use
|
|
docker buildx inspect --bootstrap $(BUILDER)
|
|
@echo "Ready. 'make' will now build the universal package."
|
|
|
|
clean-src:
|
|
rm -rf kamado-src
|
|
|
|
.PHONY: clean-src setup
|