Skip to content

Commit 0207de5

Browse files
committed
docs: 添加 RISC-V GNU 编译器工具链
1 parent 8b72a3b commit 0207de5

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

docs/tips/riscv-gnu-toolchain.md

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
---
2+
title: RISC-V GNU 编译器工具链
3+
author: Lee
4+
---
5+
6+
## 前置条件
7+
8+
本文章使用预编译版本,想自行编译请参考官方文档。
9+
10+
## 安装篇
11+
12+
- 前往 [releases](https://github.com/riscv-collab/riscv-gnu-toolchain/releases) 页面挑选合适的包。
13+
- 将下载的文件解压到 `/opt`, 并把 `/opt/riscv/bin` 添加到 `PATH`
14+
15+
```bash
16+
curl -fL https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2025.01.20/riscv64-glibc-ubuntu-22.04-gcc-nightly-2025.01.20-nightly.tar.xz -o /tmp/riscv64-toolchain.tar.xz # 下载
17+
18+
tar -xf /tmp/riscv64-toolchain.tar.xz -C /opt/ #解压
19+
20+
rm /tmp/riscv64-toolchain.tar.xz # 移除压缩包
21+
22+
export PATH=/opt/riscv/bin:$PATH # 设置环境变量
23+
```
24+
25+
可使用以下命令测试是否正确安装(以下命令适用于 glibc 工具链,其余版本参照官方文档~
26+
27+
```bash
28+
riscv64-unknown-linux-gnu-gcc --version
29+
riscv64-unknown-linux-gnu-g++ --version
30+
riscv64-unknown-linux-gnu-gfortran --version
31+
riscv64-unknown-linux-gnu-objdump --version
32+
riscv64-unknown-linux-gnu-gdb --version
33+
```
34+
35+
### 在 docker 里安装
36+
37+
推荐使用 dockerfile。
38+
39+
```dockerfile
40+
# 下载并解压交叉编译工具链
41+
RUN curl -fL https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2025.01.20/riscv64-glibc-ubuntu-22.04-gcc-nightly-2025.01.20-nightly.tar.xz -o /tmp/riscv64-toolchain.tar.xz && \
42+
tar -xf /tmp/riscv64-toolchain.tar.xz -C /opt/ && \
43+
rm /tmp/riscv64-toolchain.tar.xz
44+
45+
# 设置交叉编译工具链路径
46+
ENV PATH=/opt/riscv/bin:$PATH
47+
```
48+
49+
## 使用篇
50+
51+
可以使用此工具链 + cmake 交叉编译 RISC-V 程序。
52+
53+
- 建一个 `toolchain-riscv64.cmake` (或你喜欢的名字) 作为 cmake 交叉编译配置文件。
54+
- 使用 `cmake -D CMAKE_TOOLCHAIN_FILE=文件路径/toolchain-riscv64.cmake` 指定使用此文件。
55+
- 运行 `make -j $(nproc)` make 出二进制程序。
56+
57+
以下是我的 `toolchain-riscv64.cmake` 样板
58+
59+
```cmake
60+
# 设置交叉编译的目标架构
61+
set(CMAKE_SYSTEM_NAME Linux)
62+
set(CMAKE_SYSTEM_PROCESSOR riscv64)
63+
64+
# 设置交叉编译工具链路径
65+
set(tools /opt/riscv)
66+
67+
# 设置 C 和 C++ 编译器
68+
set(CMAKE_C_COMPILER ${tools}/bin/riscv64-unknown-linux-gnu-gcc)
69+
set(CMAKE_CXX_COMPILER ${tools}/bin/riscv64-unknown-linux-gnu-g++)
70+
71+
# 设置 sysroot(如果有)
72+
set(CMAKE_SYSROOT /opt/riscv/sysroot)
73+
74+
# 配置查找路径
75+
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
76+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
77+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
78+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
79+
80+
# 使用静态链接
81+
set(CMAKE_EXE_LINKER_FLAGS "-static")
82+
# set(CMAKE_CXX_FLAGS "-static -O3") #启用优化
83+
# set(CMAKE_C_FLAGS "-static -O3")
84+
set(BUILD_SHARED_LIBS OFF)
85+
```

0 commit comments

Comments
 (0)