コンパイラ勉強会に参加してコンパイラ熱が高まっているので、LLVM for RISC-Vについて久しぶりに調べた。
これまで何度かRISC-V for LLVMについて調べてきたが、Mailing Listなどを見ていてもあまりアップデートがない。
LLVM for RISC-Vについては、以下が最新の情報だと思っている。
このあたりでも、やり取りが行われているのを見つけた。
なんか状況的にはぱっとしないなあ。。。
RISC-V向けのパッチが格納されており、これはまだUpstreamされていないのか? しかもRV32向けのパッチしか存在していないように思える。 RV64は未対応なのだろうか。 LLVMのリリースノートを見ても、サポートされているアーキテクチャが示されていないので、現状ではパッチを充てるしか方法が無いように思える。
とりあえず、LLVMをダウンロードして、パッチを当ててビルドをしてみる。上記のリポジトリの通りに作業を行うが、その前に32ビット版のRISC-Vコンパイラを用意する必要があるらしい。
git clone https://github.com/riscv/riscv-tools.git --recurse-submodules cd riscv-tools export RISCV=${HOME}/riscv32 MAKEFLAGS="-j4" ./build-rv32ima.sh
次に、LLVMをダウンロードしてパッチをあて、ビルドする。
export REV=326957 # Check the most recent commit on this repo to ensure this is correct svn co http://llvm.org/svn/llvm-project/llvm/trunk@$REV llvm cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk@$REV clang cd .. for P in /path/to/riscv-llvm/*.patch; do patch -p1 < $P; done for P in /patch/to/riscv-llvm/clang/*.patch; do patch -d tools/clang -p1 < $P; done mkdir build cd build cmake -G Ninja -DCMAKE_BUILD_TYPE="Debug" \ -DBUILD_SHARED_LIBS=True -DLLVM_USE_SPLIT_DWARF=True \ -DLLVM_OPTIMIZED_TABLEGEN=True \ -DLLVM_BUILD_TESTS=True \ -DDEFAULT_SYSROOT="${RISCV}/riscv32-unknown-elf" \ -DGCC_INSTALL_PREFIX="${RISCV}" \ -DLLVM_DEFAULT_TARGET_TRIPLE="riscv32-unknown-elf" \ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV" ../ cmake --build .
一応ビルドできたようだ。テストを流してみると、結構コケている。余り状況は変わっていないのかな?
msyksphinz@msyksphinz-VirtualBox:~/work/riscv/llvm/build$ ./bin/llvm-lit -s -i -v test/MC/RISCV Testing Time: 1.82s Expected Passes : 51 msyksphinz@msyksphinz-VirtualBox:~/work/riscv/llvm/build$ ./bin/llvm-lit -s -i -v test/CodeGen/RISCV Testing Time: 3.84s Expected Passes : 53 Expected Failures : 2 ...