diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c48c396 --- /dev/null +++ b/Makefile @@ -0,0 +1,59 @@ +EXTERNAL_DIR=external +BUILD_DIR=build +LINUX_DIR=$(EXTERNAL_DIR)/linux +LINUX_REPO=https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git +BUSYBOX_DIR=$(EXTERNAL_DIR)/busybox +BUSYBOX_REPO=https://git.busybox.net/busybox +INITRAMFS_INIT=initramfs_init + +.PHONY: all kernel initramfs iso run clean + +all: iso + +$(EXTERNAL_DIR): + @mkdir -p $(EXTERNAL_DIR) + +$(BUILD_DIR): + @mkdir -p $(BUILD_DIR) + +$(LINUX_DIR): $(EXTERNAL_DIR) + @echo "[yerba] cloning Linux kernel..." + git clone --depth 1 $(LINUX_REPO) $(LINUX_DIR) + +kernel: $(LINUX_DIR) $(BUILD_DIR) + @echo "[yerba] building kernel (default defconfig)..." + $(MAKE) -C $(LINUX_DIR) defconfig + $(MAKE) -C $(LINUX_DIR) -j$(shell nproc) bzImage + cp $(LINUX_DIR)/arch/x86/boot/bzImage $(BUILD_DIR)/bzImage + + +initramfs: busybox kernel + @echo "[yerba] creating initramfs..." + rm -rf $(BUILD_DIR)/initramfs + mkdir -p $(BUILD_DIR)/initramfs/{bin,sbin,etc,proc,sys,dev} + cp -a $(BUSYBOX_DIR)/_install/* $(BUILD_DIR)/initramfs/ + cp initramfs_init $(BUILD_DIR)/initramfs/init + chmod +x $(BUILD_DIR)/initramfs/init + cd $(BUILD_DIR)/initramfs && find . | cpio -o -H newc | gzip > $(BUILD_DIR)/initramfs.cpio.gz + +$(BUSYBOX_DIR): $(EXTERNAL_DIR) + @echo "[yerba] cloning BusyBox..." + git clone --depth 1 $(BUSYBOX_REPO) $(BUSYBOX_DIR) + +busybox: $(BUSYBOX_DIR) $(BUILD_DIR) + @echo "[yerba] building BusyBox..." + $(MAKE) -C $(BUSYBOX_DIR) defconfig + $(MAKE) -C $(BUSYBOX_DIR) -j$(shell nproc) + $(MAKE) -C $(BUSYBOX_DIR) CONFIG_PREFIX=$(BUSYBOX_DIR)/_install install + +iso: kernel initramfs busybox + @echo "[yerba] TODO: make this output an ISO when ready" + @echo "[yerba] Kernel located at $(BUILD_DIR)/bzImage" + @echo "[yerba] Initramfs located at $(BUILD_DIR)/initramfs.cpio.gz" + +clean: + rm -rf $(EXTERNAL_DIR) $(BUILD_DIR) + +run: iso + @echo "[yerba] booting in QEMU..." + qemu-system-x86_64 -kernel $(BUILD_DIR)/bzImage -initrd $(BUILD_DIR)/initramfs.cpio.gz -nographic -append "console=ttyS0" |
