226 lines
6.4 KiB
Makefile
226 lines
6.4 KiB
Makefile
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
|
|
|
|
# Kubernetes components
|
|
KUBELET_BIN := $(PACKAGES_DIR)/kubernetes/kubelet
|
|
KUBEADM_BIN := $(PACKAGES_DIR)/kubernetes/kubeadm
|
|
KUBECTL_BIN := $(PACKAGES_DIR)/kubernetes/kubectl
|
|
|
|
BOARD_ITB := $(OUT_DIR)/board.itb
|
|
INITRAMFS := $(OUT_DIR)/initramfs.cpio.gz
|
|
RELEASE_IMAGE := $(OUT_DIR)/monok8s-$(TAG).img.gz
|
|
|
|
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)))
|
|
|
|
BUILD_VERSION ?= $(KUBE_VERSION)
|
|
BUILD_DATE := $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
BUILD_GIT := $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown)
|
|
BUILD_INFO_FILE := $(OUT_DIR)/build-info
|
|
|
|
# ---- 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_INFO_FILE) \
|
|
build.env \
|
|
makefile
|
|
|
|
ITB_DEPS := \
|
|
$(INITRAMFS) \
|
|
docker/itb.Dockerfile \
|
|
board.its \
|
|
build.env \
|
|
makefile
|
|
|
|
RELEASE_DEPS := \
|
|
$(BUILD_BASE_STAMP) \
|
|
$(BUILD_INFO_FILE) \
|
|
$(BOARD_ITB) \
|
|
$(ALPINE_TAR) \
|
|
$(CRIO_TAR) \
|
|
$(KUBELET_BIN) \
|
|
$(KUBEADM_BIN) \
|
|
$(KUBECTL_BIN) \
|
|
docker/alpine.Dockerfile \
|
|
$(ALPINE_SRCS) \
|
|
build.env \
|
|
makefile
|
|
|
|
# ---- Directory creation ------------------------------------------------------
|
|
|
|
$(PACKAGES_DIR):
|
|
mkdir -p $@
|
|
mkdir -p $@/kubernetes
|
|
|
|
$(OUT_DIR):
|
|
mkdir -p $@
|
|
|
|
# ---- Package downloads -------------------------------------------------------
|
|
$(KUBELET_BIN): | $(PACKAGES_DIR)
|
|
curl -L -o $@ "https://dl.k8s.io/$(KUBE_VERSION)/bin/linux/$(ARCH)/kubelet"
|
|
|
|
$(KUBEADM_BIN): | $(PACKAGES_DIR)
|
|
curl -L -o $@ "https://dl.k8s.io/$(KUBE_VERSION)/bin/linux/$(ARCH)/kubeadm"
|
|
|
|
$(KUBECTL_BIN): | $(PACKAGES_DIR)
|
|
curl -L -o $@ "https://dl.k8s.io/$(KUBE_VERSION)/bin/linux/$(ARCH)/kubectl"
|
|
|
|
$(KUBEADM_BIN): | $(PACKAGES_DIR)
|
|
curl -L -o $@ "https://dl.k8s.io/$(KUBE_VERSION)/bin/linux/$(ARCH)/kubeadm"
|
|
|
|
$(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_INFO_FILE):
|
|
@mkdir -p $(dir $@)
|
|
@printf '%s\n' \
|
|
'export $(BUILD_TAG)_VERSION="$(BUILD_VERSION)"' \
|
|
'export $(BUILD_TAG)_BUILD_DATE="$(BUILD_DATE)"' \
|
|
'export $(BUILD_TAG)_GIT="$(BUILD_GIT)"' \
|
|
'export $(BUILD_TAG)_RELEASE_IMAGE="$(notdir $(RELEASE_IMAGE))"' \
|
|
> $@
|
|
|
|
$(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) \
|
|
--build-arg BUILD_TAG=$(BUILD_TAG) \
|
|
--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) \
|
|
--build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \
|
|
-t $(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) .
|
|
|
|
@cid=$$(docker create \
|
|
--privileged \
|
|
-v /cache/k8s-images:/var/cache/k8s-images \
|
|
-v /cache/apk:/var/cache/apk \
|
|
--device=/dev/loop0:/dev/loop0 \
|
|
-e ROOTFS=/out/rootfs \
|
|
-e RELEASE_IMAGE=$(RELEASE_IMAGE) \
|
|
-e DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \
|
|
-e KUBE_IMG_CACHE=/var/cache/k8s-images \
|
|
-e KUBE_VERSION=$(KUBE_VERSION) \
|
|
-e ALPINE_HOSTNAME=$(ALPINE_HOSTNAME) \
|
|
-e ARCH=$(ARCH) \
|
|
$(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) \
|
|
bash -lc '/build-rootfs.sh'); \
|
|
docker start -a $$cid; \
|
|
docker cp $$cid:/build/output.img.gz $@; \
|
|
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)
|
|
|
|
pkgclean:
|
|
rm -rf $(PACKAGES_DIR)
|
|
|
|
.PHONY: release kernel initramfs itb build-base clean distclean
|