Repository navigation
build_openroad: install kepler-formal with a relative RUNPATH - #4727
saikatchatrg wants to merge 1 commit into
Conversation
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>
There was a problem hiding this comment.
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.
🔍 QoR checkMetrics reflect the PR merge build — i.e. what will land on the target branch. Commit 62 design(s) checked — 0 with regression(s), 0 without a comparable baseline. |
|
The two Jenkins When someone has a moment, two things need a maintainer: approving the five GitHub Actions workflows (first-time contributor), and a review of |
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/../libon macOS) instead of the absolute${INSTALL_PATH}/kepler-formal/lib.Why. The absolute RUNPATH ties
bin/kepler-formalto 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'slibnaja_*.so, or none. In #4717 the LEC step stopped the flow in4_1_ctswith a symbol lookup error. The naja libraries already install with$ORIGIN-relative RUNPATHs (since kepler-formalf70c2e3, 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=libalready keeps the libraries inlib/on EL, and the backslash keeps bash from expanding$ORIGIN. macOS has no$ORIGIN, so it gets@loader_path, as naja's ownCMakeLists.txtdoes for Apple.How verified.
$ORIGIN/../lib, everylibnaja_*.soresolves from the install'slib/, and a flow withLEC_CHECK=1passes4_1_cts.libnaja_*.sofrom the original checkout. With its RUNPATH set to$ORIGIN/../lib, all seven load from the copy'slib/and the binary runs.ef324e55;bash -n build_openroad.shpasses.build_openroad.sh --localon master, EL, or macOS.