SHELL := /usr/bin/env bash
BIN := _build/default/src/storage_sim.exe

.PHONY: all build clean test run-pcs run-usm render-diagrams collaterals

all: build

build:
	dune build src/storage_sim.exe
	mkdir -p bin
	cp $(BIN) bin/storage-sim

render-diagrams:
	bash scripts/render_diagrams.sh

run-pcs: build
	mkdir -p out/pcs-scale-both
	./bin/storage-sim pcs --scenario scenarios/pcs/roce_gpu_txg_scale_both.json --out out/pcs-scale-both

run-usm: build
	mkdir -p out/usm-scale-both
	./bin/storage-sim usm --scenario scenarios/usm/mesh_roce_txg_scale_both.json --out out/usm-scale-both

collaterals: render-diagrams run-pcs run-usm
	tests/verify_outputs.py out/pcs-scale-both out/usm-scale-both docs/diagrams
	tests/repeatability.py ./bin/storage-sim scenarios/pcs/roce_gpu_txg_scale_both.json pcs out/repeatability-pcs-a out/repeatability-pcs-b
	tests/repeatability.py ./bin/storage-sim scenarios/usm/mesh_roce_txg_scale_both.json usm out/repeatability-usm-a out/repeatability-usm-b

# Full repeatable test suite: builds, renders diagrams, runs both scenarios, checks outputs,
# and verifies byte-for-byte repeatability on deterministic artifacts.
test: build collaterals
	@echo "All tests passed."

clean:
	dune clean
	rm -rf bin out docs/diagrams/png/*.png docs/diagrams/svg/*.svg
