Rewrite makefile to use out/ dir

This commit is contained in:
2026-03-23 01:19:24 +08:00
parent e324969a94
commit 5d421b6743
7 changed files with 140 additions and 55 deletions

View File

@@ -5,7 +5,7 @@ Kubernetes image for Mono Gateway Development Kit
https://docs.mono.si/gateway-development-kit/getting-started https://docs.mono.si/gateway-development-kit/getting-started
## DISCLAIMER ## DISCLAIMER
I used ChatGPT a lot for this. I also tested them thoroughly enough that until confident that's what we need. I leverage ChatGPT heavily for this. I also tested them thoroughly enough that until I am confident that's what we need.
### The device's dts files are located at here ### The device's dts files are located at here
https://github.com/we-are-mono/OpenWRT-ASK/tree/mono-25.12.0-rc3/target/linux/layerscape/files/arch/arm64/boot/dts/freescale https://github.com/we-are-mono/OpenWRT-ASK/tree/mono-25.12.0-rc3/target/linux/layerscape/files/arch/arm64/boot/dts/freescale

View File

@@ -1,11 +1,5 @@
ARG TAG=dev ARG TAG=dev
ARG DOCKER_IMAGE_ROOT=monok8s ARG DOCKER_IMAGE_ROOT=monok8s
FROM --platform=$BUILDPLATFORM ${DOCKER_IMAGE_ROOT}/kernel-build:${TAG} AS kernel
# Selective mods
RUN mkdir /out/selected-mods
COPY initramfs/selective-mods.sh /
RUN /selective-mods.sh /out/rootfs/lib/modules/$(ls /out/rootfs/lib/modules/) /out/selected-mods
FROM --platform=$BUILDPLATFORM ${DOCKER_IMAGE_ROOT}/build-base:${TAG} AS build FROM --platform=$BUILDPLATFORM ${DOCKER_IMAGE_ROOT}/build-base:${TAG} AS build
@@ -35,7 +29,11 @@ COPY initramfs/init init
RUN chmod +x init RUN chmod +x init
RUN mkdir -p bin sbin etc proc sys dev lib usr/bin usr/sbin RUN mkdir -p bin sbin etc proc sys dev lib usr/bin usr/sbin
COPY --from=kernel /out/selected-mods/* ./lib/ # Selective mods
RUN mkdir -p /out/selected-mods /out/kernel
COPY initramfs/selective-mods.sh /
COPY out/rootfs /out/rootfs
RUN /selective-mods.sh /out/rootfs/lib/modules/$(ls /out/rootfs/lib/modules/) ./lib/
RUN find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz RUN find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz

View File

@@ -10,11 +10,11 @@ ARG DEVICE_TREE_TARGET
RUN mkdir /image RUN mkdir /image
WORKDIR /image WORKDIR /image
COPY --from=kernel /out/kernel/Image.gz ./Image.gz COPY [ "./out/Image.gz" \
COPY --from=kernel /out/kernel/System.map ./ , "./out/System.map" \
COPY --from=kernel /out/kernel/.config ./ , "./out/.config" \
COPY --from=fit /out/initramfs.cpio.gz ./ , "./out/initramfs.cpio.gz" \
COPY --from=kernel /out/${DEVICE_TREE_TARGET}.dtb ./ , "./out/${DEVICE_TREE_TARGET}.dtb", "./" ]
COPY ./board.its ./_board.its COPY ./board.its ./_board.its

View File

@@ -1,6 +1,6 @@
ARG TAG=dev ARG TAG=dev
ARG DOCKER_IMAGE_ROOT=monok8s ARG DOCKER_IMAGE_ROOT=monok8s
FROM --platform=$BUILDPLATFORM ${DOCKER_IMAGE_ROOT}/build-base:${TAG} FROM --platform=$BUILDPLATFORM ${DOCKER_IMAGE_ROOT}/build-base:${TAG} AS build
ARG NXP_VERSION ARG NXP_VERSION
ARG ARCH ARG ARCH
@@ -46,3 +46,14 @@ RUN depmod -b /out/rootfs $(ls /out/rootfs/lib/modules/)
RUN find /out/kernel -name "${DEVICE_TREE_TARGET}.dtb" -exec cp {} /out/ \; RUN find /out/kernel -name "${DEVICE_TREE_TARGET}.dtb" -exec cp {} /out/ \;
RUN test -f "/out/${DEVICE_TREE_TARGET}.dtb" RUN test -f "/out/${DEVICE_TREE_TARGET}.dtb"
FROM scratch
ARG DEVICE_TREE_TARGET
COPY --from=build \
/out/kernel/System.map \
/out/kernel/.config \
/out/kernel/Image.gz \
/out/${DEVICE_TREE_TARGET}.dtb \
./
COPY --from=build /out/rootfs/ ./rootfs

View File

@@ -1,4 +0,0 @@
ARG RELEASE_IMAGE
FROM scratch
COPY --from artifacts $RELEASE_IMAGE /$RELEASE_IMAGE

136
makefile
View File

@@ -4,41 +4,101 @@ export
TAG ?= dev TAG ?= dev
PACKAGES_DIR := packages PACKAGES_DIR := packages
OUT_DIR := out
BUSYBOX_TAR := $(PACKAGES_DIR)/busybox-$(BUSYBOX_VERSION).tar.gz BUSYBOX_TAR := $(PACKAGES_DIR)/busybox-$(BUSYBOX_VERSION).tar.gz
ALPINE_TAR := $(PACKAGES_DIR)/alpine-minirootfs-$(ALPINE_VER)-$(ALPINE_ARCH).tar.gz ALPINE_TAR := $(PACKAGES_DIR)/alpine-minirootfs-$(ALPINE_VER)-$(ALPINE_ARCH).tar.gz
NXP_TAR := $(PACKAGES_DIR)/$(NXP_VERSION).tar.gz NXP_TAR := $(PACKAGES_DIR)/$(NXP_VERSION).tar.gz
CRIO_TAR := $(PACKAGES_DIR)/$(CRIO_VERSION).tar.gz CRIO_TAR := $(PACKAGES_DIR)/$(CRIO_VERSION).tar.gz
BOARD_ITB := out/board.itb BOARD_ITB := $(OUT_DIR)/board.itb
INITRAMFS := out/initramfs.cpio.gz INITRAMFS := $(OUT_DIR)/initramfs.cpio.gz
RELEASE_IMAGE := out/monok8s-$(TAG).img RELEASE_IMAGE := $(OUT_DIR)/monok8s-$(TAG).img
ALPINE_SERIES := $(word 1,$(subst ., ,${ALPINE_VER})).$(word 2,$(subst ., ,${ALPINE_VER})) KERNEL_IMAGE := $(OUT_DIR)/Image.gz
$(BUSYBOX_TAR): BUILD_BASE_STAMP := $(OUT_DIR)/.build-base-$(TAG).stamp
@mkdir -p $(PACKAGES_DIR)
ALPINE_SERIES := $(word 1,$(subst ., ,$(ALPINE_VER))).$(word 2,$(subst ., ,$(ALPINE_VER)))
# ---- File groups -------------------------------------------------------------
# Use find so adding new files under these dirs is automatically picked up.
ALPINE_SRCS := $(shell find alpine -type f 2>/dev/null)
INITRAMFS_SRCS := $(shell find initramfs -type f 2>/dev/null)
KERNEL_SRCS := $(shell find kernel-build -type f 2>/dev/null)
BUILD_BASE_DEPS := \
docker/build-base.Dockerfile \
build.env \
makefile
KERNEL_DEPS := \
$(BUILD_BASE_STAMP) \
$(NXP_TAR) \
docker/kernel-build.Dockerfile \
kernel-extra.config \
$(KERNEL_SRCS) \
build.env \
makefile
INITRAMFS_DEPS := \
$(KERNEL_IMAGE) \
$(BUSYBOX_TAR) \
docker/initramfs.Dockerfile \
$(INITRAMFS_SRCS) \
build.env \
makefile
ITB_DEPS := \
$(INITRAMFS) \
docker/itb.Dockerfile \
board.its \
build.env \
makefile
RELEASE_DEPS := \
$(BUILD_BASE_STAMP) \
$(BOARD_ITB) \
$(ALPINE_TAR) \
$(CRIO_TAR) \
docker/alpine.Dockerfile \
$(ALPINE_SRCS) \
build.env \
makefile
# ---- Directory creation ------------------------------------------------------
$(PACKAGES_DIR):
mkdir -p $@
$(OUT_DIR):
mkdir -p $@
# ---- Package downloads -------------------------------------------------------
$(BUSYBOX_TAR): | $(PACKAGES_DIR)
curl -L -o $@ "https://github.com/mirror/busybox/archive/refs/tags/$(BUSYBOX_VERSION).tar.gz" curl -L -o $@ "https://github.com/mirror/busybox/archive/refs/tags/$(BUSYBOX_VERSION).tar.gz"
$(ALPINE_TAR): $(ALPINE_TAR): | $(PACKAGES_DIR)
@mkdir -p $(PACKAGES_DIR)
curl -L -o $@ "https://dl-cdn.alpinelinux.org/alpine/v$(ALPINE_SERIES)/releases/$(ALPINE_ARCH)/alpine-minirootfs-$(ALPINE_VER)-$(ALPINE_ARCH).tar.gz" curl -L -o $@ "https://dl-cdn.alpinelinux.org/alpine/v$(ALPINE_SERIES)/releases/$(ALPINE_ARCH)/alpine-minirootfs-$(ALPINE_VER)-$(ALPINE_ARCH).tar.gz"
$(NXP_TAR): $(NXP_TAR): | $(PACKAGES_DIR)
@mkdir -p $(PACKAGES_DIR)
curl -L -o $@ "https://github.com/nxp-qoriq/linux/archive/refs/tags/$(NXP_VERSION).tar.gz" curl -L -o $@ "https://github.com/nxp-qoriq/linux/archive/refs/tags/$(NXP_VERSION).tar.gz"
$(CRIO_TAR): $(CRIO_TAR): | $(PACKAGES_DIR)
@mkdir -p $(PACKAGES_DIR)
curl -L -o $@ "https://storage.googleapis.com/cri-o/artifacts/$(CRIO_VERSION).tar.gz" curl -L -o $@ "https://storage.googleapis.com/cri-o/artifacts/$(CRIO_VERSION).tar.gz"
build-base: # ---- Build stages ------------------------------------------------------------
$(BUILD_BASE_STAMP): $(BUILD_BASE_DEPS) | $(OUT_DIR)
docker build \ docker build \
-f docker/build-base.Dockerfile \ -f docker/build-base.Dockerfile \
--build-arg TAG=$(TAG) \ --build-arg TAG=$(TAG) \
-t $(DOCKER_IMAGE_ROOT)/build-base:$(TAG) . -t $(DOCKER_IMAGE_ROOT)/build-base:$(TAG) .
touch $@
$(KERNEL_IMAGE): build-base $(NXP_TAR) $(KERNEL_IMAGE): $(KERNEL_DEPS) | $(OUT_DIR)
docker build \ docker build \
-f docker/kernel-build.Dockerfile \ -f docker/kernel-build.Dockerfile \
--build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \
@@ -47,11 +107,10 @@ $(KERNEL_IMAGE): build-base $(NXP_TAR)
--build-arg CROSS_COMPILE=$(CROSS_COMPILE) \ --build-arg CROSS_COMPILE=$(CROSS_COMPILE) \
--build-arg NXP_VERSION=$(NXP_VERSION) \ --build-arg NXP_VERSION=$(NXP_VERSION) \
--build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \ --build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \
--output type=local,dest=./out . --output type=local,dest=./$(OUT_DIR) .
test -f $@
@test -f $(KERNEL_IMAGE) $(INITRAMFS): $(INITRAMFS_DEPS) | $(OUT_DIR)
$(INITRAMFS): $(KERNEL_IMAGE) $(BUSYBOX_TAR)
docker build \ docker build \
-f docker/initramfs.Dockerfile \ -f docker/initramfs.Dockerfile \
--build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \
@@ -59,22 +118,20 @@ $(INITRAMFS): $(KERNEL_IMAGE) $(BUSYBOX_TAR)
--build-arg ARCH=$(ARCH) \ --build-arg ARCH=$(ARCH) \
--build-arg CROSS_COMPILE=$(CROSS_COMPILE) \ --build-arg CROSS_COMPILE=$(CROSS_COMPILE) \
--build-arg BUSYBOX_VERSION=$(BUSYBOX_VERSION) \ --build-arg BUSYBOX_VERSION=$(BUSYBOX_VERSION) \
--output type=local,dest=./out . --output type=local,dest=./$(OUT_DIR) .
test -f $@
@test -f $(INITRAMFS) $(BOARD_ITB): $(ITB_DEPS) | $(OUT_DIR)
$(BOARD_ITB): $(INITRAMFS)
docker build \ docker build \
-f docker/itb.Dockerfile \ -f docker/itb.Dockerfile \
--build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \
--build-arg TAG=$(TAG) \ --build-arg TAG=$(TAG) \
--build-arg ARCH=$(ARCH) \ --build-arg ARCH=$(ARCH) \
--build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \ --build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \
--output type=local,dest=./out . --output type=local,dest=./$(OUT_DIR) .
test -f $@
@test -f $(BOARD_ITB) $(RELEASE_IMAGE): $(RELEASE_DEPS) | $(OUT_DIR)
release: $(BOARD_ITB) build-base
docker build \ docker build \
-f docker/alpine.Dockerfile \ -f docker/alpine.Dockerfile \
--build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \
@@ -83,6 +140,7 @@ release: $(BOARD_ITB) build-base
--build-arg ALPINE_VER=$(ALPINE_VER) \ --build-arg ALPINE_VER=$(ALPINE_VER) \
--build-arg CRIO_VERSION=$(CRIO_VERSION) \ --build-arg CRIO_VERSION=$(CRIO_VERSION) \
-t $(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) . -t $(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) .
@cid=$$(docker create \ @cid=$$(docker create \
--privileged \ --privileged \
-v /cache/apk:/var/cache/apk \ -v /cache/apk:/var/cache/apk \
@@ -93,7 +151,29 @@ release: $(BOARD_ITB) build-base
$(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) \ $(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) \
bash -lc '/build-rootfs.sh'); \ bash -lc '/build-rootfs.sh'); \
docker start -a $$cid; \ docker start -a $$cid; \
docker cp $$cid:/build/output.img $(RELEASE_IMAGE); \ docker cp $$cid:/build/output.img $@; \
docker rm $$cid docker rm $$cid
@test -f $(RELEASE_IMAGE) test -f $@
# ---- User targets ------------------------------------------------------------
release: $(RELEASE_IMAGE)
kernel: $(KERNEL_IMAGE)
initramfs: $(INITRAMFS)
itb: $(BOARD_ITB)
build-base: $(BUILD_BASE_STAMP)
clean:
rm -f \
$(BUILD_BASE_STAMP) \
$(KERNEL_IMAGE) \
$(INITRAMFS) \
$(BOARD_ITB) \
$(RELEASE_IMAGE)
distclean: clean
rm -rf $(OUT_DIR) $(PACKAGES_DIR)
.PHONY: release kernel initramfs itb build-base clean distclean

View File