.PHONY: check fmt clippy test kani build all image run

RISCV_TARGET = riscv64gc-unknown-none-elf
KERNEL_BIN = target/$(RISCV_TARGET)/release/adapter-riscv

all: check fmt clippy test

check:
	cargo check --workspace

fmt:
	cargo fmt --all -- --check

clippy:
	cargo clippy --workspace -- -D warnings

test:
	cargo test --workspace

kani-types:
	cargo kani -p types

kani-domain:
	cargo kani -p domain

kani-kernel:
	cargo kani -p kernel

kani: kani-types kani-domain kani-kernel

build:
	cargo build --target $(RISCV_TARGET) --release \
		-p adapter-riscv -p init -p echo -p snake \
		-p display-qemu -p input-qemu -p storage-qemu \
		-p log-server -p permission-manager -p session-server

image: build
	scripts/make-disk-image.sh

run: build
	qemu-system-riscv64 -machine virt -nographic -bios default \
		-kernel $(KERNEL_BIN)

run-disk: image
	qemu-system-riscv64 -machine virt -nographic -bios default \
		-kernel $(KERNEL_BIN) \
		-drive file=boot.img,if=none,format=raw,id=hd0 \
		-device virtio-blk-device,drive=hd0

run-gui: image
	qemu-system-riscv64 -machine virt -bios default \
		-kernel $(KERNEL_BIN) \
		-drive file=boot.img,if=none,format=raw,id=hd0 \
		-device virtio-blk-device,drive=hd0 \
                -device virtio-gpu-device \
                -serial stdio
