TARGET ?= "x86_64-unknown-none" QEMU ?= "qemu-system-x86_64" all: clean prepare gila iso run # Prepare toolchain prepare: rustup install nightly rustup target add $(TARGET) # Run the ISO in an emulator. run: build/gila.iso ifeq ($(TARGET),x86_64-unknown-none) QEMU = "qemu-system-x86_64" else ifeq ($(TARGET),riscv64gc-unknown-none-elf) QEMU = "qemu-system-riscv64" else ifeq ($(TARGET),aarch64-unknown-none) QEMU = "qemu-system-aarch64" else ifeq ($(TARGET),loongarch64-unknown-none) QEMU = "qemu-system-loongarch64" endif $(QEMU) -drive file=build/gila.iso,format=raw,index=0,media=disk # Build the bootable kernel image. .PHONY: build/iso/gila gila: prepare $(wildcard src/*.rs) mkdir -p build/iso/ cargo build --release -Z unstable-options --target=$(TARGET) --artifact-dir build/iso/ # Build a bootable ISO and install Limine. .PHONY: build/gila.iso iso: build/iso/gila gila limine.conf mkdir -p build/iso/limine mkdir -p build/iso/EFI/BOOT cp ./limine.conf build/iso/ cp /usr/share/limine/limine-bios.sys build/iso/limine/ cp /usr/share/limine/limine-bios-cd.bin build/iso/limine/ cp /usr/share/limine/limine-uefi-cd.bin build/iso/limine/ xorriso -as mkisofs -b limine/limine-bios-cd.bin -no-emul-boot \ -boot-load-size 4 -boot-info-table --efi-boot \ limine/limine-uefi-cd.bin -efi-boot-part --efi-boot-image \ --protective-msdos-label build/iso -o build/gila.iso limine bios-install build/gila.iso clean: rm -rf build cargo clean