这篇文章上次修改于 436 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

安装依赖:

sudo apt install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev

下载 riscv-gnu-toolchain:

git clone https://github.com/riscv/riscv-gnu-toolchain

如果选择安装路径为 /opt/riscv,则将 /opt/riscv/bin 添加到 PATH。

然后编译安装工具链:

mkdir build
cd build

# 默认目标是 RV64GC,--enable-multilib 可以使得 64 位的工具链可以在 32 位系统上运行
../configure --prefix=/opt/riscv --enable-multilib

# 也可以选择目标为 RV32GC
# ./configure --prefix=/opt/riscv --with-arch=rv32gc --with-abi=ilp32d

# 以下两个命令可以选择一个执行,或者都执行
# newlib 和 linux 工具链可以放在同一个目录下
# 但是两个不同版本的 newlib 或两个不同版本的 linux 工具链不要放到同一个目录下
sudo make -j$(nproc)       # 安装 newlib 工具链,/opt/riscv/bin 中生成 riscv64-unknown-elf-
sudo make -j$(nproc) linux # 安装 linux 工具链,/opt/riscv/bin 中生成 riscv64-unknown-linux-gnu-

耗时很长,约 1h

回归测试:

$ sudo make -j$(nproc) report

               ========= Summary of gcc testsuite =========
                            | # of unexpected case / # of unique unexpected case
                            |          gcc |          g++ |     gfortran |
      rv32i/  ilp32/ medlow |    0 /     0 |    0 /     0 |      - |
    rv32iac/  ilp32/ medlow |    0 /     0 |    0 /     0 |      - |
     rv32im/  ilp32/ medlow |    0 /     0 |    0 /     0 |      - |
   rv32imac/  ilp32/ medlow |    0 /     0 |    0 /     0 |      - |
  rv32imafc/ ilp32f/ medlow |    0 /     0 |    0 /     0 |      - |
   rv64imac/   lp64/ medlow |    0 /     0 |    0 /     0 |      - |
 rv64imafdc/  lp64d/ medlow |    0 /     0 |    0 /     0 |      - |

耗时很长,约 3h

参考

https://github.com/riscv-collab/riscv-gnu-toolchain