Skip to content

installer: build ORFS tools on all supported platforms without the OpenROAD CMake set - #4700

Merged
vvbandeira merged 9 commits into
The-OpenROAD-Project:masterfrom
vvbandeira:installer-bazel-default
Oct 19, 2026
Merged

vvbandeira merged 9 commits into
The-OpenROAD-Project:masterfrom
vvbandeira:installer-bazel-default

Conversation

@vvbandeira

@vvbandeira vvbandeira commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

Follow-up to #4687. After etc/DependencyInstaller.sh -all alone, ./build_openroad.sh --local --skip_openroad now builds Yosys and kepler-formal on every supported Linux platform.
OpenROAD's installer installs its CMake set only with -cmake now, and EL relied on that set for EPEL, pip, the compiler and the build tools.

Changes

  • Installer: add -cmake, which asks the OpenROAD installer for its CMake set, for CMake builds of OpenROAD. -bazel stays the default.
  • Installer, macOS: install cmake with brew.
  • Installer, EL8/EL9: install EPEL and the Yosys and kepler-formal build tools, and run the Kitware CMake step.
  • Installer, EL8/EL9: install and select Python 3.12, because kepler-formal and the pip lock files need Python 3.10 or newer.
  • Installer, EL8: install gcc-toolset-13; build Bison 3.8.2 when the system Bison is older than 3.6; build oneTBB 2021.13.0 (static), because EL8 ships TBB 2018 without a CMake package.
  • build_openroad.sh: use -march=armv8-a for kepler-formal on aarch64, because -march=x86-64-v3 fails there.
  • build_openroad.sh: enable gcc-toolset-13 when present (EL8).
  • build_openroad.sh: define TBB_PREVIEW_CONCURRENT_ORDERED_CONTAINERS for kepler-formal, for the TBB 2020 on EL9. oneTBB ignores it.
  • build_openroad.sh: install the kepler-formal libraries in lib. On EL they went to lib64, outside the RPATH, so the binary could not load them.

Validation

Each platform started from a clean container image. The test ran only ./etc/DependencyInstaller.sh -all as root, then ./build_openroad.sh --local --skip_openroad. It then checked that yosys and kepler-formal are installed and that ldd finds all their libraries.

Platform Result
Ubuntu 22.04 amd64 pass
Ubuntu 24.04 amd64 pass
Ubuntu 22.04 arm64 pass (KLayout source build skipped)
Rocky Linux 9 pass
Rocky Linux 8 (for RHEL 8) pass

Not covered: macOS, Debian 11 (the installer has no Debian 11 case), and EL7.

The installer always asks the OpenROAD installer for the Bazel set.
Users who build OpenROAD with CMake (build_openroad.sh --openroad-args
-cmake-build) need the OpenROAD CMake set instead. -cmake passes -cmake
to the OpenROAD installer. -bazel is the default. If both are given,
the last one wins.

On macOS, install cmake with brew. The OpenROAD installer no longer
installs it for a Bazel build, and ORFS builds Yosys and kepler-formal
with CMake.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
build_openroad.sh always compiles kepler-formal with
-march=x86-64-v3, which Arm compilers reject, so the build fails on
aarch64 hosts. Use -march=armv8-a there, the Armv8-A baseline, and keep
x86-64-v3 on other hosts.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
On EL8 and EL9, ORFS relied on the OpenROAD CMake set for EPEL, pip,
the compiler and the Yosys and kepler-formal build tools. The OpenROAD
installer now installs that set only with -cmake, so the EL install
fails: tcl-tclreadline is not found without EPEL, and pip is missing.

Install EPEL and the build tools from the ORFS installer, and run the
Kitware CMake step on EL too. Install Python 3.12 on EL8 and EL9,
because kepler-formal and the pip lock files need Python 3.10 or newer.
On EL8, install gcc-toolset-13 and enable it in build_openroad.sh,
because GCC 8 is too old for kepler-formal. gtest is not installed:
Yosys builds its unit tests only when gtest is found.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
EL8 registers its Python 3.6 as the python3 alternative with a higher
priority, so the install alone leaves python3 at 3.6 and the pip lock
fails. Select Python 3.12 explicitly.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
Yosys needs Bison 3.6 or newer. EL8 ships 3.0.4, which the OpenROAD
CMake set used to replace. When the Bison on PATH is older than 3.6,
build the release that the OpenROAD installer uses, with the same
checksum, in the -common prefix.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
EL9 ships TBB 2020, where concurrent_map.h is a preview feature and
stops the kepler-formal build unless
TBB_PREVIEW_CONCURRENT_ORDERED_CONTAINERS is set. Define it for the
kepler-formal compile. oneTBB ignores the macro.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
kepler-formal finds TBB with its CMake package. EL8 ships TBB 2018,
which has no CMake package and no oneTBB API, so build oneTBB 2021.13.0
on EL8, static because the kepler-formal RPATH does not include the
prefix. Install tbb-devel only on EL9.

Also install findutils, which dev_env.sh uses, and readline-devel on
EL8 for the Yosys readline support.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
On EL, CMake installs libraries in lib64 for a prefix outside /usr,
but the kepler-formal install RPATH points to lib, so the installed
binary cannot find its libnaja libraries. Set CMAKE_INSTALL_LIBDIR to
lib for kepler-formal.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
@vvbandeira
vvbandeira requested a review from a team as a code owner October 19, 2026 07:25
@vvbandeira
vvbandeira requested review from sombraSoft and removed request for a team October 19, 2026 07:25

@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 and dependency installation scripts to support compiling kepler-formal and Yosys on Enterprise Linux 8 (EL8) and EL9, including platform-specific compiler flags, installing newer versions of Python, Bison, and oneTBB, and introducing options to select between Bazel and CMake dependencies. The review feedback suggests ensuring that the newly installed CMake binary is in the PATH when building oneTBB with a custom prefix, and using the absolute path /usr/bin/python3.12 instead of command -v for robustness when configuring update-alternatives.

Comment thread etc/DependencyInstaller.sh
Comment thread etc/DependencyInstaller.sh
@openroad-ci

openroad-ci commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

🔍 QoR check

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

Commit 9dccb67 · Jenkins build #2 · Baseline: build · View build on dashboard

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

_installCmake can install CMake in a prefix that is not on PATH, for
example with -prefix or -local. The oneTBB build then fails with
"cmake: command not found" when the system has no CMake. Put the
prefix bin directory first on PATH for the oneTBB build.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
@vvbandeira
vvbandeira merged commit 3692473 into The-OpenROAD-Project:master Oct 19, 2026
12 checks passed
@vvbandeira
vvbandeira deleted the installer-bazel-default branch October 19, 2026 15:40
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.

2 participants