Interface
ironlab CLI
ratatui + clap. doctor, status, load, init. Default is status when you have a TTY.
Binary name ironlab. Rust workspace: crates/ironlab + crates/ironlab-device.
cargo run -p ironlab -- doctor --plain
cargo run -p ironlab -- status --plain
cargo run -p ironlab -- load path/to/design.xclbin # holds until Ctrl-C
ironlab init my_op
just ironlab -- doctor --plain wraps the same binary.
doctor
Probes facts: PCI, /dev/accel, firmware, amdxdna, memlock, XRT. Prints the contents of toolchain-pins.toml.
Fix hints branch on apt / dnf / pacman / zypper. Arch is one tested distro, not the identity of the project.
--plain for scripts; TUI if stdout is a TTY.
status / list
Occupancy: holder pid, lock state, when the claim started.
load
Takes the exclusive occupancy flock, then tries xrtDeviceLoadXclbinFile. On XDNA that load returns ENOTSUP (not an FPGA bitstream). The lock still matters — see occupancy.md. Holds until Ctrl-C.
A second ironlab load is refused with the holder pid (started_unix=).
init
Scaffolds operators/<name>/{op,design,reference,test}.py. Add aie_kernels/aie2p/<name>.cc next.
build / test / run subcommands still point authors at just run operators/<name>/design.py.