TARGETS = disk.img diskg.img disku.img
TOCLEAN = dusk*.efi OVMF*.fd common.img
include ../common.mk
QEMU_FLAGS = -accel kvm -accel tcg -rtc base=utc
OVMFDIR = /usr/share/OVMF

duskx64.efi: $(DUSK)
	$(DUSK) -e -c 'f<< xcomp/amd64/efi/deploy.fs stdio spitefi' > $@

duskia32.efi: $(DUSK)
	$(DUSK) -e -c 'f<< xcomp/i386/efi/deploy.fs stdio spitefi' > $@

common.img: duskx64.efi duskia32.efi
	dd if=/dev/zero of=$@ bs=1024 count=8192 # 8M
	$(DUSK) -c '1 4 "$@"' -f $(DUSKDIR)/makefat.fs
	$(DUSK) -c '"$@"' -f $(DUSKDIR)/syncfs.fs
# TODO: have "fatcp.fs" create directories if needed
	mmd -i $@ ::/EFI
	mmd -i $@ ::/EFI/BOOT
	mcopy -i $@ duskx64.efi ::/EFI/BOOT/BOOTX64.EFI
	mcopy -i $@ duskia32.efi ::/EFI/BOOT/BOOTIA32.EFI
#	$(DUSK) -c '"dusk.efi" "$@" mountImage' -f $(DUSKDIR)/fatcp.fs < dusk.efi

disk.img: common.img
	cp common.img $@
	$(DUSK) -c '"init.fs" "$@" mountImage' -f $(DUSKDIR)/fatcp.fs < init.fs

diskg.img: common.img
	cp common.img $@
	$(DUSK) -c '"init.fs" "$@" mountImage' -f $(DUSKDIR)/fatcp.fs < initg.fs

disku.img: common.img
	cp common.img $@
	$(DUSK) -c '"init.fs" "$@" mountImage' -f $(DUSKDIR)/fatcp.fs < initu.fs

OVMF_CODE_4M.fd: $(OVMFDIR)/OVMF_CODE_4M.fd
	cp $(OVMFDIR)/OVMF_CODE_4M.fd $@

OVMF32_CODE_4M.fd: $(OVMFDIR)/OVMF32_CODE_4M.fd
	cp $(OVMFDIR)/OVMF32_CODE_4M.fd $@

.PHONY: emul
emul: disk.img OVMF_CODE_4M.fd
	qemu-system-x86_64 $(QEMU_FLAGS) \
		-net none -pflash OVMF_CODE_4M.fd \
		-drive file=disk.img,if=ide,format=raw

.PHONY: emulia32
emulia32: disk.img OVMF32_CODE_4M.fd
	qemu-system-i386 $(QEMU_FLAGS) \
		-net none -pflash OVMF32_CODE_4M.fd \
		-drive file=disk.img,if=ide,format=raw
