Skip to content

build_openroad: install kepler-formal with a relative RUNPATH - #4727

Open
saikatchatrg wants to merge 1 commit into
The-OpenROAD-Project:masterfrom
saikatchatrg:kepler-formal-rpath
Open

saikatchatrg wants to merge 1 commit into
The-OpenROAD-Project:masterfrom
saikatchatrg:kepler-formal-rpath

Conversation

@saikatchatrg

Copy link
Copy Markdown

Fixes #4717.

This fixes the build-script path that 26Q3, 26Q4 and the Docker images use today. If kepler-formal moves to a Bazel build, as suggested in #4717, this block goes away with the rest of the script's kepler-formal section.

What. kepler-formal's install RPATH becomes $ORIGIN/../lib (@loader_path/../lib on macOS) instead of the absolute ${INSTALL_PATH}/kepler-formal/lib.

Why. The absolute RUNPATH ties bin/kepler-formal to the directory it was built in. After the checkout moves, or when that path later points at another ORFS checkout, the binary loads that build's libnaja_*.so, or none. In #4717 the LEC step stopped the flow in 4_1_cts with a symbol lookup error. The naja libraries already install with $ORIGIN-relative RUNPATHs (since kepler-formal f70c2e3, master's pin), so the binary is the last absolute path. For an install that never moves, the new RUNPATH resolves to the same directory as before. CMAKE_INSTALL_LIBDIR=lib already keeps the libraries in lib/ on EL, and the backslash keeps bash from expanding $ORIGIN. macOS has no $ORIGIN, so it gets @loader_path, as naja's own CMakeLists.txt does for Apple.

How verified.

  • 26Q3, kepler-formal rebuilt with only this RPATH change (Ubuntu, x86-64): the binary's RUNPATH is $ORIGIN/../lib, every libnaja_*.so resolves from the install's lib/, and a flow with LEC_CHECK=1 passes 4_1_cts.
  • 26Q4 install copied to another directory: unchanged, the binary loads all seven libnaja_*.so from the original checkout. With its RUNPATH set to $ORIGIN/../lib, all seven load from the copy's lib/ and the binary runs.
  • Made on master ef324e55; bash -n build_openroad.sh passes.
  • Not tested: a full build_openroad.sh --local on master, EL, or macOS.

The absolute RUNPATH tied bin/kepler-formal to the directory it was
built in, so a moved or re-pointed checkout loaded another build's
libnaja_*.so. Use $ORIGIN/../lib, and @loader_path/../lib on macOS.

Fixes The-OpenROAD-Project#4717.

Signed-off-by: Skot <48910715+saikatchatrg@users.noreply.github.com>
@saikatchatrg
saikatchatrg requested a review from a team as a code owner October 24, 2026 10:56
@saikatchatrg
saikatchatrg requested review from sombraSoft and removed request for a team October 24, 2026 10:56

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the build_openroad.sh script to use relative RPATHs for the kepler-formal tool, allowing moved installations to correctly load their own libraries. It sets the RPATH to @loader_path/../lib on macOS and $ORIGIN/../lib on other platforms. There are no review comments, so no additional feedback is provided.

@openroad-ci

Copy link
Copy Markdown
Member

🔍 QoR check

Metrics reflect the PR merge build — i.e. what will land on the target branch.

Commit 2bdabbe · Jenkins build #1 · Baseline: build · View build on dashboard

62 design(s) checked — 0 with regression(s), 0 without a comparable baseline.

@saikatchatrg

Copy link
Copy Markdown
Author

The two Jenkins CI-Public jobs fail after the flows, not in them: every design flow passed, the QoR check reports 62 designs with no regression, and both jobs end in the post-report metadata-upload step ("process apparently never started", exit -2). That step fails the same way on other recent PRs (#4723, #4725, #4730–#4732), so a re-run would wait on it being fixed.

When someone has a moment, two things need a maintainer: approving the five GitHub Actions workflows (first-time contributor), and a review of build_openroad.sh from openroad-devops. @vvbandeira, since you extended this path in #4700, could you take a look?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

build_openroad.sh: kepler-formal is installed with an absolute RUNPATH, so a moved or re-pointed install loads another build's libraries

2 participants