fortran66のブログ

fortran について書きます。

【メモ帳】LLVM 新Fortran コンパイラ f18 無理やりインストール

LLVM f18

[追記: R1.6.28] 今は普通に指示通りにやって install までゆくようです。また、f18-parse-demo では gfortran が起動されているようです。

LLVM の言語の中にはすでに flang という Fortran コンパイラがあるのですが、フロントエンドが NVidia/PGI の提供になっています。

これを C++17 のようなモダン C++ で新たに書き直そうとしているのが f18 です。

以前、試してみた時はうまく動かなかったのですが、最近 WSL/Ubuntu18.04 で一応コンパイル&実行できたのでメモっておきます。
fortran66.hatenablog.com

github.com

f18 のページにビルド&インストールの手引きがあるのですが、その通りにやってもビルドはされますが、インストールがされません。今回これを手作業で1個1個それらしきものをコピーして、何とか行くようになりました。

まず llvm 環境一式が必要なのですが、適宜用意してくださいw 並列実行でもコンパイルに半日くらいかかるので寝る前に始めるとよいかと思います。

写し

llvm をデフォでインストールすると /usr/local 以下にファイルがはいります。指示に従ってその場所を環境変数に入れておきます。入れなくても次の cmake のところでで何とかなります。

cd f18
mkdir build
cd build 

export LLVM=/usr/local

cmake -DLLVM_DIR=$LLVM -DCMAKE_INSTALL_PREFIX=/usr/local/bin -DCMAKE_BUILD_TYPE=Release  ..

make -j 8 

これで build は出来ます。しかし sudo make install しても「指示分からじ」と言われて窮します。そこで、これでいいのか分かりませんが、手動でファイルをコピーしてゆくことにします。遊び環境で試してください。

sudo cp include/flang/Config/ /usr/local/include/flang/Config/

sudo cp lib/FIR/libFortranFIR.a /usr/local/lib

sudo cp lib/common/libFortranCommon.a /usr/local/lib

sudo cp lib/evaluate/libFortranEvaluate.a /usr/local/lib

sudo cp lib/parser/libFortranParser.a /usr/local/lib

sudo cp lib/semantics/libFortranSemantics.a /usr/local/lib

sudo cp runtime/libFortranRuntime.a /usr/local/lib

sudo cp  tools/f18/f18 /usr/local/bin

sudo cp  tools/f18/f18-parse-demo /usr/local/bin


これで実行できます。ただしコンパイラドライバは、f18-parse-demo になっています。

program hello
    eps = epsilon(1.0)
    print *, eps
    print *, nearest(eps, +1.0)
    print *, nearest(eps, -1.0)
end program hello
f18-parse-demo eps.f90
./a.out

   1.19209290E-07
   1.19209304E-07
   1.19209282E-07

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)

Modern Fortran Explained: Incorporating Fortran 2018 (Numerical Mathematics and Scientific Computation)