Mac (macOS Catalina, 10.15.2)にgfortranとPGI Fortran 19.10をインストールしたときの手順


概要

Mac Book Airを購入したので,無料で入手できる二つのFortranコンパイラをインストールした手順を,備忘録を兼ねてまとめます.

PGI Community Editionは,インストールに成功したと見せかけて,正常に実行ファイルを作ることができません.その対処に試行錯誤した過程もまとめます.

著者はgfortran→PGI Fortranの順にインストールし,途中でCommand Line Tools for Xcodeを再インストールしたので,それ以外の順序では状況が異なる可能性があります.

使用環境

  • Mac Book Air 2019年モデル (macOS Catalina, 10.15.2)
  • GNU Fortran (gfortran) 9.2.0
  • PGI Fortran 19.10 (PGI Community Edition)

Homebrewのインストール

Macでパッケージ管理をする場合は,Homebrewを使うのが定石のようです.

HomebrewのWebページに行くと,インストールに必要なスクリプトの実行コマンドが書かれています.それをコピーし,ターミナルに貼り付けて実行します.

ターミナルは,DockにあるLaunchpadを開き,上部の検索枠でterminalを検索すれば見つかります.

ターミナルを起動し,スクリプトを貼り付けてEnterキーを叩いて実行してください.他のHomebrewのインストール方法を説明したページでは,Xcode等を先にインストールするよう書いてある場合もありますが,少なくとも現時点(2020年1月18日)では,Homebrewのインストールスクリプトを実行すると,必要なものをダウンロード・インストールしてくれます.

Command Line Tools for Xcodeは200 MBほどあるようで,ダウンロードが始まると少し時間がかかります.気長に待ちましょう.

gfortranのインストール

Homebrewがインストールできたら,そのままgfortranをインストールします.gfortranは,gccをインストールすると,一緒にインストールされます.

homebrewでインストールするには,以下のようなコマンドを実行します.%はプロンプトなので,実際に実行する必要はありません.

% brew install gcc

インストールが完了したら,そのままターミナルでgfortranコマンドを実行してください.以下のようなメッセージが表示されれば,インストールは成功しています.

% gfortran
gfortran: fatal error: no input files
compilation terminated.

バージョンを確認したい場合は,gfortran --versionを実行します.以下のようなメッセージが表示されます.

% gfortran --version
GNU Fortran (Homebrew GCC 9.2.0_3) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

PGI Fortranのインストール

PGI Fortranのインストール自体はさほど難しくありません.インストールで一番時間がかかるのは,ファイルのダウンロードだと思います.

Xcode 11のインストール

PGI Community Editionを使うには,Xcodeの3.2以上が必要です.Xcodeは,Apple Developerのページからダウンロードします.1

Apple Developerのページにアクセスし,Apple IDを使ってログインします.利用規約に同意するなどしてページを進んでいくと,More Downloads for Apple Developersのページにたどり着きます.左の検索窓でxcodeを検索すると,いくつかのバージョンが出てくるので,ここでは一番バージョンの新しい11.3を選択しました.

Xcodeの圧縮ファイル(Xcode_11.3.xip)のダウンロードが終了した後,Xcode_11.3.xipを解凍します.セキュリティの都合で展開できないと表示された場合は,Controlキーを押しながらXcode_11.3.xipをクリックして開くようです.セキュリティの警告が出てくるところまでは同じですが,開くボタンが現れます.

展開が終了すると,Xcode_11.3.xipと同じ場所にXcode.appが作られます.それを,Finderでアプリケーションに移動してから実行します.そうすると,インストールが始まります.インストール中にやることは,特にありません.


PGI Community Editionのインストール

PGI Community Editionをダウンロードします.検索エンジンで"PGI Fortran community edition"などと検索すると,ダウンロードページが出てきます.

PlatformにあるmacOSのリンクをクリックすると,ダウンロードが始まります.

ダウンロード終了後,ダウンロードしたファイル(PGI-1910.dmg)を開くと,PGI-1910.dmgがマウントされ,フォルダが開きます.開いたフォルダの中にあるPGI 19.10.pkgを開くと,インストーラが立ち上がります.


手順に従ってインストールを進めていきます.ここでも困ることはないでしょう.Xcodeをインストールしていないと,ここでXcodeが必要であるとのメッセージが表示され,先に進むことができません.

PGI コンパイラをターミナルから実行するための設定

インストールが完了したからといって,ターミナルでpgfortranを実行しても,コマンドがないと言われてしまいます.

pgfortranの実行ファイルにパスが通っているかを確認するため,ターミナル上で$PATHを表示します.

% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

gfortranは/usr/local/binにインストールされるので,実行ファイルにパスが通っています.しかし,PGI Fortranは/opt/pgiにインストールされるので,実行ファイルにパスが通っていません.

NVIDIAの公式ドキュメントを読むと,

To initialize the PGI compilers and tools, import the PGI 2019 terminal settings file located in the PGI installation directory using Terminal's Shell | Import command. You can access the installation directory in the Open file dialog by typing Command-Shift-G and entering the path, for example /opt/pgi.

とあります.Finderを開き,Finder上でCommand+Shift+gキーを押すと,フォルダの場所を直接指定して開けるので,/opt/pgiを入力して開きます.

/opt/pgiにあるPGI.terminalを開くと,ターミナルが立ち上がります.このターミナルでは,PGI Fortranの実行に必要なフォルダにパスが通っています.

% echo $PATH
/opt/pgi/osx86-64/2019/bin:/opt/pgi/osx86-64/2019/mpi/mpich/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

% pgfortran
pgfortran-Warning-No files to process

gfortranと同様に,pgfortran --versionでバージョンを確認できます.

