Expose the exact and room engines in the CLI

The grid MVP was the only track reachable from the command line, so the
continuous room engine, channel packing, shove, and 45-degree routing were
unusable by anything shelling out to freeroute.

Add --engine {grid,exact,room} (default grid, unchanged behaviour) plus
--pack / --shove / --diagonal, and honour -mp on the tracks that implement
rip-up passes. Not every engine supports every pass; ENGINE_OPTIONS is the
matrix and an unsupported combination exits 2 with a message naming the
engines that do support the flag, rather than silently no-opping.
This commit is contained in:
2026-07-13 18:15:02 -06:00
parent accec686f8
commit 758ba1fbe3
3 changed files with 264 additions and 15 deletions
+21 -4
View File
@@ -97,10 +97,16 @@ def _to_routing_result(route, dsn: DsnBoard, scale: int, layer_names: list[str])
def build_routing_result(
dsn: DsnBoard, *, layers: list[int] | None = None, rip_up: bool = True
dsn: DsnBoard,
*,
layers: list[int] | None = None,
rip_up: bool = True,
max_passes: int = 10,
) -> RoutingResult:
"""Route ``dsn`` (grid track) and convert to a DSN-unit RoutingResult."""
route, scale, layer_names = route_dsn_board(dsn, layers=layers, rip_up=rip_up)
route, scale, layer_names = route_dsn_board(
dsn, layers=layers, rip_up=rip_up, max_passes=max_passes
)
return _to_routing_result(route, dsn, scale, layer_names)
@@ -136,11 +142,22 @@ def route_dsn_board_exact(
def build_exact_routing_result(
dsn: DsnBoard, *, layers: list[int] | None = None, shove: bool = False, diagonal: bool = False
dsn: DsnBoard,
*,
layers: list[int] | None = None,
shove: bool = False,
diagonal: bool = False,
rip_up: bool = True,
max_passes: int = 10,
) -> RoutingResult:
"""Route ``dsn`` (exact track) and convert to a DSN-unit RoutingResult."""
exact, scale, layer_names = route_dsn_board_exact(
dsn, layers=layers, shove=shove, diagonal=diagonal
dsn,
layers=layers,
shove=shove,
diagonal=diagonal,
rip_up=rip_up,
max_passes=max_passes,
)
return _to_routing_result(exact.result, dsn, scale, layer_names)