154 lines
4.0 KiB
Makefile
154 lines
4.0 KiB
Makefile
DEBUG := false
|
|
OUT_DIR := out
|
|
KEY_DIR := keys
|
|
SRC_DIR := src
|
|
TARGET := local
|
|
CACHE_DIR := cache
|
|
CONFIG_DIR := targets/$(TARGET)
|
|
TOOLCHAIN_DIR := toolchain
|
|
SCRIPTS_DIR := scripts
|
|
USER := $(shell id -g):$(shell id -g)
|
|
CPUS := $(shell nproc)
|
|
ARCH := x86_64
|
|
|
|
include $(PWD)/config.env
|
|
include $(PWD)/make/keys.mk
|
|
include $(PWD)/make/fetch.mk
|
|
include $(PWD)/toolchain/Makefile
|
|
|
|
.DEFAULT_GOAL := default
|
|
.PHONY: default
|
|
default: fetch $(OUT_DIR)/bzImage
|
|
|
|
# Clean repo back to initial clone state
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf cache out
|
|
docker image rm -f local/$(NAME)-build
|
|
|
|
# Launch a shell inside the toolchain container
|
|
.PHONY: toolchain-shell
|
|
toolchain-shell: $(OUT_DIR)/toolchain.tar
|
|
$(call toolchain,root,bash)
|
|
|
|
# Pin all packages in toolchain container to latest versions
|
|
.PHONY: toolchain-update
|
|
toolchain-update:
|
|
$(call toolchain,root,toolchain-update )
|
|
|
|
# Source anything required from the internet to build
|
|
.PHONY: fetch
|
|
fetch: \
|
|
keys \
|
|
$(OUT_DIR) \
|
|
$(OUT_DIR)/toolchain.tar \
|
|
$(CACHE_DIR) \
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION).tar.xz \
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION).tar.sign \
|
|
$(CACHE_DIR)/busybox-$(BUSYBOX_VERSION).tar.bz2 \
|
|
$(CACHE_DIR)/busybox-$(BUSYBOX_VERSION).tar.bz2.sig
|
|
|
|
# Build latest image and run in terminal via Qemu
|
|
.PHONY: run
|
|
run: default
|
|
qemu-system-x86_64 \
|
|
-m 512M \
|
|
-nographic \
|
|
-kernel $(OUT_DIR)/bzImage
|
|
|
|
# Run ncurses busybox config menu and save output
|
|
.PHONY: busybox-config
|
|
busybox-config:
|
|
rm $(CONFIG_DIR)/busybox.config
|
|
make $(CONFIG_DIR)/busybox.config
|
|
|
|
# Run linux config menu and save output
|
|
.PHONY: linux-config
|
|
linux-config:
|
|
rm $(CONFIG_DIR)/linux.config
|
|
make $(CONFIG_DIR)/linux.config
|
|
|
|
# This can likely be eliminated with path fixes in toolchain/Makefile
|
|
$(OUT_DIR)/toolchain.tar:
|
|
ARCH=$(ARCH) \
|
|
OUT_DIR=../$(OUT_DIR) \
|
|
DEBIAN_HASH=$(DEBIAN_HASH) \
|
|
$(MAKE) -C $(TOOLCHAIN_DIR) \
|
|
../$(OUT_DIR)/toolchain.tar
|
|
|
|
$(CONFIG_DIR)/busybox.config:
|
|
$(call toolchain,$(USER), " \
|
|
cd /cache/busybox-$(BUSYBOX_VERSION) && \
|
|
KCONFIG_NOTIMESTAMP=1 make menuconfig && \
|
|
cp .config /config/busybox.config; \
|
|
")
|
|
|
|
$(CONFIG_DIR)/linux.config:
|
|
$(call toolchain,$(USER)," \
|
|
cd /cache/linux-$(LINUX_VERSION) && \
|
|
make menuconfig && \
|
|
cp .config /config/linux.config; \
|
|
")
|
|
|
|
$(OUT_DIR)/busybox: \
|
|
$(CACHE_DIR)/busybox-$(BUSYBOX_VERSION) \
|
|
$(CACHE_DIR)/busybox-$(BUSYBOX_VERSION).tar.bz2 \
|
|
$(CACHE_DIR)/busybox-$(BUSYBOX_VERSION).tar.bz2.sig
|
|
$(call toolchain,$(USER)," \
|
|
cd /cache/busybox-$(BUSYBOX_VERSION) && \
|
|
cp /config/busybox.config .config && \
|
|
make -j$(CPUS) busybox && \
|
|
cp busybox /out/; \
|
|
")
|
|
|
|
$(OUT_DIR)/sample_init:
|
|
$(call toolchain,$(USER)," \
|
|
gcc \
|
|
-static \
|
|
-static-libgcc /src/sample/init.c \
|
|
-o /out/sample_init; \
|
|
")
|
|
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION)/usr/gen_init_cpio: \
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION) \
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION) \
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION).tar.xz \
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION).tar.sign
|
|
$(call toolchain,$(USER)," \
|
|
cd /cache/linux-$(LINUX_VERSION) && \
|
|
gcc usr/gen_init_cpio.c -o usr/gen_init_cpio \
|
|
")
|
|
|
|
$(OUT_DIR)/rootfs.cpio: \
|
|
$(OUT_DIR)/busybox \
|
|
$(OUT_DIR)/sample_init \
|
|
$(CACHE_DIR)/linux-$(LINUX_VERSION)/usr/gen_init_cpio
|
|
mkdir -p $(CACHE_DIR)/rootfs/bin
|
|
ifeq ($(DEBUG), true)
|
|
cp $(OUT_DIR)/sample_init $(CACHE_DIR)/rootfs/sample_init
|
|
cp $(SCRIPTS_DIR)/busybox_init $(CACHE_DIR)/rootfs/init
|
|
cp $(OUT_DIR)/busybox $(CACHE_DIR)/rootfs/bin/
|
|
else
|
|
cp $(OUT_DIR)/sample_init $(CACHE_DIR)/rootfs/init
|
|
endif
|
|
$(call toolchain,$(USER)," \
|
|
cd /cache/rootfs && \
|
|
find . -mindepth 1 -execdir touch -hcd "@0" "{}" + && \
|
|
find . -mindepth 1 -printf '%P\0' && \
|
|
cd /cache/linux-$(LINUX_VERSION) && \
|
|
usr/gen_initramfs.sh -o /out/rootfs.cpio /config/rootfs.list && \
|
|
cpio -itv < /out/rootfs.cpio && \
|
|
sha256sum /out/rootfs.cpio; \
|
|
")
|
|
|
|
$(OUT_DIR)/bzImage: \
|
|
$(OUT_DIR)/rootfs.cpio
|
|
$(call toolchain,$(USER)," \
|
|
cd /cache/linux-$(LINUX_VERSION) && \
|
|
cp /config/linux.config .config && \
|
|
make olddefconfig && \
|
|
make -j$(CPUS) ARCH=$(ARCH) bzImage && \
|
|
cp arch/x86_64/boot/bzImage /out/ && \
|
|
sha256sum /out/bzImage; \
|
|
")
|