make lint first runs make interrogate, which needs uv and requires a
docstring on every Python definition under scripts and tests.
Development builds (make test, make lint, make typecheck and the debug
build) use the parallel rustc frontend (-Zthreads=8) and, on Linux, the
mold linker. Install mold before building on Linux: the configuration names
it, so a build without it fails at link time (on Debian or Ubuntu, install the
mold package with apt-get). macOS keeps its platform linker, because mold
ships for Linux only.
The flags live in .cargo/config.toml, but Cargo applies exactly one
rustflags source and an assigned RUSTFLAGS replaces every configuration
source. The Makefile therefore restates the flags in each recipe and keeps any
RUSTFLAGS already in the environment, appending the standard flags after it.
Two builds are held out deliberately. The coverage build assigns its own flags,
because a measurement should not depend on the fast flags. make release keeps
the environment's RUSTFLAGS and names neither fast flag, so a shipped
artefact links with the platform linker. A bare cargo build --release takes
the configuration's flags unless RUSTFLAGS is assigned, for example
RUSTFLAGS="" cargo build --release.
Cranelift is not adopted; the developers' guide records the reason. See ADR 011 for the reasoning.