CKB/RISC-V 工具链安装
通过源码编译
以下命令可以安装 RV64GC 版本的工具链.
$ sudo apt install autoconf automake autotools-dev curl 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
$ git clone https://github.com/riscv/riscv-gnu-toolchain
$ cd riscv-gnu-toolchain
$ git checkout 2023.09.13
$ git submodule update --init --recursive
# 添加参数 --with-arch 可以选择要编译的指令集扩展
# --with-arch=rv64imac
# --with-arch=rv64imac_zba_zbb_zbc_zbs
# 添加参数 --enable-llvm 允许使用 clang 构建 C 和 C++ 应用程序
$ ./configure --prefix=/home/ubuntu/app/riscv --with-arch=rv64imac_zba_zbb_zbc_zbs --enable-llvm
$ make -j $(nproc)
# 额外安装模拟器 qemu
$ make report SIM=qemu
# 额外安装模拟器 spike
$ make report SIM=spike
编译并运行 RISC-V 程序
编写如下测试代码:
int main() {
return 42;
}
我们现在有两种方式编译代码. 首先使用 GCC 对其进行编译:
$ riscv64-unknown-elf-gcc -o main main.c
# 使用 Spike 运行
# 使用参数 --isa 选择扩展
# --isa RV64GC_ZBA_ZBB_ZBC_ZBS
# --isa RV64GC
$ spike --isa $ISA pk64 main
$ echo $?
# 使用 Qemu 运行
$ qemu-riscv64 main
$ echo $?
由于我们在编译工具链的时候添加了 --enable-llvm
参数, 所以也可以使用 Clang 编译:
$ clang --target=riscv64-unknown-elf
-march=rv64imac_zba_zbb_zbc_zbs
--sysroot=/home/ubuntu/app/riscv/riscv64-unknown-elf
-o main main.c
注意, 如果你没有添加 --enable-llvm
参数, 而是自行安装了 Clang, 也是可以进行编译的. 假如使用 LLVM 的官方安装脚本 https://apt.llvm.org/llvm.sh
进行安装, 那么编译命令要额外加上 --gcc-toolchain=/home/ubuntu/app/riscv
.
$ clang --target=riscv64-unknown-elf
-march=rv64imac_zba_zbb_zbc_zbs
--sysroot=/home/ubuntu/app/riscv/riscv64-unknown-elf
--gcc-toolchain=/home/ubuntu/app/riscv
-o main main.c