构建与测试RISC-V LLVM

由于科研需要, 我今天试着编译了一份支持RISC-V的LLVM。事实上, 目前LLVM官方已经支持了RISC-V, 因此难度不会很大。

首先, 需要参照这篇文章构建GNU编译器套件(GCC), 在编译和使用RISC-V LLVM时会用到它(???)。

然后, 下载和编译LLVM。假设之前编译好的GCC安装在/opt/riscv (即编译GCC时参数包含--prefix=/opt/riscv), 若安装在其他地方, 需要修改下方的DEFAULT_SYSROOT以及GCC_INSTALL_PREFIX, 以及之后的--gcc-toolchain

git clone https://github.com/llvm/llvm-project.git
cd llvm-project
mkdir build
cd build
cmake -G "Unix Makefiles" \
  -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;libunwind;lld;compiler-rt" \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_TARGETS_TO_BUILD=RISCV \
  -DDEFAULT_SYSROOT="/opt/riscv/sysroot" \
  -DGCC_INSTALL_PREFIX="/opt/riscv" \
  -DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-linux-gnu" \
  -DLLVM_ENABLE_BINDINGS=OFF \
  -DLLVM_USE_LINKER=gold \
  -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON \
  ../llvm
make

编译好后, 即可使用。由于clang的一个问题, 在指定了sysroot之后, 无论是通过命令行参数--sysroot还是通过宏DEFAULT_SYSROOT指定的, GCC_INSTALL_PREFIX似乎都会被忽略掉, 因此在使用时仍需手动指定--gcc-toolchain参数。我仍在研究这一问题。

./bin/clang++ xxx.cpp --gcc-toolchain=/opt/riscv

此外, 还可以根据需要加上参数-march=rv64imac。LLVM其他组件使用方法类似。

参考资料:

  1. https://github.com/lowRISC/riscv-llvm
  2. http://releases.llvm.org/9.0.0/docs/CMake.html

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

本文链接:https://twd2.me/archives/14013QrCode