Rename to rpmroute
The router began as a port of FreeRouting and has grown its own engine (negotiated congestion, tree nets, exact checks, axis escapes), and 'freeroute' was one letter from the project it no longer follows. The package, module and command are now rpmroute; the freeroute command stays as an alias, and the RPMROUTE / RPMROUTE_ORACLE_JAVA variables fall back to the old FREEROUTE names. Version 2026.10.07. Routing is unchanged: a PCBench board routes to a byte-identical session either way.
This commit is contained in:
+5
-5
@@ -37,8 +37,8 @@ import tempfile
|
||||
import threading
|
||||
import time
|
||||
|
||||
NOT_ROUTED = re.compile(r"freeroute: (\d+) connection\(s\) not routed")
|
||||
TO_ZONE = re.compile(r"freeroute: (\d+) more connection\(s\) left to a zone fill")
|
||||
NOT_ROUTED = re.compile(r"rpmroute: (\d+) connection\(s\) not routed")
|
||||
TO_ZONE = re.compile(r"rpmroute: (\d+) more connection\(s\) left to a zone fill")
|
||||
|
||||
|
||||
def parse_boards(path: Path) -> list[tuple[str, Path, list[str]]]:
|
||||
@@ -61,8 +61,8 @@ def parse_variant(spec: str) -> tuple[str, str | None, list[str]]:
|
||||
if not sep or not head:
|
||||
raise SystemExit(f"variant {spec!r}: want NAME=FLAGS or NAME@SRC=FLAGS")
|
||||
name, _, src = head.partition("@")
|
||||
if src and not (Path(src) / "freeroute").is_dir():
|
||||
raise SystemExit(f"variant {name}: {src} has no freeroute package")
|
||||
if src and not (Path(src) / "rpmroute").is_dir():
|
||||
raise SystemExit(f"variant {name}: {src} has no rpmroute package")
|
||||
return name, src or None, shlex.split(flags)
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ def run_one(board, variant, seed: int, timeout: float) -> dict:
|
||||
env["PYTHONPATH"] = src + os.pathsep + env.get("PYTHONPATH", "")
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
cmd = [
|
||||
sys.executable, "-m", "freeroute.cli", str(dsn), "-do", f"{tmp}/out.ses",
|
||||
sys.executable, "-m", "rpmroute.cli", str(dsn), "-do", f"{tmp}/out.ses",
|
||||
*board_flags, *flags, "--seed", str(seed),
|
||||
]
|
||||
start = time.monotonic()
|
||||
|
||||
+8
-8
@@ -23,14 +23,14 @@ import json
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
from freeroute.board import build_board
|
||||
from freeroute.board.search_tree import ShapeSearchTree
|
||||
from freeroute.dsn import parse_dsn
|
||||
from freeroute.geometry.octagon import overlaps_2d
|
||||
from freeroute.route import grid_router
|
||||
from freeroute.route.exact_router import route_board_exact
|
||||
from freeroute.route.grid_router import GridRouter, _ends_of
|
||||
from freeroute.route.pipeline import (
|
||||
from rpmroute.board import build_board
|
||||
from rpmroute.board.search_tree import ShapeSearchTree
|
||||
from rpmroute.dsn import parse_dsn
|
||||
from rpmroute.geometry.octagon import overlaps_2d
|
||||
from rpmroute.route import grid_router
|
||||
from rpmroute.route.exact_router import route_board_exact
|
||||
from rpmroute.route.grid_router import GridRouter, _ends_of
|
||||
from rpmroute.route.pipeline import (
|
||||
_mm_to_board,
|
||||
_net_widths_board,
|
||||
_rule_clearance_dsn,
|
||||
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# Route one KiCad board with freeroute and judge the result with KiCad's DRC.
|
||||
# Route one KiCad board with rpmroute and judge the result with KiCad's DRC.
|
||||
#
|
||||
# bench/drc_check.sh [--keep] <board.kicad_pcb> <out-dir> [freeroute args...]
|
||||
# bench/drc_check.sh [--keep] <board.kicad_pcb> <out-dir> [rpmroute args...]
|
||||
#
|
||||
# Copies the board (and its .kicad_pro) into <out-dir>, strips its tracks and
|
||||
# vias unless --keep is given (then they reach the router as fixed wiring),
|
||||
@@ -10,14 +10,14 @@
|
||||
# shorts, opens, hole problems (whatever severity the board gives them) and
|
||||
# the other errors. The source board is never touched.
|
||||
#
|
||||
# FREEROUTE (default: this checkout's .venv/bin/freeroute) and MCK (default
|
||||
# RPMROUTE (or the older FREEROUTE; default: this checkout's .venv/bin/rpmroute) and MCK (default
|
||||
# ~/claude/mckicad) pick the builds to judge.
|
||||
set -euo pipefail
|
||||
keep=0
|
||||
if [[ "${1:-}" == "--keep" ]]; then keep=1; shift; fi
|
||||
src="$1"; out="$2"; shift 2
|
||||
here="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
FREEROUTE="${FREEROUTE:-$here/.venv/bin/freeroute}"
|
||||
RPMROUTE="${RPMROUTE:-${FREEROUTE:-$here/.venv/bin/rpmroute}}"
|
||||
MCK="${MCK:-$HOME/claude/mckicad}"
|
||||
rm -rf "$out"; mkdir -p "$out"
|
||||
cp "${src%.kicad_pcb}.kicad_pro" "$out/board.kicad_pro" 2>/dev/null || true
|
||||
@@ -43,7 +43,7 @@ assert FreeRoutingEngine().export_dsn_from_kicad('$out/board.kicad_pcb', '$out/b
|
||||
>/dev/null 2>&1 || { echo "$out: DSN export failed"; exit 1; }
|
||||
|
||||
start=$(date +%s.%N)
|
||||
"$FREEROUTE" "$out/board.dsn" -do "$out/board.ses" "$@" >"$out/route.log" 2>&1 || true
|
||||
"$RPMROUTE" "$out/board.dsn" -do "$out/board.ses" "$@" >"$out/route.log" 2>&1 || true
|
||||
secs=$(python3 -c "print(round($(date +%s.%N)-$start,1))")
|
||||
[[ -s "$out/board.ses" ]] || { echo "$out: no session ($(tail -1 "$out/route.log"))"; exit 1; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user