include build.env export TAG ?= dev PACKAGES_DIR := packages OUT_DIR := out BUSYBOX_TAR := $(PACKAGES_DIR)/busybox-$(BUSYBOX_VERSION).tar.gz ALPINE_TAR := $(PACKAGES_DIR)/alpine-minirootfs-$(ALPINE_VER)-$(ALPINE_ARCH).tar.gz NXP_TAR := $(PACKAGES_DIR)/$(NXP_VERSION).tar.gz CRIO_TAR := $(PACKAGES_DIR)/$(CRIO_VERSION).tar.gz BOARD_ITB := $(OUT_DIR)/board.itb INITRAMFS := $(OUT_DIR)/initramfs.cpio.gz RELEASE_IMAGE := $(OUT_DIR)/monok8s-$(TAG).img KERNEL_IMAGE := $(OUT_DIR)/Image.gz BUILD_BASE_STAMP := $(OUT_DIR)/.build-base-$(TAG).stamp 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" $(ALPINE_TAR): | $(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" $(NXP_TAR): | $(PACKAGES_DIR) curl -L -o $@ "https://github.com/nxp-qoriq/linux/archive/refs/tags/$(NXP_VERSION).tar.gz" $(CRIO_TAR): | $(PACKAGES_DIR) curl -L -o $@ "https://storage.googleapis.com/cri-o/artifacts/$(CRIO_VERSION).tar.gz" # ---- Build stages ------------------------------------------------------------ $(BUILD_BASE_STAMP): $(BUILD_BASE_DEPS) | $(OUT_DIR) docker build \ -f docker/build-base.Dockerfile \ --build-arg TAG=$(TAG) \ -t $(DOCKER_IMAGE_ROOT)/build-base:$(TAG) . touch $@ $(KERNEL_IMAGE): $(KERNEL_DEPS) | $(OUT_DIR) docker build \ -f docker/kernel-build.Dockerfile \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg TAG=$(TAG) \ --build-arg ARCH=$(ARCH) \ --build-arg CROSS_COMPILE=$(CROSS_COMPILE) \ --build-arg NXP_VERSION=$(NXP_VERSION) \ --build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \ --output type=local,dest=./$(OUT_DIR) . test -f $@ $(INITRAMFS): $(INITRAMFS_DEPS) | $(OUT_DIR) docker build \ -f docker/initramfs.Dockerfile \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg TAG=$(TAG) \ --build-arg ARCH=$(ARCH) \ --build-arg CROSS_COMPILE=$(CROSS_COMPILE) \ --build-arg BUSYBOX_VERSION=$(BUSYBOX_VERSION) \ --output type=local,dest=./$(OUT_DIR) . test -f $@ $(BOARD_ITB): $(ITB_DEPS) | $(OUT_DIR) docker build \ -f docker/itb.Dockerfile \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg TAG=$(TAG) \ --build-arg ARCH=$(ARCH) \ --build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \ --output type=local,dest=./$(OUT_DIR) . test -f $@ $(RELEASE_IMAGE): $(RELEASE_DEPS) | $(OUT_DIR) docker build \ -f docker/alpine.Dockerfile \ --build-arg DOCKER_IMAGE_ROOT=$(DOCKER_IMAGE_ROOT) \ --build-arg TAG=$(TAG) \ --build-arg ALPINE_ARCH=$(ALPINE_ARCH) \ --build-arg ALPINE_VER=$(ALPINE_VER) \ --build-arg CRIO_VERSION=$(CRIO_VERSION) \ -t $(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) . @cid=$$(docker create \ --privileged \ -v /cache/apk:/var/cache/apk \ --device=/dev/loop0:/dev/loop0 \ -e ROOTFS=/out/rootfs \ -e ARTIFACT_DIR=/artifacts \ -e RELEASE_IMAGE=$(RELEASE_IMAGE) \ $(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) \ bash -lc '/build-rootfs.sh'); \ docker start -a $$cid; \ docker cp $$cid:/build/output.img $@; \ docker rm $$cid 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