From 1db292a8e2c4e5f93f013afe0489ef59925ee1c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Fri, 6 Nov 2026 10:04:21 +0100 Subject: [PATCH] installer: no KLayout application MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The flow writes its GDS file and runs its DRC and LVS decks with KLayout's Python module, from the installer's Python packages, so the installer no longer installs the KLayout application. Deleted: - etc/DependencyInstaller.sh: klayoutVersion, and the KLayout install for each OS: the CentOS 7, CentOS 8 and Rocky Linux 9 RPMs with their version check and reinstall, the Ubuntu .deb with its md5 table per release and the "Unsupported Ubuntu version" exit, the build from source on Ubuntu aarch64 with its Qt, Ruby and libgit2 build dependencies, `klayout` from apt on rodete and the Homebrew cask on macOS. - env.sh: the KLayout.app PATH entry on macOS. - flow/scripts/variables.mk: the lookup of a KLayout built into tools/install/klayout, which nothing installs. KLAYOUT_CMD is the klayout on PATH unless set, and is exported bare. - docs/user/BuildWithPrebuilt.md: the KLayout version note and the LD_LIBRARY_PATH line for a KLayout built from source. A deprecated Ruby DRC/LVS deck, the gallery and the viewers still need the KLayout application, installed by those who use them. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018PFLaCzFtFbnWE4nPTDwpC Signed-off-by: Øyvind Harboe --- docs/user/BuildWithPrebuilt.md | 14 ++--- env.sh | 1 - etc/DependencyInstaller.sh | 109 ++------------------------------- flow/scripts/variables.mk | 13 +--- 4 files changed, 12 insertions(+), 125 deletions(-) diff --git a/docs/user/BuildWithPrebuilt.md b/docs/user/BuildWithPrebuilt.md index 254ee927ce..c21c0c0999 100644 --- a/docs/user/BuildWithPrebuilt.md +++ b/docs/user/BuildWithPrebuilt.md @@ -1,10 +1,13 @@ # Using Pre-built Binaries -## Install Klayout and Yosys -Please ensure the Klayout version (denoted with `klayoutVersion` variable) is consistent with the one used in [DependencyInstaller script](https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/blob/master/etc/DependencyInstaller.sh). +## Install KLayout and Yosys +The GDS file, DRC and LVS use KLayout's Python module, installed with the +other Python packages from `etc/requirements-common_lock.txt`, or alone +with `pip install klayout`. The KLayout application is needed only for a +deprecated Ruby DRC/LVS deck (see [KLayoutPythonDecks.md](KLayoutPythonDecks.md)), +the gallery and the viewers: +[KLayout](https://www.klayout.de/build.html). -Instructions for installing: -- [Klayout>=0.28.8](https://www.klayout.de/build.html) - [Yosys>=0.58](https://github.com/YosysHQ/oss-cad-suite-build/blob/master/README.md#installation) ## Install OpenROAD @@ -44,9 +47,6 @@ Export path variables accordingly. export OPENROAD_EXE=$(command -v openroad) export YOSYS_EXE=$(command -v yosys) -# only if KLayout is built from source -export LD_LIBRARY_PATH="/bin:$PATH" - yosys -help yosys -m slang -p "slang_version" openroad -help diff --git a/env.sh b/env.sh index e4194c306f..a1a99fdd34 100755 --- a/env.sh +++ b/env.sh @@ -16,7 +16,6 @@ function __setpaths() { export PATH=${DIR}/tools/install/kepler-formal/bin:$PATH if [[ "$OSTYPE" == "darwin"* ]]; then - export PATH="/Applications/KLayout/klayout.app/Contents/MacOS:$PATH" export PATH="$(brew --prefix bison)/bin:$(brew --prefix flex)/bin:$(brew --prefix tcl-tk@8)/bin:$PATH" export QT_QPA_PLATFORM=cocoa fi diff --git a/etc/DependencyInstaller.sh b/etc/DependencyInstaller.sh index d98925a0a3..553d555698 100755 --- a/etc/DependencyInstaller.sh +++ b/etc/DependencyInstaller.sh @@ -12,8 +12,6 @@ fi # Make sure we are on the correct folder before beginning cd "${_script_dir}/../" -# package versions -klayoutVersion=0.30.12 if [[ "$OSTYPE" == "darwin"* ]]; then numThreads=$(sysctl -n hw.logicalcpu) else @@ -203,19 +201,6 @@ _install_EL7_Packages() { ruby-devel \ tcl-tclreadline \ tcl-tclreadline-devel - - if ! [ -x "$(command -v klayout)" ]; then - yum -y install https://www.klayout.org/downloads/CentOS_7/klayout-${klayoutVersion}-0.x86_64.rpm - else - currentVersion=$(klayout -v | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') - if _versionCompare $currentVersion -ge $klayoutVersion; then - echo "KLayout version greater than or equal to ${klayoutVersion}" - else - echo "KLayout version less than ${klayoutVersion}" - sudo yum remove -y klayout - yum -y install https://www.klayout.org/downloads/CentOS_7/klayout-${klayoutVersion}-0.x86_64.rpm - fi - fi } @@ -226,7 +211,7 @@ _install_EL8_EL9_CleanUp() { # Enterprise Linux 8/9 package installation (EL8/EL9 = RHEL, Rocky Linux, AlmaLinux, or CentOS 8 as no CentOS 9 exists) _install_EL8_EL9_Packages() { - # Re-detect EL version for appropriate KLayout package + # Re-detect EL version if [[ -f /etc/os-release ]]; then elVersion=$(awk -F= '/^VERSION_ID/{print $2}' /etc/os-release | sed 's/"//g' | cut -d. -f1) else @@ -286,42 +271,6 @@ _install_EL8_EL9_Packages() { dnf -y install \ https://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/readline-devel-8.1-4.el9.x86_64.rpm fi - - # Install KLayout based on EL version, note the different URLs - case "${elVersion}" in - "8") - if ! [ -x "$(command -v klayout)" ]; then - dnf -y install https://www.klayout.org/downloads/CentOS_8/klayout-${klayoutVersion}-0.x86_64.rpm - else - currentVersion=$(klayout -v | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') - if _versionCompare "$currentVersion" -ge $klayoutVersion; then - echo "KLayout version greater than or equal to ${klayoutVersion}" - else - echo "KLayout version less than ${klayoutVersion}" - sudo dnf remove -y klayout - dnf -y install https://www.klayout.org/downloads/CentOS_8/klayout-${klayoutVersion}-0.x86_64.rpm - fi - fi - ;; - "9") - if ! [ -x "$(command -v klayout)" ]; then - dnf -y install https://www.klayout.org/downloads/RockyLinux_9/klayout-${klayoutVersion}-0.x86_64.rpm - else - currentVersion=$(klayout -v | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+') - if _versionCompare "$currentVersion" -ge $klayoutVersion; then - echo "KLayout version greater than or equal to ${klayoutVersion}" - else - echo "KLayout version less than ${klayoutVersion}" - sudo dnf remove -y klayout - dnf -y install https://www.klayout.org/downloads/RockyLinux_9/klayout-${klayoutVersion}-0.x86_64.rpm - fi - fi - ;; - *) - echo "ERROR: Unsupported Enterprise Linux version: ${elVersion}" - exit 1 - ;; - esac } _installUbuntuCleanUp() { @@ -329,19 +278,6 @@ _installUbuntuCleanUp() { apt-get autoremove -y } -_installKlayoutDependenciesUbuntuAarch64() { - echo "Installing Klayout dependencies" - export DEBIAN_FRONTEND=noninteractive - apt-get -y update - apt-get -y install build-essential \ - qtbase5-dev qttools5-dev libqt5xmlpatterns5-dev qtmultimedia5-dev libqt5multimediawidgets5 libqt5svg5-dev \ - ruby ruby-dev \ - python3 python3-dev \ - libz-dev\ - libgit2-dev - echo "All dependencies installed successfully" -} - _installUbuntuPackages() { export DEBIAN_FRONTEND="noninteractive" apt-get -y update @@ -399,44 +335,8 @@ _installUbuntuPackages() { fi apt-get install -y --no-install-recommends ${packages[@]} - # install KLayout - if [[ $1 == "rodete" ]]; then - apt-get -y install --no-install-recommends klayout python3-pandas - else - arch=$(uname -m) - lastDir="$(pwd)" - # temp dir to download and compile - baseDir=/tmp/installers - klayoutPrefix=${PREFIX:-"/usr/local"} - mkdir -p "${baseDir}" - cd "${baseDir}" - if [[ $arch == "aarch64" ]]; then - if [ ! -f ${klayoutPrefix}/klayout ]; then - _installKlayoutDependenciesUbuntuAarch64 - echo "Installing KLayout for aarch64 architecture" - git clone --depth=1 -b "v${klayoutVersion}" https://github.com/KLayout/klayout.git - cd klayout - ./build.sh -bin "${klayoutPrefix}" -option -j "${numThreads}" - else - echo "Klayout is already installed" - fi - else - if [[ $1 == 22.04 ]]; then - klayoutChecksum=6dfffa50f385881768dee30bdc759608 - elif [[ $1 == 24.04 ]]; then - klayoutChecksum=0181713e60891e461d6d1664c1b8e213 - elif [[ $1 == 26.04 ]]; then - klayoutChecksum=904f60fd05c3a5029cab8a2840029f49 - else - echo "Unsupported Ubuntu version $1. KLayout ${klayoutVersion} packages are pinned for 22.04, 24.04, and 26.04. Please upgrade to a supported LTS release or install KLayout ${klayoutVersion} manually from https://www.klayout.org/build.html" - exit 1 - fi - wget https://www.klayout.org/downloads/Ubuntu-${1%.*}/klayout_${klayoutVersion}-1_amd64.deb - md5sum -c <(echo "${klayoutChecksum} klayout_${klayoutVersion}-1_amd64.deb") || exit 1 - dpkg -i klayout_${klayoutVersion}-1_amd64.deb - fi - cd "${lastDir}" - rm -rf "${baseDir}" + if [[ $1 == "rodete" ]]; then + apt-get -y install --no-install-recommends python3-pandas fi if command -v docker &> /dev/null; then @@ -473,7 +373,6 @@ _installDarwinPackages() { brew install libffi tcl-tk ruby brew install python libomp doxygen capnp tbb bison flex boost spdlog zlib cmake brew link --force libomp - brew install --cask klayout brew install docker docker-buildx } @@ -676,7 +575,7 @@ case "${os}" in # First install OpenROAD base _installORDependencies - # Determine between EL7 vs EL8/9, since yum vs dnf should be used, and different Klayout builds exist + # Determine between EL7 vs EL8/9, since yum vs dnf should be used case "${elVersion}" in "7") # EL7 = RHEL 7 or CentOS 7 diff --git a/flow/scripts/variables.mk b/flow/scripts/variables.mk index fd48cba625..4fa14d39a6 100644 --- a/flow/scripts/variables.mk +++ b/flow/scripts/variables.mk @@ -132,22 +132,11 @@ export YOSYS_EXE ?= $(abspath $(FLOW_HOME)/../tools/install/yosys/bin/yosys) YOSYS_IS_VALID := $(if $(YOSYS_EXE),$(shell test -x $(YOSYS_EXE) && echo "true"),) -# Use locally installed and built klayout if it exists, otherwise use klayout in path -KLAYOUT_DIR = $(abspath $(FLOW_HOME)/../tools/install/klayout/) -KLAYOUT_BIN_FROM_DIR = $(KLAYOUT_DIR)/klayout - KEPLER_FORMAL_EXE ?= $(abspath $(FLOW_HOME)/../tools/install/kepler-formal/bin/kepler-formal) export KEPLER_FORMAL_EXE -ifeq ($(wildcard $(KLAYOUT_BIN_FROM_DIR)), $(KLAYOUT_BIN_FROM_DIR)) -KLAYOUT_CMD ?= sh -c 'LD_LIBRARY_PATH=$(dir $(KLAYOUT_BIN_FROM_DIR)) $$0 "$$@"' $(KLAYOUT_BIN_FROM_DIR) -else -ifeq ($(KLAYOUT_CMD),) KLAYOUT_CMD ?= $(shell command -v klayout) -endif -endif - -export KLAYOUT_CMD := $(KLAYOUT_CMD) +export KLAYOUT_CMD #------------------------------------------------------------------------------- WRAPPED_LEFS = $(foreach lef,$(notdir $(WRAP_LEFS)),$(OBJECTS_DIR)/lef/$(lef:.lef=_mod.lef))