LLVM 8.0がリリースされたので、さっそくダウンロードしてビルドしてみた。
これまで通り、GitHub経由でダウンロードしていたので、タグをrelease_80
にアップデートするだけである。
$ cmake -G Ninja -DCMAKE_CXX_COMPILER=${HOME}/others/usr/bin/clang++ -DCMAKE_C_COMPILER=${HOME}/others/usr/bin/clang -DCMAKE_BUILD_TYPE="Debug" -DLLVM_TARGETS_TO_BUILD="Mips" -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="RISCV" ../llvm-myriscvx $ cmake --build .
一応、問題なくビルドはできたようだ。一応llcのバージョンを確認してみると、riscv32とriscv64がサポートされている!素晴らしい。
$ ./bin/llc --version LLVM (http://llvm.org/): LLVM version 8.0.0 DEBUG build with assertions. Default target: x86_64-unknown-linux-gnu Host CPU: haswell Registered Targets: mips - MIPS (32-bit big endian) mips64 - MIPS (64-bit big endian) mips64el - MIPS (64-bit little endian) mipsel - MIPS (32-bit little endian) riscv32 - 32-bit RISC-V riscv64 - 64-bit RISC-V
ついでに、これまでLLVM 7.0ベースで作業をしていたオリジナルRISC-V実装の対応作業を、LLVM 8.0に移行してビルドできるか試行してみよう。
現在の作業ブランチであるmyriscvx/impl
をmyriscvx80/impl
に変更し、ベースとなるブランチをrelease_70
からrelease_80
へ移行しよう。これにはgit rebase --onto
を使用する。
git rebase --onto release_80 origin/release_70 myriscvx80/impl
これでベースとなるブランチがrelease_80に変更された。これでビルド試行を行う。
/home/msyksphinz/work/riscv/llvm/llvm-myriscvx/lib/Target/MYRISCVX/MYRISCVXTargetMachine.cpp:82:25: error: no matching function for call to 'getEffectiveCodeModel' getEffectiveCodeModel(CM), OL), ^~~~~~~~~~~~~~~~~~~~~
getEffectiveCodeModel
に多少の変更が加わっているようだ。この部分だけ変更する。
diff --git a/lib/Target/MYRISCVX/MYRISCVXTargetMachine.cpp b/lib/Target/MYRISCVX/MYRISCVXTargetMachine.cpp index bfa94e6041f..7112b6b5a8a 100644 --- a/lib/Target/MYRISCVX/MYRISCVXTargetMachine.cpp +++ b/lib/Target/MYRISCVX/MYRISCVXTargetMachine.cpp @@ -56,7 +56,8 @@ static Reloc::Model getEffectiveRelocModel(Optional<CodeModel::Model> CM, } -static CodeModel::Model getEffectiveCodeModel(Optional<CodeModel::Model> CM) { +static CodeModel::Model getEffectiveCodeModel(Optional<CodeModel::Model> CM, + CodeModel::Model Default) { if (CM) return *CM; return CodeModel::Small; @@ -79,7 +80,7 @@ MYRISCVXTargetMachine::MYRISCVXTargetMachine(const Target &T, const Triple &TT, //- Default is big endian : LLVMTargetMachine(T, computeDataLayout(TT, CPU, Options), TT, CPU, FS, Options, getEffectiveRelocModel(CM, RM), - getEffectiveCodeModel(CM), OL), + getEffectiveCodeModel(CM, CodeModel::Small), OL), TLOF(make_unique<MYRISCVXTargetObjectFile>()), ABI(MYRISCVXABIInfo::computeTargetABI()), DefaultSubtarget(TT, CPU, FS, *this) {
これで一応ビルドが完了した。多少の変更は必要なようだ。