Local physical builds¶
The pinned LibreLane container supports native ARM64 on Apple Silicon; Linux AMD64 is also available. Docker must be running. Local optimization does not need GitHub Actions, and builds run with container networking disabled after dependencies have been fetched.
One-time setup¶
Use new, dedicated dependency directories. Preserve these exact revisions:
docker pull ghcr.io/librelane/librelane@sha256:d109140b8f17fc54f4fca998beb8124f4949404ec52e339eebd2250854a18b5a
git clone --filter=blob:none --no-checkout https://github.com/IHP-GmbH/IHP-Open-PDK.git /tmp/protocol-pdk
git -C /tmp/protocol-pdk sparse-checkout set ihp-sg13cmos5l ihp-sg13g2
git -C /tmp/protocol-pdk checkout 2bbec755dc67ca3db0261c3d6163e15735d66710
git clone https://github.com/TinyTapeout/tt-support-tools.git /tmp/protocol-tt
git -C /tmp/protocol-tt checkout f6bf5c587fba4a4a8abd4c0a03234fccfbf6e61e
Keep both PDK directories: CMOS5L contains symlinks to shared SG13G2 files, including the extraction rules. A CMOS5L-only sparse checkout cannot build. The runner rejects modified tracked dependency files or incorrect revisions.
Run¶
From the repository, using Python 3.11+ and a new output directory each time:
python3 tools/local_flow.py \
--pdk-root /tmp/protocol-pdk --tt-root /tmp/protocol-tt \
--output /tmp/protocol-route-01 --stage route --threads 4
route runs synthesis, placement, clock tree, routing, extraction, and final
STA, stopping before the expensive layout verification steps. It is an
optimization checkpoint, not a passing release gate. The runner additionally
checks routed electrical, timing, annotation, antenna, and routing-DRC metrics;
missing or violating metrics cause exit code 2 even when LibreLane exits zero.
Recheck an existing output without rebuilding with:
python3 tools/local_flow.py --check-only --output /tmp/protocol-route-01
Use --stage full with a fresh output directory for the complete Classic GDS
flow, including its enabled DRC/LVS/checker steps. Neither mode runs Tiny
Tapeout precheck or this repository’s gate-level and functional regressions.
The helper copies only info.yaml, physical configuration, and Verilog inputs
to an isolated workspace. Original sources and dependencies are not changed;
existing output directories are never overwritten. It records the source
commit, dirty-state flag, exact input hashes, image identity/architecture,
dependency revisions, runner hash, stage, and exit status in
local-evidence.json. Tool versions and console output are in flow.log.
The generated user configuration matches the pinned support-tools recipe;
an exact-match regression test covers the V1 mapping.
Keep the output directory: it contains intermediate databases, routed netlist,
SPEF, STA reports, and reproducible failure diagnostics. The in-container
/work and /pdk paths are mount paths, not host paths. Logs can be watched in
another terminal with tail -f /tmp/protocol-route-01/flow.log.
Limits¶
Local ARM64 results need not be bit-identical to Linux AMD64 CI. Final release acceptance still requires all mandatory tests and physical checks on one identified source revision; see validation. A shortened run, a repaired intermediate database, or positive setup slack is not signoff. Temporary directories may be removed by the operating system: use persistent storage for evidence that must survive until release.