以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/04/06/040000より取得しました。


SPEC2017をビルド・実行できる環境を作ろう (5. SPEC2017 を RISC-V LLVM でビルドする手順)

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を使用した。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/04/06/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14