The Project Manifest (fire.toml)
fire reads a fire.toml manifest from the project directory.
It names the project, locates the sources, and configures how
fire build / fire run build and execute the image and how fire verify invokes
the model checker.
🚧 This page documents the manifest schema introduced with the
fire build/fire run/fire verifysubcommands (PR #174). Until that lands on a release, the previous[target]/[qemu]layout applies — see theCHEATSHEET.mdof your installed version.
Complete example
[project]
name = "datadiode" # output filename stem: build/datadiode.img / .xml
src = "." # directory with the .fis/.fi files, relative to this file
[run]
mode = "qemu" # qemu | hardware (hardware is not yet implemented)
# Arguments for qemu-system-aarch64; {img} is substituted with the
# absolute path to the built image at runtime.
args = [
"-machine", "virt,virtualization=on",
"-cpu", "cortex-a53",
"-serial", "mon:stdio",
"-device", "loader,file={img},addr=0x70000000,cpu-num=0",
"-m", "size=2G",
"-nographic",
]
[run.target]
board = "qemu_virt_aarch64" # Microkit board identifier
profile = "debug" # debug | release
# sdk / gcc / ld — optional, fall back to $MICROKIT_SDK / $GCC / $LD
# allow_wf2_cycles = true # skip WF2 when `fire verify` covers deadlock-freedom
[verify]
mode = "verifyta" # verification engine
# path / args — optional; path falls back to $VERIFYTA / PATH
[project] — identity and sources
| Field | Required | Description |
|---|---|---|
name | yes | Short name used as the output filename stem: fire build / fire run write build/<name>.img, fire verify writes build/<name>.xml and reads the hand-written <src>/<name>.q. |
src | yes | Directory containing the .fis / .fi files, relative to fire.toml. Build artifacts go to <src>/build/. |
[run] — execution mode and arguments
| Field | Required | Description |
|---|---|---|
mode | yes | qemu or hardware. Hardware deployment is not yet implemented. |
args | yes | Arguments passed verbatim to the executor (qemu-system-aarch64 in QEMU mode). The placeholder {img} is substituted with the absolute path to the built .img. |
[run.target] — board and toolchain
| Field | Required | Description |
|---|---|---|
board | yes | Microkit board identifier, e.g. qemu_virt_aarch64, kria_k26. Must exist in the SDK’s board/ directory. |
profile | yes | Microkit build profile: debug or release. |
sdk | no | Path to the Microkit SDK root. Falls back to $MICROKIT_SDK. |
gcc | no | AArch64 cross-compiler binary. Falls back to $GCC. |
ld | no | AArch64 cross-linker binary. Falls back to $LD. |
allow_wf2_cycles | no | Pass --allow-wf2-cycles to fic: skip the structural WF2 acyclicity check. Use when deadlock-freedom is established by fire verify instead — WF2 rejects cyclic topologies even when they are deadlock-free under a fair scheduler. Default false. |
When sdk / gcc / ld are set they are passed to the fic child
process as environment variables, overriding any values already in
your environment — useful for pinning a toolchain per project.
[verify] — formal verification
Optional section; configures fire verify.
| Field | Required | Description |
|---|---|---|
mode | yes | Verification engine. Currently verifyta (UPPAAL); spin, prism, … may follow. |
path | no | Path to the verifier binary. Falls back to $VERIFYTA, then to verifyta on PATH. |
args | no | Extra flags appended after the model and query arguments. |
Worked example
The repository’s demo/datadiode/fire.toml is a complete,
runnable manifest for the data-diode demo — three protection domains
(eth_outer, dd, eth_inner) built into one image and launched on
qemu_virt_aarch64 with two virtio-net devices, driven from the host
(demo/datadiode/inject.py) since a foreign-MAC diode needs raw
frames a NAT can’t deliver.