aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2026-06-01 22:41:22 +1200
committerArslaan Pathan <[email protected]>2026-06-01 22:41:22 +1200
commitec28c3562b601c217229400f95ae790a380aa29c (patch)
tree3e801ecc3fd3c2bdb9e771a884e35d3b65072378 /Makefile
downloadyerbalinux-ec28c3562b601c217229400f95ae790a380aa29c.tar.xz
yerbalinux-ec28c3562b601c217229400f95ae790a380aa29c.zip
Initial commit
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile59
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"