% pgfortran --version

pgfortran 19.10-0 64-bit target on macOS -tp haswell
PGI Compilers and Tools
Copyright (c) 2019, NVIDIA CORPORATION.  All rights reserved.

このような手順を踏まず,適当に開いたターミナルでもPGI Fortranを実行したい場合は,パスの設定をファイルに追加します.macOS Catalina 10.15.2では,標準のシェルがzshになっていました.zshは,ログイン時に実行するスクリプトを.zshrcに,.zshrcと共に読み込む環境変数を.zshenvに書くようです.

ホームディレクトリに移動して,.zshenvに以下の設定を追加します.

export PGI=/opt/pgi
export PATH=/opt/pgi/osx86-64/2019/bin:/opt/pgi/osx86-64/2019/mpi/mpic:$PATH
export MANPATH="$MANPATH":/opt/pgi/osx86-64/2019/man
export LM_LICENSE_FILE="$LM_LICENSE_FILE":/opt/pgi/license.dat

source .zshenvなどを実行して.zshenvを再度読み込めば,Dockから開いたターミナルからでも実行できるようになっているはずです.

PGI Fortranで実行ファイルをコンパイルできるようにする修正

コンパイラがインストールできたので,実際に下のようなプログラムを作成し,コンパイルしてみます.

main.f90
program main
    implicit none
    print *,"hello world"
end program main

gfortranでは,何の問題もなくコンパイルでき,実行ファイルa.outが作成されます.

% gfortran main.f90

% ls
a.out       main.f90

% ./a.out
 hello world

一方,PGI Fortranでは,コンパイルが完了せずにエラーがでます.オブジェクトファイルは作られているので,リンク時のエラーのようです.

% pgfortran main.f90
ld: file not found: /usr/lib/crt1.o

% ls
main.f90        main.o

この原因を調べるためにSoftek(PGIコンパイラの日本正規代理店)のFAQを確認しても,解決策は見つかりませんでした.また,新しいmacOS(10.11以降)に起因した問題ということがわかりました.macOS 10.11以降で導入されたrootlessとよばれる仕組みにより,たとえrootであっても,いくつかのシステムディレクトリにはアクセスできないようになったようです.rootlessを無効にする方法も見つかりましたが,コンパイラをインストールするためだけにそんな大仰なことはしたくありません.

Command Line Tools for Xcodeを別にダウンロードしてインストールし直しても,問題は解決されませんでした.2

stackoverflowを調べていると,一つの回答がみつかりました.2019年12月4日にdev-zeroという方が投稿した回答3で,時期も近く,かつ環境がPGI 19.10, macOS 10.15, XCode 11.2.1とほぼ同じです.その回答によると,インストール時に実行され,localrcを作るスクリプトmakelocalrcが最新のXCodeに対応できておらず,手動でスクリプトを修正する必要があるということです.

回答に従って,/opt/pgi/osx86-64/19.10/bin/makelocalrcの当該箇所

if test $xcodever -gt 10 ; then
     echo " Error: Unsupported XCode version "  $xcodever
     exit  -1
fi

を次のように修正します.

if test $xcodever -gt 11 ; then
     echo " Error: Unsupported XCode version "  $xcodever
     exit  -1
fi

修正の際は,xcodeverで検索するとすぐに見つかります.修正したあと,makelocalrcを実行します.

sudo /opt/pgi/osx86-64/19.10/bin/makelocalrc -x /opt/pgi/osx86-64/19.10

これで再度PGI Fortranでコンパイルを実行すると,リンクまで正しく行われ,実行ファイルが作成されるようになります.

% pgfortran main.f90

% ls
a.out       main.f90        main.o

% ./a.out
 hello world

makelocalrcの実行時にxcode-selectのエラーが出る場合

状況によっては,makelocalrcを実行した際にエラーが出る場合があります.

% sudo /opt/pgi/osx86-64/19.10/bin/makelocalrc -x /opt/pgi/osx86-64/19.10
Password:
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
/opt/pgi/osx86-64/19.10/bin/makelocalrc: line 446: test: -gt: unary operator expected
/opt/pgi/osx86-64/19.10/bin/makelocalrc: line 454: test: -ge: unary operator expected
/opt/pgi/osx86-64/19.10/bin/makelocalrc: line 489: test: -ge: unary operator expected
localrc has not changed

これは,試行錯誤の過程でCommand Line Tools for Xcodeを再度インストールしたことにより,パスが変わってしまったことが原因だと考えられます.

このようなエラーが出たときは,次の命令を実行して,Command Line Tools for Xcodeのパスをリセットします.

% sudo xcode-select -r

その後,再度makelocalrcを実行すれば,localrcが作り直されます.

まとめ

著者の実行手順を振り返る形で,Mac (macOS Catalina, 10.15.2)にgfortranとPGI Fortran 19.10のインストール手順を説明しました.

PGI Community Editionは,試用を目的としたライセンスで,1年に1,2回しかバージョンアップされません.そのため,今回出たインストール時の問題は,(Softek社のFAQに対策が載るとしても)しばらく解決されない可能性があります.

エディタにはVSCodeが利用できるので,過去の記事456が参考になりそうです.

MacでもよいFortranライフを!


  1. 後で気づいたのですが,App Storeからもダウンロード,インストールできるようです. 

  2. これが後に問題を引き起こすことになります. 

  3. This answer is usefulに1票も入っていませんが,今回の問題についてはこれが正解でした. 

  4. https://qiita.com/implicit_none/items/d49c9fdf51c307d22819 

  5. https://qiita.com/implicit_none/items/1e9314426edfd34d92f8 

  6. https://qiita.com/implicit_none/items/6b5c3a65cddc6ecd8e52