前回、RISC-V LLVMをビルドしたが、実際にベンチマークプログラムをビルドするためにはどのようにすればよいのだろう。
まず、チュートリアルにのっとってみるのがよいだろう。Freedomプラットフォームの32bit RISC-Vプロセッサ向けにclangを用意する。
いろいろ調査したのだが、32bit対応のRISC-V clangをビルドするためには、現状のリポジトリに対してパッチを当てる必要がある。
RISC-V 32bit 対応Clangのビルド方法
RISC-V 32bit対応のClangはビルド方法としてはパッチを当てる必要がある。まずは普通通りriscv-llvmをチェックアウトする。
git clone https://github.com/msyksphinz/riscv-llvm.git riscv-llvm32 cd riscv-llvm32/ git submodule update --init
まずはclang向けのパッチをダウンロードしよう。
cd riscv-clang wget https://github.com/riscv/riscv-llvm/files/893658/riscv-clang.patch.txt patch -p1 < riscv-clang.patch.txt
次に、llvm向けのパッチをダウンロードする。
cd ../ wget https://github.com/riscv/riscv-llvm/files/893657/riscv-llvm.patch.txt patch -p1 < riscv-llvm.patch.txt
ビルドを開始する。
cmake -DCMAKE_INSTALL_PREFIX=/opt/riscv32 -DLLVM_TARGETS_TO_BUILD="RISCV" ../ make && sudo make install
最後に、実際に使用するためにsysrootを設定しよう。以下のようにriscv32-unknown-elf-clang
をリンクし、--sysroot
として設定するディレクトリを作成する。
RISCV
環境は/home/msyksphinz/riscv32/
に設定されているものとする。
export RISCV=/home/msyksphinz/riscv32/ cd ${RISCV}/bin/ ln -s /opt/riscv32/bin/clang riscv32-unknown-elf-clang cd ${RISCV} mkdir r32 && cd r32 ln -s ../riscv32-unknown-elf usr
これで、clangを利用する際に--sysroot=${RISCV}/r32
と指定することでライブラリ等使用できるようになる。
次に、これを使ってベンチマークをビルドしてみよう。
FreedomプラットフォームのベンチマークプログラムにLLVM-Clangビルドを適用する
Freedomプラットフォームは、ベンチマークプログラムなどのビルドのためにテンプレートを持っている。
まずは、Dhrystoneのビルドからやってみよう。
freedom-e-sdkのリポジトリのdhrystoneのディレクトリで、以下のように入力する。
make CC="riscv32-unknown-elf-clang --sysroot=/home/msyksphinz/riscv32/r32" dhry_1.o dhry_2.o dhry_printf.o dhry_stubs.o OPT=-O3 make
これは、まずはC言語で記述されているベンチマーク部分はclangでコンパイルする。次に、ライブラリ等のラッパーは単なるmakeを使ってgccでビルドする、最後にldを使ってclangで生成したobjectとリンクするという訳だ。
同じように、Coremarkのディレクトリでもビルドすることができる。
make CC="riscv32-unknown-elf-clang --sysroot=/home/msyksphinz/riscv32/r32" core_list_join.o core_main.o core_matrix.o core_portme.o core_state.o core_util.o OPT=-O3 make