Ubuntu23.10下用gcc-13构建rocket-tools的兼容问题求助
解决rocket-chip v1.6与rocket-tools的版本兼容及编译矛盾问题
核心矛盾梳理
问题本质是rocket-chip v1.6的编译器版本要求和rocket-tools指定版本的编译兼容性不匹配:
- rocket-chip v1.6需要gcc-11以上版本,但用gcc-13构建rocket-tools 2023.05.02时会触发fsf-binutils-gdb的悬空指针错误;
- 用gcc-11能构建成功rocket-tools,但rocket-chip又因编译器版本过低报错;
- 最新rocket-tools分支则存在riscv-pk的汇编指令兼容性问题。
具体解决方法
1. 匹配rocket-chip v1.6对应的rocket-tools兼容版本
rocket-chip v1.6发布于2022年,对应的rocket-tools推荐使用2022.06.02标签,该版本和gcc-11/gcc-12兼容性更好,同时满足rocket-chip的编译器版本要求:
git clone https://github.com/chipsalliance/rocket-tools.git cd rocket-tools git checkout 2022.06.02 git submodule update --init --recursive
2. 用gcc-12构建rocket-tools(兼顾两边需求)
Ubuntu 23.10自带gcc-12,这个版本既不会触发fsf-binutils-gdb的悬空指针错误,又能满足rocket-chip v1.6对编译器版本的最低要求:
- 安装gcc-12:
sudo apt install gcc-12 g++-12 - 指定gcc-12构建rocket-tools:
cd rocket-tools export CC=gcc-12 export CXX=g++-12 ./build.sh
3. 修复最新rocket-tools分支的riscv-pk汇编错误
如果一定要使用最新rocket-tools分支,需要手动修正riscv-pk的汇编语法:
- 进入riscv-pk目录:
cd rocket-tools/riscv-pk - 打开报错的汇编文件(通常是
machine/entry.S),将其中的csrrw a0, mstatus, a0替换为兼容最新gcc的指令:# 替换前 csrrw a0, mstatus, a0 # 替换后 csrrw a0, mstatus, x0 - 重新执行构建:
cd .. ./build.sh
4. 容器化环境彻底规避版本冲突
最省心的方式是使用官方容器镜像,直接跳过本地环境的版本适配:
# 拉取对应版本镜像 docker pull chipsalliance/rocket-chip:v1.6 # 进入容器开发环境 docker run -it --rm chipsalliance/rocket-chip:v1.6
内容的提问来源于stack exchange,提问作者Ali Abbasi
相关产品推荐
相关产品推荐

