default: out/main # asm and init order is important src/main.asm: src/uefi.asm src/impl.asm src/bootstrap.asm src/main.asm: init/sys.f init/uefi.f init/blurb.f out: mkdir -p out out/main: src/main.asm | out fasm $< $@ # Start script out/startup.nsh: out echo 'fs0:main' > $@ .PHONY: qemu # Based on https://wiki.osdev.org/UEFI#Emulation_with_QEMU_and_OVMF qemu: ARGS = -cpu qemu64 qemu: ARGS += -drive if=pflash,format=raw,unit=0,file=OVMF_CODE.fd,readonly=on qemu: ARGS += -drive if=pflash,format=raw,unit=1,file=OVMF_VARS.fd qemu: ARGS += -net none qemu: ARGS += -drive format=raw,file=fat:rw:out qemu: ARGS += -display type=gtk,zoom-to-fit=on qemu: out/main out/startup.nsh OVMF_CODE.fd OVMF_VARS.fd qemu-system-x86_64 $(ARGS) OVMF_CODE.fd OVMF_VARS.fd: %: /usr/share/OVMF/% cp $< $@ OVMF: OVMF_CODE.fd OVMF_VARS.fd EFI.raw: out/main mkfs.fat -C $@ 2048 # =1Mb mmd -i "$@" ::efi mmd -i "$@" ::efi/boot mcopy -i "$@" Makefile "::EFI/BOOT" mcopy -i "$@" out/main "::EFI/BOOT/bootx64.efi" .PHONY: clean clean: rm -rf out OVMF_CODE.fd OVMF_VARS.fd EFI.raw