# Copyright © 2019, 2020, 2021 Göran Weinholt
# SPDX-License-Identifier: AGPL-3.0-or-later

ROOT = ../..
export LOKO_SOURCE=$(ROOT)/.akku/lib

# These paths work on Debian
SYSLINUX_LIB = /usr/lib/SYSLINUX
SYSLINUX_MODS_BIOS = /usr/lib/syslinux/modules/bios

# Source files to be embedded in the image
EMBED_SRC =

QEMU_OPTIONS = \
  -enable-kvm \
  -hda loko-hdd.img \
  -m 1024 \
  -serial stdio \
  -debugcon vc \
  -k sv

all: pc-repl

.akku/env:
	akku install

pc-repl: pc-repl.sps pointer.scm .akku/env $(ROOT)/loko
	.akku/env $(ROOT)/loko -feval -ftarget=pc --compile $< --output $@

run: pc-repl loko-hdd.img
	qemu-system-x86_64 $(QEMU_OPTIONS) -nic user,model=virtio-net-pci

# Run with the network attached to tap0
run-tap: pc-repl loko-hdd.img
	qemu-system-x86_64 $(QEMU_OPTIONS) \
	  -nic tap,model=rtl8139,ifname=tap0,script=no,downscript=no \
	  -usb -device usb-kbd -device usb-mouse

# Use OHCI for USB, networking on tap0
run-ohci: pc-repl loko-hdd.img
	qemu-system-x86_64 $(QEMU_OPTIONS) \
	  -nic tap,model=rtl8139,ifname=tap0,script=no,downscript=no \
	  -usb -device pci-ohci -device usb-kbd -device usb-mouse

# Use QEMU as the boot loader
run-qemuboot: pc-repl loko-hdd.img
	qemu-system-x86_64 $(QEMU_OPTIONS) \
	  -kernel pc-repl \
	  -initrd '.akku/lib/zabavno/cpu/x86.sls,.akku/lib/zabavno/cpu/compat.sls,.akku/lib/zabavno/cpu/x86-utils.sls' \
	  -append 'LOKO_LIBRARY_PATH=/boot/.akku/lib CONSOLE=com1'

bootpart.img: pc-repl syslinux.cfg
	mkdir -p tmp/boot/syslinux tmp/lib
	cp pc-repl tmp/boot/loko
	cp $(SYSLINUX_MODS_BIOS)/* tmp/boot/syslinux/
	cp syslinux.cfg tmp/boot/syslinux/syslinux.cfg
	cp -rL .akku/lib tmp
	find tmp/lib -ipath '*:*' -delete
	dd if=/dev/zero of=$@.tmp bs=512 count=100031
	mformat -N 00000000 -i $@.tmp
	mcopy -i $@.tmp -s tmp/lib "::"
	mcopy -i $@.tmp -s tmp/boot "::boot"
	mmd -i $@.tmp "::src"
	for x in $(EMBED_SRC); do mcopy -i $@.tmp "$$x" "::src"; done
	syslinux --install $@.tmp
	rm -rf tmp
	mv -f $@.tmp $@

loko-hdd.img: bootpart.img
	dd if=bootpart.img of=$@.tmp bs=512 seek=32
	dd if=$(SYSLINUX_LIB)/mbr.bin of=$@.tmp conv=notrunc
	printf "label: dos\nlabel-id: 0x12345678\n\nstart=32, size=100000, type=6, bootable" | /sbin/sfdisk $@.tmp
	mv -f $@.tmp $@

clean:
	rm -f bootpart.img loko-hdd.img
	rm -rf tmp
	rm -f pc-repl

distclean:
	rm -rf .akku
