Skip to content

sync#2

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

sync#2
nanocoh wants to merge 2035 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]

Naveen Venkat and others added 29 commits July 10, 2026 14:57
Signed-off-by: Naveen Venkat <archgen.guest@nyayanidhi.in>
The tst Fixture unconditionally created a dbSta instance, so every test
that used it linked OpenSTA + dbSta even when it only manipulated an odb
database (e.g. the odb helper-based tests). OpenSTA/dbSta debug symbols
dominate those binaries (~160 MB each).

Split Fixture into a base tst::DbFixture (tst/db_fixture.h, odb-only: db
manipulation, LEF tech loading, file lookup) and a derived tst::Fixture
(tst/fixture.h) that adds the dbSta/OpenSTA instance, readLiberty, and
the LEF library loaders that notify STA. The base lives in a new tst_base
library (//src/tst:db_fixture in Bazel) that does not link STA.

odb DB-only tests and SimpleDbFixture now derive from DbFixture and link
tst_base; STA consumers (PDK fixtures, IntegratedFixture, rsz/dbSta/est
tests) are unchanged. Mirrored in Bazel.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…d-fields

rcx: rm ununsed fields in dbCreateNetUtil
Signed-off-by: Naveen Venkat <archgen.guest@nyayanidhi.in>
LEF power and ground pins may legally use INPUT direction. Exclude supply MTerms when identifying a buffer signal input and output so those cells remain usable for repair operations.

Signed-off-by: Naveen Venkat <archgen.guest@nyayanidhi.in>
NesterovBase::getDensityGradient re-fetched three loop-invariant values on
every inner bin iteration: getBinCntX() (two non-inlined .cpp calls),
bg_.getBinsConst(), and gCell->getDensityScale(). Hoist them to locals before
the loop and index a raw const Bin* base pointer.

Arithmetic-neutral: identical loop nesting, operands, and accumulation order,
so placement output is bit-identical. Verified the three values are not mutated
inside the loop (binCntX_ member, bins_ not realloced, densityScale_ on the
const gCell param).

medium03 global_placement (DEF read excluded), 3 runs each on a shared
36-core host, -j8 Release:
  before median 199910 ms, after median 185648 ms (~7.1%, within run noise).
QoR bit-identical: iter 486, overflow 0.0994, HPWL 1.162648e+06 unchanged.
gpl ctest suite 65/65 green (log-compare enforces identical output).




Signed-off-by: Saurav Singh <saurav.singh@fermions.co>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Debug info dominates the size of these binaries (template-heavy C++;
TestAccessPoint was ~97% DWARF). Enable -gz=zlib for GNU/Clang in the
Debug and RelWithDebInfo configs, at both compile and link, to compress
the .debug_* sections.

This is transparent to gdb/lldb/readelf/addr2line and a no-op for builds
without -g (e.g. Release). TestAccessPoint drops 330 MB -> 89 MB (-73%).

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
The default bazel build is -c opt with no -g, so it carries no debug
info. The asan and profile configs add -g (and keep symbols via
--strip=never), so their binaries carry DWARF that benefits from
compression, mirroring the CMake -gz change.

Add -gz=zlib (compile + link) to the asan and profile configs. It is
transparent to gdb/perf/addr2line.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
The tst_base fixture library links GTest::gtest, but that imported
target only exists when find_package(GTest) runs, which is guarded by
ENABLE_TESTS. add_subdirectory(tst) was unconditional, so a -no-tests
build failed at generate time with 'Target tst_base links to
GTest::gtest but the target was not found'.

Guard add_subdirectory(tst) with ENABLE_TESTS. This is safe because
every consumer of tst/tst_base/tst_integrated_fixture lives in a
test/cpp directory that is itself gated by ENABLE_TESTS.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…minimal-deps

Trim odb test binary bloat: minimal deps, fixture split, debug compression
GlobalRouter::removeNet only erased the net from dirty_nets_ in the
FastRoute (non-CUGR) branch. When use_cugr_ is true, a net destroyed
during incremental routing stayed in dirty_nets_, so updateDirtyRoutes
later passed the dangling dbNet to CUGR::updateNet, which dereferenced
it via Design::updateNet (db_net->getSigType()).

In release builds (NDEBUG) this use-after-free is silent, so
grt.incremental_deleted_net.tcl passed. With assertions enabled
(coverage / RELEASEWITHASSERTS builds) the stale sig type tripped
dbSigType::isSupply()'s assert(false) and aborted.

Move the dirty_nets_.erase to run for both routers.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…dirty-net-destroy

grt: erase destroyed net from dirty set in CUGR path
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
SteinerTreeBuilder stored a dbDatabase* that was never used. Remove the
constructor parameter and the db_ member, and update the callers
(OpenRoad::init and the gpl mbff unit test) to match.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
The dependabot bump to v3.1.0 (30efff6) regressed contributor
detection. v3 OR-combines isFirstIssue and isFirstPullRequest on every
event, and the PR check dropped author filtering. As a result, any
contributor who has opened PRs but no plain issue in the repo is greeted
as a first-time PR author (upstream actions/first-interaction#369).

v1.3.0 branches on event type and matches PRs by author, so it does not
misfire. Pin back to v1.3.0 and restore its kebab-case input names.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…unused-db-param

stt: drop unused dbDatabase* from SteinerTreeBuilder
…bCallBack-network_

rsz: rm unused OdbCallBack::network_
…rst-interaction-v1

ci: revert first-interaction to v1.3.0 (fix false first-PR greetings)
gpl: hoist loop-invariant accessors in getDensityGradient (bit-identical)
…ings

Enable the external_include_paths toolchain feature so include paths into
external/ (bzlmod/BCR deps) are passed as -isystem instead of -I. Clang
suppresses diagnostics from system headers, so this silences warnings from
ALL third-party headers pulled into our TUs via template instantiation
(boost, Eigen, googletest, ...) at the source -- no per-warning, per-dep
-Wno list to maintain. The existing '.*external/.*@-w' per_file_copt only
covers compiling external *source* files, not their headers included by ours.

The feature is global (target and exec config) and also demotes a from-source
dep's own -iquote entries to -isystem. Two deps need adjusting so their own
quoted includes keep precedence over glibc/system headers:

- git (built as an exec tool for the lint tests): builtin/get-tar-commit-id.c
  includes git's own tar.h (struct ustar_header, TYPEFLAG_GLOBAL_HEADER),
  which must shadow glibc's <tar.h>. Patch GIT_COPTS to re-add the repo root
  as -iquote. Same class of fix as the existing bison/sed/gawk/m4 overrides.

- qt-bazel: external_include_paths moves Qt's include dirs into
  compilation_context.external_includes, which the moc rule did not gather.
  Bump to 541ebf6d, which teaches moc to also collect external_includes.

A full 'bazel build //...' passes; no other from-source dep (abc, yosys,
or-tools, ...) needed changes.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…IpChecker-sta_

dbsta: rm unused IpChecker::sta_
…ernal-include-paths

bazel: pass external headers as -isystem to silence third-party warnings
This test is listed in src/dpl/test/CMakeLists.txt but was missing from
the Bazel BUILD file, so it only ran under CMake. Add it to
COMPULSORY_TESTS to restore CMake/Bazel parity.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…-multi-height-power-align

dpl: register multi_height_power_align regression test in Bazel
eder-matheus and others added 30 commits July 20, 2026 20:45
…ectangular-regions

Gpl: add support for non-rectangular regions
…d Abseil

Two fixes for installer breakage first reported after the Yosys v0.67 bump:

1. Yosys v0.67 dropped its Makefile in favor of CMake, so _install_yosys
   failed with "make: *** No targets specified and no makefile found".
   Detect a missing Makefile and build with CMake instead, mirroring the
   flags ORFS uses (Release + install prefix). The make path is kept for
   older versions.

2. Prebuilt or-tools links its own bundled (shared) Abseil. _install_abseil
   preferred an Abseil copy in the install prefix over the or-tools bundle,
   so machines with a leftover /usr/local Abseil from earlier installer runs
   built OpenROAD against two Abseil copies and crashed at startup with:

     ERROR: Inconsistency between flag object and registration for flag
     'flagfile', likely due to duplicate flags or an ODR violation.

   Prefer the or-tools bundled Abseil when it exists, purge stale Abseil
   artifacts from the prefix before installing a new copy, and warn when a
   stale prefix copy shadows the or-tools bundle or when the pinned
   ABSL_VERSION diverges from the bundled one.

Signed-off-by: Joao Luis Sombrio <sombrio@sombrasoft.dev>
Resolve upf_aes .ok/.defok golden conflicts by regenerating against the
merged binary (buffering-boost rsz + master DPL/GPL negotiation changes).

Signed-off-by: Minju Kim <mkim@precisioninno.com>
…sue1737-hold-buffer-count-fix

rsz: fix hold-buffer count reset on repair_timing -hold rollback
Review feedback: operator at end of line is less fragile than
backslash continuation with a multi-line conditional.

Signed-off-by: Joao Luis Sombrio <sombrio@sombrasoft.dev>
…to rsz-buffering-boost

rsz sources auto-merged. Regenerate aes_sky130hd / jpeg_sky130hd metric +
limit goldens against the merged binary (buffering-boost + #10835): e.g. aes
RSZ::hold_buffer_count settles at 330 (neither the pre-fix 19 nor master 343).

Signed-off-by: Minju Kim <mkim@precisioninno.com>
rsz: Avoid SIGILL in net tree stitching if subtree can't build
…z-buffering-boost

rsz: Merge rsz-buffering-boost for Rebuffer QoR gain
Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Address review: the double negative ("disable" in the command name plus -disable/-enable flags) was confusing. Rename to `set_routing_auto_taper` and require exactly one of -enable/-disable (no default), so it reads as a direct on/off switch. Behavior and the odb flag (`disable_auto_taper`) are unchanged.

Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…essed`

Address review from @mole99: the 'NDR net whose auto-taper is suppressed' predicate
was duplicated inline in three places (FlexPA_unique once, FlexPA_acc_point
twice). Extract it into `frNet::isAutoTaperSuppressed(bool auto_taper_enabled)`
and reuse it. Behavior-preserving.

Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…gument checks

Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
…ble` flag

Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
set_routing_auto_taper was defined in OpenRoad.tcl but documented in
src/odb/README.md, so odb_man_tcl_check saw README count (22) != help
count (21).  Move the sta::define_cmd_args/proc into odb.tcl and renumber
its errors ORD 1016-1018 -> ODB 1023-1025 to match the odb namespace.

Also refresh the stale goldens: bump odb_readme_msgs_check.ok to 24 for
the added README section, and regenerate ndr_no_auto_taper.defok after
the QoR shift from rebasing onto master.

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Address review: isAutoTaperDisabled and isAutoTaperSuppressed were too
similar and negative. The frNet per-net flag is now positive
(auto_taper_enabled_, default true) with setAutoTaperEnabled(), and the
effective query is autoTaperEnabled(bool global_enabled), matching the
existing drNet::autoTaperEnabled (which now delegates to it). Call sites
state the NDR condition explicitly. Behavior unchanged.

Signed-off-by: Simon Dorrer <simon.dorrer@jku.at>

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
drt: allow NDR auto-taper to be disabled per net
The FastRouteRenderer.h is reachable via
src/fastroute/include/FastRouteRenderer.h, but no include
path was given, so it worked by accident.
Make that explicit.

Signed-off-by: Henner Zeller <h.zeller@acm.org>
…dency-installer-yosys-absl

etc: fix DependencyInstaller for CMake-only Yosys and or-tools bundled Abseil
Relevant release notes:
https://github.com/hzeller/bant/releases/tag/v0.3.1

Useful new feature: select a column of the tabular outputs
right with bant without extra use of awk.

Signed-off-by: Henner Zeller <h.zeller@acm.org>
FastRouteRenderer.h is declared by //src/grt:ui, use correct prefix.
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
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.