QEMU := qemu-system-x86_64 ARCH_TEMP_FILES := $(BUILDDIR)/$(KERNEL_EXEC).elf32 # qemu refuses to boot ELF64 binaries. this creates a patched version of the kernel # binary to trick qemu into thinking its an ELF32. # this has no effect on the kernel itself; the x86_64 kernel's # entry point is 32-bit machine code. $(BUILDDIR)/$(KERNEL_EXEC).elf32: $(BUILDDIR)/$(KERNEL_EXEC) @cp $(BUILDDIR)/$(KERNEL_EXEC) $(BUILDDIR)/$(KERNEL_EXEC).elf32 @printf '\x03\x00' | dd of=$(BUILDDIR)/$(KERNEL_EXEC).elf32 bs=1 seek=18 count=2 conv=notrunc 2> /dev/null run: $(BUILDDIR)/$(KERNEL_EXEC) $(BUILDDIR)/$(KERNEL_EXEC).elf32 @echo " \033[1;93mBOOT\033[0m $<" @$(QEMU) -kernel $(BUILDDIR)/$(KERNEL_EXEC).elf32 debug: $(BUILDDIR)/$(KERNEL_EXEC) $(BUILDDIR)/$(KERNEL_EXEC).elf32 @echo " \033[1;93mBOOT\033[0m $<" @$(QEMU) \ -kernel $(BUILDDIR)/$(KERNEL_EXEC).elf32 -S -s \ -monitor stdio