由于科研需要, 我今天试着编译了一份支持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
LLVM其他组件使用方法类似。
参考资料:
发表评论