.PHONY: check fmt clippy test kani build all image run ci kernel-fmt kernel-clippy kernel-test test-qemu RISCV_TARGET = riscv64gc-unknown-none-elf KERNEL_BIN = target/$(RISCV_TARGET)/release/adapter-riscv # Harts QEMU boots; `make run-gui SMP=1` for a single core. SMP ?= 4 KERNEL_CRATES = -p types -p domain -p kernel -p platform all: check fmt clippy test # Gate for kernel work: formatting, lints, unit tests, Kani proofs, RISC-V build. ci: kernel-fmt kernel-clippy kernel-test kani build kernel-fmt: cargo fmt $(KERNEL_CRATES) -p adapter-riscv -- --check kernel-clippy: cargo clippy $(KERNEL_CRATES) --all-targets -- -D warnings cargo clippy -p adapter-riscv --target $(RISCV_TARGET) --no-deps -- -D warnings kernel-test: cargo test $(KERNEL_CRATES) check: cargo check --workspace fmt: cargo fmt --all -- --check clippy: cargo clippy --workspace -- -D warnings test: cargo test --workspace # CBMC can eat all RAM and take the desktop down with it; cap each run. KANI = systemd-run --user --scope -q -p MemoryMax=12G -p MemorySwapMax=0 cargo kani kani-types: $(KANI) -p types kani-domain: $(KANI) -p domain kani-kernel: $(KANI) -p kernel kani: kani-types kani-domain kani-kernel # Programs first: the kernel image packs init and storage (see the # adapter's build.rs). build: cargo build --target $(RISCV_TARGET) --release \ -p init -p echo -p snake \ -p display-qemu -p input-qemu -p storage-qemu \ -p log-server -p permission-manager -p session-server -p smptest -p spawntest -p hello \ -p terminal-server -p shell cargo build --target $(RISCV_TARGET) --release -p adapter-riscv image: build scripts/make-disk-image.sh # Boots a test image (normal image + smptest.elf) on $(SMP) harts; init runs # the SMP self-test and halts. Passes only on "SMPTEST PASS". test-qemu: build IMG=test.img SMPTEST=1 scripts/make-disk-image.sh > /dev/null SMP=$(SMP) scripts/test-qemu.sh test.img run: build qemu-system-riscv64 -machine virt -smp $(SMP) -nographic -bios default \ -kernel $(KERNEL_BIN) run-disk: image qemu-system-riscv64 -machine virt -smp $(SMP) -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 -smp $(SMP) -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 \ -device virtio-keyboard-device \ -serial stdio