.SILENT: TARGET = amd64 KBIN = sys/l5 SHIMDIR = shim SHIMBIN = BOOTX64.EFI SYSROOT = $(shell pwd)/root OMAR = tools/omar/bin/omar ISO = lunos.iso # Build tools BINUTILS_DIR := $(shell pwd)/cc/toolchain/build-binutils USER_CC = $(shell pwd)/cc/gcc/bin/x86_64-pc-ethos-gcc CC := clang LD := ld AS := as SYS_LD_FLAGS := -Tsys/arch/$(TARGET)/conf/sys.ld # QEMU emulator flags QEMU_FLAGS = --enable-kvm -serial stdio -cdrom $(ISO) \ -M q35 -cpu host -smp 4 -m 2G .PHONY: all all: root lib user sys image .PHONY: sys sys: cd sys/; make CC=$(CC) AS=$(AS) LD=$(LD) TARGET=$(TARGET) TOOLS=$(shell pwd)/tools .PHONY: user user: cd cmd/; make CC=$(USER_CC) AS=$(AS) LD=$(LD) TARGET=$(TARGET) \ SYSROOT=$(SYSROOT) .PHONY: lib lib: cd lib/; make CC=$(USER_CC) AS=$(AS) LD=$(LD) TARGET=$(TARGET) \ SYSROOT=$(SYSROOT) root: mkdir -p $(SYSROOT)/ mkdir -p $(SYSROOT)/boot/ mkdir -p $(SYSROOT)/boot/np/ mkdir -p $(SYSROOT)/usr/include/ mkdir -p $(SYSROOT)/usr/bin/ mkdir -p sys/target/header/ rsync -av sys/include/arch/$(TARGET)/ sys/target/header/machine/ rsync -av sys/np/sample/*.np $(SYSROOT)/boot/np/ .PHONY: sysroot image: $(LD) $(shell find sys/ -name "*.o") \ -o $(KBIN) $(SYS_LD_FLAGS) cp $(KBIN) root/boot/ mkdir -p iso_root/boot/ cp data/boot/limine.conf $(SHIMDIR)/limine/limine-bios.sys \ $(SHIMDIR)/limine/limine-bios-cd.bin $(SHIMDIR)/limine/limine-uefi-cd.bin iso_root/ cp data/boot/wallpaper.jpg iso_root/boot $(OMAR) -i $(SYSROOT) -o iso_root/boot/initrd.omar cp sys/l5 iso_root/boot/ xorriso -as mkisofs -b limine-bios-cd.bin -no-emul-boot -boot-load-size 4\ -boot-info-table --efi-boot limine-uefi-cd.bin -efi-boot-part \ --efi-boot-image --protective-msdos-label iso_root/ -o $(ISO) 1>/dev/null $(SHIMDIR)/limine/limine bios-install $(ISO) 1>/dev/null rm -rf iso_root/ .PHONY: qemu-amd64 run: qemu-system-x86_64 $(QEMU_FLAGS) .PHONY: clean clean: rm -rf lunos.iso root rm -f $(KBIN) cd sys/; make clean TARGET=$(TARGET) .PHONY: distclean distclean: make clean; rm -rf sys/target srv/root