PKG_ID := $(shell yq -r .id manifest.yaml) PKG_VERSION := $(shell yq -r .version manifest.yaml) TS_FILES := $(shell find ./scripts -name \*.ts 2>/dev/null) # Where KamadoPool source lives (buildx passes it as a named context). KAMADO_SRC ?= ../KamadoPool # Buildx builder name. Must support linux/amd64 and linux/arm64. BUILDER ?= kamado-multiarch .DELETE_ON_ERROR: # Default: build both arches and verify a universal package. all: verify # Single-arch convenience targets — much faster when you don't need # cross-arch emulation. x86: ARCH = x86_64 x86: @rm -f docker-images/aarch64.tar $(MAKE) ARCH=x86_64 arm: ARCH = aarch64 arm: @rm -f docker-images/x86_64.tar $(MAKE) ARCH=aarch64 # Register qemu for cross-arch builds and create a multiplatform builder. setup: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -docker buildx rm $(BUILDER) 2>/dev/null docker buildx create --name $(BUILDER) --platform linux/amd64,linux/arm64 --use docker buildx inspect --bootstrap $(BUILDER) @echo "Ready. 'make' will now build universal packages." verify: $(PKG_ID).s9pk start-sdk verify s9pk $(PKG_ID).s9pk @echo "Package: $(PKG_ID).s9pk ($(shell du -h $(PKG_ID).s9pk | cut -f1))" install: $(PKG_ID).s9pk start-cli package install $(PKG_ID).s9pk # ── TypeScript → JS bundle ─────────────────────────────────────────── scripts/embassy.js: $(TS_FILES) deno run --allow-read --allow-write --allow-env --allow-net scripts/bundle.ts # ── Docker images, one tarball per arch ────────────────────────────── docker-images/x86_64.tar: Dockerfile docker_entrypoint.sh ifneq ($(ARCH),aarch64) mkdir -p docker-images docker buildx build --builder $(BUILDER) --progress=plain \ --tag start9/$(PKG_ID)/main:$(PKG_VERSION) \ --platform linux/amd64 \ --build-arg ARCH=x86_64 \ --build-context kamado=$(KAMADO_SRC) \ -o type=docker,dest=docker-images/x86_64.tar \ . endif docker-images/aarch64.tar: Dockerfile docker_entrypoint.sh ifneq ($(ARCH),x86_64) mkdir -p docker-images docker buildx build --builder $(BUILDER) --progress=plain \ --tag start9/$(PKG_ID)/main:$(PKG_VERSION) \ --platform linux/arm64 \ --build-arg ARCH=aarch64 \ --build-context kamado=$(KAMADO_SRC) \ -o type=docker,dest=docker-images/aarch64.tar \ . endif # ── Pack ───────────────────────────────────────────────────────────── ifeq ($(ARCH),x86_64) DOCKER_DEPS := docker-images/x86_64.tar else ifeq ($(ARCH),aarch64) DOCKER_DEPS := docker-images/aarch64.tar else DOCKER_DEPS := docker-images/x86_64.tar docker-images/aarch64.tar endif $(PKG_ID).s9pk: manifest.yaml instructions.md icon.png LICENSE \ scripts/embassy.js \ $(DOCKER_DEPS) ifeq ($(ARCH),x86_64) @echo "start-sdk: packing x86_64 only" else ifeq ($(ARCH),aarch64) @echo "start-sdk: packing aarch64 only" else @echo "start-sdk: packing universal (x86_64 + aarch64)" endif start-sdk pack clean: rm -rf docker-images rm -f $(PKG_ID).s9pk image.tar scripts/embassy.js .PHONY: all x86 arm verify install clean setup