enclaveos/Makefile

120 lines
3.0 KiB
Makefile

NAME := qos
DEBUG := true
OUT_DIR := out
KEY_DIR := keys
TARGET := local
CACHE_DIR := cache
CONFIG_DIR := targets/$(TARGET)
SCRIPTS_DIR := scripts
CPUS := $(shell nproc)
ARCH := x86_64
include $(PWD)/config.env
include $(PWD)/make/keys.mk
include $(PWD)/make/fetch.mk
include $(PWD)/make/toolchain.mk
.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
# Source anything required from the internet to build
.PHONY: fetch
fetch: \
toolchain \
keys \
$(OUT_DIR) \
$(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
$(CONFIG_DIR)/busybox.config:
$(toolchain) " \
cd /cache/busybox-$(BUSYBOX_VERSION) && \
KCONFIG_NOTIMESTAMP=1 make menuconfig && \
cp .config /config/busybox.config; \
"
$(CONFIG_DIR)/linux.config:
$(toolchain) " \
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
$(toolchain) " \
cd /cache/busybox-$(BUSYBOX_VERSION) && \
cp /config/busybox.config .config && \
make -j$(CPUS) busybox && \
cp busybox /out/; \
"
$(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
$(toolchain) " \
cd /cache/linux-$(LINUX_VERSION) && \
gcc usr/gen_init_cpio.c -o usr/gen_init_cpio \
"
$(OUT_DIR)/rootfs.cpio: \
$(OUT_DIR)/busybox \
$(CACHE_DIR)/linux-$(LINUX_VERSION)/usr/gen_init_cpio
mkdir -p $(CACHE_DIR)/rootfs/bin
cp $(SCRIPTS_DIR)/busybox_init $(CACHE_DIR)/rootfs/init
cp $(OUT_DIR)/busybox $(CACHE_DIR)/rootfs/bin/
$(toolchain) " \
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
$(toolchain) " \
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; \
"