2. 环境搭建:从零开始安装 OpenROAD
说实话,环境搭建往往是整个学习过程中最劝退的一步。我见过不少同事,兴致勃勃想学 OpenROAD,结果卡在安装上折腾了两天,最后放弃了。其实没那么可怕,今天我就带你走一遍,把坑都提前填上。
2.1 两种安装方式:Docker vs 源码编译
OpenROAD 官方提供了两种主流安装方式。我个人建议:新手无脑选 Docker,省心。如果你需要定制化修改源码,或者在公司内网环境里跑,那就老老实实源码编译。
| 对比项 | Docker 方式 | 源码编译 |
|---|---|---|
| 安装难度 | 极低,一行命令搞定 | 中等,依赖较多 |
| 环境隔离 | 完全隔离,不影响宿主机 | 直接安装在系统里 |
| 定制灵活性 | 低,只能使用预编译版本 | 高,可以改源码、加补丁 |
| 版本切换 | 拉取不同 tag 即可 | 需要重新编译 |
| 磁盘占用 | 约 2-3 GB(含基础镜像) | 约 5-8 GB(含编译中间文件) |
2.2 Docker 方式安装(推荐)
前提是你已经装好了 Docker。没装的先去 docker.com 下载安装,Linux 用户用包管理器装就行。
2.2.1 拉取镜像
# 拉取最新稳定版
docker pull openroad/openroad:latest
# 或者指定版本(更推荐,避免意外更新)
docker pull openroad/openroad:2024-04-17
嗯,这里要注意:镜像比较大,大概 1.5 GB,网速慢的话可以先去喝杯咖啡。
2.2.2 运行容器
# 交互式运行
docker run -it --rm \
-v $(pwd):/work \
-w /work \
openroad/openroad:latest
# 进入容器后,直接敲 openroad 就能启动
openroad
-v $(pwd):/work 这行很关键。它把当前目录挂载到容器里的 /work,这样你在容器里生成的文件,在宿主机上也能看到。我曾经见过有人没挂载目录,在容器里跑了一整天,结果退出容器后所有文件都丢了……那叫一个惨。
/work 目录里。
2.3 源码编译安装
如果你需要定制化,或者公司环境不允许用 Docker,那就走源码编译。说实话,这条路稍微坎坷一点,但走通了之后,你对 OpenROAD 的理解会更深。
2.3.1 安装依赖
不同系统依赖略有差异,这里以 Ubuntu 20.04/22.04 为例:
# 基础编译工具
sudo apt-get update
sudo apt-get install -y \
build-essential \
cmake \
git \
tcl-dev \
tk-dev \
bison \
flex \
swig \
libreadline-dev \
libffi-dev \
libboost-all-dev \
libeigen3-dev \
libspdlog-dev \
python3-dev \
python3-pip
# 安装 ORFS 需要的 Python 包
pip3 install \
pyyaml \
click \
pandas \
matplotlib
这里有个坑:libboost-all-dev 比较大,大概 200 MB,但它是必须的。我刚开始编译时没装全,结果编译到一半报错,查了半天才发现是缺了某个 Boost 子模块。
2.3.2 克隆并编译
# 克隆仓库
git clone --recursive https://github.com/The-OpenROAD-Project/OpenROAD.git
cd OpenROAD
# 创建编译目录
mkdir build
cd build
# 配置
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release
# 编译(-j 后面的数字是你的 CPU 核心数)
make -j$(nproc)
# 安装
sudo make install
编译时间取决于你的机器配置。我自己的笔记本(8 核 i7)大概需要 15-20 分钟。如果你用的是服务器,可能 5 分钟就搞定了。
--recursive 参数克隆子模块!OpenROAD 依赖了很多第三方库(如 OpenDB、STA 等),如果不递归克隆,编译时会报找不到头文件的错误。
2.4 验证安装是否成功
装完了,怎么知道好不好使?我一般跑三个检查:
2.4.1 检查版本号
# 查看版本信息
openroad -version
# 正常输出类似:
# OpenROAD 2.0-1234abc
# Git commit: 1234abc
# Compiler: GCC 9.4.0
2.4.2 运行内置测试
# 启动 OpenROAD 交互模式
openroad
# 在 OpenROAD 提示符下输入:
openroad> read_liberty /path/to/some/lib
openroad> exit
如果没有报错,说明基本功能正常。
2.4.3 跑一个最小化流程
这是最实在的验证方式。我准备了一个极简的 Tcl 脚本:
# test_flow.tcl
# 创建一个空的芯片设计
initialize_floorplan \
-die_area "0 0 100 100" \
-core_area "10 10 90 90" \
-site "FreePDK45_38x28_10R_NP_162NW_34O"
# 检查是否成功
if {[llength [get_cells]] >= 0} {
puts "✅ OpenROAD 安装成功!"
} else {
puts "❌ 安装有问题,请检查"
}
exit
# 运行脚本
openroad -exit test_flow.tcl
如果看到绿色的成功提示,恭喜你,环境搭建完成了!
~/openroad_verify 目录下,每次装完新版本都跑一遍。这样能快速发现回归问题。
2.5 环境搭建知识体系
下面这张图帮你理清整个安装决策流程:
2.6 常见问题与解决
安装过程中难免遇到问题。我把最常见的几个列出来:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
docker: command not found |
Docker 未安装或未加入 PATH | 安装 Docker 或将用户加入 docker 组 |
permission denied |
当前用户不在 docker 组 | sudo usermod -aG docker $USER 然后重新登录 |
编译时报 fatal error: ... no such file |
子模块未递归克隆 | git submodule update --init --recursive |
libtcl.so: cannot open shared object file |
Tcl 库路径未设置 | export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH |
| Docker 容器内无法联网 | 代理或防火墙限制 | 添加 --network host 参数运行容器 |
docker save 给你。