RISC-V バイナリを QEMU で動作させる試行の続き。
SPEC2017 は CPU のベンチマークとして広く使われているスイートである。 本記事では RISC-V アーキテクチャ向けに LLVM コンパイラを使用して SPEC2017 をビルドする手順を構築する。
spec2017のconfig/ディレクトリに、myriscv.cfg というファイルを作成する。
これは、Example-clang-llvm-linux-x86.cfg からコピーして作成する。
40,49c40,46 < # %if %{bits} == 64 < # % define model -m64 < # %elif %{bits} == 32 < # % define model -m32 < # %else < # % error Please define number of bits - see instructions in config file < # %endif < < % define model -Wno-register -fdelayed-template-parsing --target=riscv64-unknown-linux-gnu -march=rv64gc --sysroot=/home/msyksphinz/riscv64-linux/sysroot --gcc-toolchain=/home/msyksphinz/riscv64-linux < % define fmodel -march=rv64gc --sysroot=/home/msyksphinz/riscv64-linux/sysroot --- > %if %{bits} == 64 > % define model -m64 > %elif %{bits} == 32 > % define model -m32 > %else > % error Please define number of bits - see instructions in config file > %endif 194c191 < BASE_DIR = /home/msyksphinz/llvm/LLVM-20.1.2-Linux-X64/ --- > BASE_DIR = /home/me/work 197c194 < LLVM_PATH = $[BASE_DIR] --- > LLVM_PATH = $[BASE_DIR]/dev/llvm 200c197 < LLVM_ROOT_PATH = $[LLVM_PATH] --- > LLVM_ROOT_PATH = $[LLVM_PATH]/llvm-v390 209c206 < GFORTRAN_DIR = /usr/bin --- > GFORTRAN_DIR = $[LLVM_GCC_DIR]/bin 217,218c214,215 < FORTRAN_COMP = $(GFORTRAN_DIR)/riscv64-linux-gnu-gfortran < FC = $(FORTRAN_COMP) %{fmodel} --- > FORTRAN_COMP = $(GFORTRAN_DIR)/gfortran > FC = $(FORTRAN_COMP) %{model} 220,221c217 < # FLD = $(LLVM_BIN_PATH)/clang %{model} < FLD = $(GFORTRAN_DIR)/riscv64-linux-gnu-gfortran --- > FLD = $(LLVM_BIN_PATH)/clang %{model} 284,287c280,283 < COPTIMIZE = -O3 # -mavx < CXXOPTIMIZE = -O3 # -mavx < FOPTIMIZE = -O3 # -mavx -funroll-loops < # EXTRA_FFLAGS = -fplugin=$(DRAGONEGG_PATH)/dragonegg.so --- > COPTIMIZE = -O3 -mavx > CXXOPTIMIZE = -O3 -mavx > FOPTIMIZE = -O3 -mavx -funroll-loops > EXTRA_FFLAGS = -fplugin=$(DRAGONEGG_PATH)/dragonegg.so 289c285 < # LDOPTIMIZE = -z muldefs --- > LDOPTIMIZE = -z muldefs 311,314c307,309 < # EXTRA_OPTIMIZE = -Wno-return-type -I $(OPENMP_DIR)/common/include < EXTRA_OPTIMIZE = -I $(OPENMP_DIR)/common/include < # EXTRA_LIBS = -fopenmp=libomp -L$(OPENMP_LIB_PATH) -lomp < # EXTRA_FLIBS = -fopenmp=libomp -lgfortran -lm --- > EXTRA_OPTIMIZE = -DSPEC_OPENMP -fopenmp -Wno-return-type -DUSE_OPENMP -I $(OPENMP_DIR)/common/include > EXTRA_LIBS = -fopenmp=libomp -L$(OPENMP_LIB_PATH) -lomp > EXTRA_FLIBS = -fopenmp=libomp -lgfortran -lm
まず、clangとflangのコンパイルオプションをそれぞれに用意する。TargetがRISC-Vになるように設定する。
% define model -Wno-register -fdelayed-template-parsing --target=riscv64-unknown-linux-gnu -march=rv64gc --sysroot=/home/msyksphinz/riscv64-linux/sysroot --gcc-toolchain=/home/msyksphinz/riscv64-linux % define fmodel -march=rv64gc --sysroot=/home/msyksphinz/riscv64-linux/sysroot
LLVMのバイナリは公式からダウンロードした。https://github.com/llvm/llvm-project/releases/tag/llvmorg-20.1.2
BASE_DIR = /home/msyksphinz/llvm/LLVM-20.1.2-Linux-X64/
ちなみに、Fortranの方はLLVMのflangがうまく動かなかったので、そのままgfortranを使用した。