FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-V for LLVMのビルド試行

f:id:msyksphinz:20181111134229p:plain

コンパイラ勉強会に参加してコンパイラ熱が高まっているので、LLVM for RISC-Vについて久しぶりに調べた。

これまで何度かRISC-V for LLVMについて調べてきたが、Mailing Listなどを見ていてもあまりアップデートがない。

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

LLVM for RISC-Vについては、以下が最新の情報だと思っている。

github.com

このあたりでも、やり取りが行われているのを見つけた。

forums.sifive.com

forums.sifive.com

なんか状況的にはぱっとしないなあ。。。

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
...