Skip to content

sync - #2

Open
nanocoh wants to merge 3454 commits into
keplertech:masterfrom
The-OpenROAD-Project:master
Open

sync#2
nanocoh wants to merge 3454 commits into
keplertech:masterfrom
The-OpenROAD-Project:master

Conversation

@nanocoh

@nanocoh nanocoh commented May 23, 2026

Copy link
Copy Markdown

Summary

[Describe your changes here]

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Refactoring
  • Documentation update

Impact

[How does this change the tool's behavior?]

Verification

  • I have verified that the local build succeeds (./etc/Build.sh).
  • I have run the relevant tests and they pass.
  • My code follows the repository's formatting guidelines.
  • I have included tests to prevent regressions.
  • I have signed my commits (DCO).

Related Issues

[Link issues here]

gadfort and others added 25 commits August 30, 2026 18:02
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
Signed-off-by: Peter Gadfort <gadfort@zeroasic.com>
Also resolve the chiplet prefix before searching the blocks, and skip pins
that have no location.

Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
…_actions/actions/cache/save-6.1.0

build(deps): bump actions/cache/save from 5.0.5 to 6.1.0
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
…only for rerouted nets

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
…all slacks

Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Vitor Bandeira <vvbandeira@baldr.local>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…tree-virtual-clock-ord2018

gui: fix two empty-container dereferences in ClockTree
Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
Add logger_->metric() calls for the GPL-1001, GPL-1005, GPL-1011,
GPL-1012, GPL-1013, GPL-1014, and GPL-1017 log messages so these
values are available in the metrics JSON output (via -metrics), not
just the log. GPL-1018 (final HPWL) is already covered by #11201.

Fixes #11234

Signed-off-by: Adityaa Mehra <adirakash@gmail.com>
gpl: report internal metrics for iterations and area
vvbandeira and others added 30 commits September 11, 2026 00:39
The move to Bazel removed the orVersion build argument. The Docker build
context has no .git directory, so the Bazel stamp cannot read the version.
A release image then reports its version as "unknown".

The status script now uses OPENROAD_VERSION when it is set. CMake has the
same override in -DOPENROAD_VERSION. The Dockerfile passes orVersion to
the build in this variable.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
…ection-4872

dbSta: check LEF/Liberty pin consistency
pdn: account for pad blockages to avoid shorting straps through pads
gpl: opt-in GPU build under Bazel (Kokkos/CUDA)
…s row

With -verbose, repair_timing prints a progress row every ten passes and
once after every endpoint it visits. Each row filled its StTNS column by
calling collectViolatingStartpoints(), which iterated every vertex in
the timing graph to find the startpoints before reading a slack for
each. The row's cost was therefore proportional to the design size,
paid once per endpoint visited: on a 149k-instance asap7 design the
rows were 88% of a 221 s floorplan repair_timing call that accepted
21 moves, and 10-48% of the setup repair on the other asap7 designs
where repair grinds (measured with scoped timers around the row).

The startpoint set does not change during setup repair: buffers are
inserted and removed, gates resized, cloned and pin-swapped, and none of
that creates or removes a top-level input or a register output. So the
vertex walk runs once per collector and later rows only re-read the
slacks of the cached vertices. The vector keeps graph iteration order,
so the stable sort that follows sees the same input and the printed
values are unchanged.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Every -verbose progress row of repair_timing called computeDesignArea(),
a walk over every instance in the block, to print the area growth
column. Rows are printed every ten passes and once per endpoint
visited, and most of them follow passes that accepted no move: on
riscv32i's cts repair 217 of 1181 passes accepted one. The area cannot
have changed between two rows unless the netlist was edited in between,
so the walk now runs only when the committer's edit count has moved
since the row that last computed it. The printed value is the same.

The key is a monotonic count of accepted and reverted moves rather
than the per-type move totals: a journal restore followed by a
different accepted move can leave those totals where they were while
the area has changed (repair_setup_invalid_phase shows exactly that,
one pin swap reverted and one resize accepted between two rows).

Resizer::design_area_ exists and is incremented by replaceCell, but
buffer insertion does not go through designAreaIncr, which is why
designArea() re-derives it on every call and why this caches the
computed value rather than trusting the tracked one.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Review feedback on the startpoint cache: replacing a register's cell can
delete and recreate its graph vertices, so a cached sta::Vertex* may
dangle. Cache the pin and which of its vertices was the startpoint, and
look the vertex up again per row; a pin that has lost its vertex is
skipped. The cache is also rebuilt on every init(), so a collector that
is re-initialised after netlist changes starts from the graph as it is.
Same values printed; the per-row cost stays proportional to the number
of startpoints, not to the graph.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
* origin/master: (49 commits)
  build(deps): bump idna from 3.11 to 3.15 in /bazel
  build(deps): bump urllib3 from 2.6.3 to 2.7.0 in /bazel
  psm: remove pointless obs bypass
  psm: account for polygon mpins
  build(Build.sh): stamp the git version into Bazel installs
  psm: remove stale markers
  psm: invalidate solvers on fill creation
  update sta
  odb: properly initialize all Terminal member pointers
  rcx,pdn,grt: fix the undefined behavior ubsan reports
  docs: record the tsan sweep findings
  ci(coverity): default a missing capture percentage to 0
  build(deps): bump the npm group across 2 directories with 1 update
  dst: stop and join the io_context thread in TestBalancer
  test: run the sanitizer configs against an instrumented openroad
  odb: rename tmg_conn's terminals and shorts to Terminal and Short
  test(coverity): add script test entrypoint
  ci(coverity): add Bazel capture mode
  docs: note that a full tsan run may need throttling
  test: tag regression tests with their language
  ...

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>

# Conflicts:
#	docs/user/Bazel.md
Signed-off-by: Eder Monteiro <emrmonteiro@precisioninno.com>
psm: expand pin vias into per-layer boxes in the short check
Frame the design rect instead of the tile georeference rect, size tiles
so the fit lands on a whole zoom level, and take Qt's outline colour,
hatch and draw order.

Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>

# Conflicts:
#	src/web/src/tile_generator.cpp
Fix the unreachable loop increment, the by-value custom-UI item, the
copied label anchor, the unpinned umask and the unchecked temp-file removal.

Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
…nt set

Two review findings on the progress-row caching.

The area cache is keyed on MoveCommitter::netlistEdits(), which counts
only edits made through the committer. GlobalSizingPolicy replaces cells
directly in applyPresize() and applyDecisions(), so with a phase list
such as "LEGACY GLOBAL_SIZING WNS" the counter stood still while the
area moved and the later phase printed the pre-sizing area. The cache is
now invalidated in OptimizationPolicy::start(), which every policy
chains to, so each phase recomputes the area on its first row. That is
one walk per phase, and it stays correct for any future phase that edits
outside the committer rather than relying on that phase to bump a
counter.

The startpoint cache rests on the invariant that no setup move creates
or removes a startpoint, which until now was only asserted in a comment.
The graph walk is split out as walkStartpoints() and a debug-gated
checkStartpointCache() re-walks and compares the fresh set against the
cache on every row that uses it. It is gated on the violator_collector
debug flag at level 2 rather than on NDEBUG: a re-walk per row in every
debug build is the cost this series removes. The comment now also names
the guard that keeps gate cloning out of the set, CloneGenerator's
isSingleOutputCombinational() check, and records why a startpoint whose
vertex has disappeared is skipped rather than treated as a stale cache.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
pdn: drop a grid's previous vias from their shapes before regenerating them
rsz: repair_timing up to 88% faster on non-trivial designs by not walking the design for every -verbose progress row
rcx: adds support for 3D-IC extraction
…ernization-opt

Optimize dbBox serialization and deserialization
…I-Coverity-Scan

Web GUI: address Coverity Scan findings
drawDebugOverlay derived its CSS scale as buffer_dim / kTileSizeInPixel,
which only equals the device-pixel ratio while the client's tile is 256
CSS px.  The client picks its own size -- 240 by default, and a fitted
size when zoom-to-fit needs one -- so the 20 px label and 4 px inset came
out scaled by the tile choice instead of by the display.

Pass the effective dpr in from renderTileBuffer, which already has it.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…ity-WebGUI-F02

web: bind the web server to loopback by default
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>

# Conflicts:
#	src/web/src/request_handler.cpp
#	src/web/test/cpp/TestRequestHandler.cpp
…I-outlines

WebGUI: fix zoom-to-fit, blockage drawing, and outlines
The test includes boost/json.hpp, gui/gui.h and gui/heatMap.h but the
target only depended on //src/gui:gui_stub, which does not export those
headers.  This failed the layering_check feature.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Renderer::checkDisplayControl routes through
Gui::checkDisplayControlsVisible, which was only defined in the Qt
build, leaving the no-Qt openroad binary with an undefined symbol at
link time.  Mirror the headless branch of gui.cpp: forward to the
headless viewer, or report visible when no viewer is installed.

Route Gui::setDisplayControlsVisible to the viewer as well so the
getter and setter agree.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…ity-WebGUI-F01

web: reject cross-origin WebSocket handshakes
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Leaflet reads options.keyboardPanDelta once, in Keyboard.initialize, so a
live map's arrow-key distance lives only in the keyboard handler's key map
and has to be pushed there through _setPanDelta.  That was already what
setArrowStep did, but nothing recorded why, and a reviewer reasonably read
the option write as the missing piece -- the reverse of how Leaflet works.

Extract the push as applyArrowStep so it can be tested at all (main.js
imports from a CDN and the test runner cannot load it) and comment the
constraint at the point that depends on it.  The tests model Leaflet
1.9.4's Map.Keyboard.js, rebuilding _panKeys from the argument, so they
assert how far an arrow press pans rather than which function was called:
an option-write-only implementation fails them.

No behavior change.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…ebGUI-menu-toolbar

feat(web): Options menu preferences and full gui::Renderer support
build(docker): install OpenROAD with Bazel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.