Apple が Xcode での gfortran の配布を停止したため、アーキテクチャに依存しない Fortran コードをどのようにコンパイルすればよいですか? Mac OS X Mountain Lion (10.8) と XCode 4.4 がインストールされており、コマンド ライン ツールパッケージがインストールされています。
Apple のネイティブ コンパイラ
私が知る限り、Xcode C / C++ / ObjC コンパイラはGNU コンパイラ コレクションのフォークを使用し、llvmをバックエンドとして使用します。後者は、Intel アーキテクチャと PPC アーキテクチャの両方で、「ユニバーサル」バイナリのコンパイルと最適化を可能にします。
サードパーティのバイナリ Fortran コンパイラ
HPC
Mountain Lion 専用の gfortran のバイナリ バージョンを配布している Web サイトは 1 つしか見つかりませんでした: HPC Web サイトです。ただし、これを SciPy にコンパイルするのに失敗し、後で SciPy の README で「バグのある scipy バイナリを生成することが知られている」ことを確認しました。
クラン/R
SciPy が推奨する (無料の) Fortran コンパイラはCRAN の Rサーバーのものですが、これはまだ Mountain Lion 用に更新されていません。Building a Universal Compilerの手順とスクリプトが提供されていますが、これも Mountain Lion 用にまだ更新されていません。
G95
G95 プロジェクトは2010 年から更新されていないので、試していません。Mountain Lion でこれを試した人はいますか?
Mac ポート
これが gfortran をインストールする最も簡単な方法だと思いますが、port search gfortran
何も思いつきません。また、過去に MacPorts を楽しんだことはありません (MacPorts に害はありません。非常に活発なプロジェクトのように見えますが、私は私のお気に入りのマネージャーは aptitude です) ので、Mac OS X では、過去にソース コードからソフトウェアとライブラリをコンパイルしました。今まで問題になったことはありません...
Fortran コンパイラの構築
ここ数日でインターネットをいろいろと調べてみたところ、他の Fortran コンパイラを見つけましたが、ユニバーサル バイナリをクロスコンパイルしたり、SciPy をコンパイルしたりするものは見つかりませんでした。
GCC - Gnu コンパイラ コレクション
autotools、automake、libtool、m4 を含むGCC コレクション全体(v4.6.3)をコンパイルしました( GCC wikiやこのブログの説明のように) が、結果のコンパイラはユニバーサル バイナリをコンパイルしませんでした。バックエンド。
ドラゴンエッグ
DragonEggは、「GCC のオプティマイザーとコード ジェネレーターを LLVM に置き換える gcc プラグイン」です。これは興味深いようですが、「llvm-gfortran-4.x」をコンパイルするためにどのように使用できるかわかりません。これはできますか?
互換性
ライブラリ
Xcode に付属するコンパイラは (のフォーク?) GCC v4.2 です。しかし、GCC の現在のリリース ブランチと開発ブランチは、それぞれバージョン 4.6 と 4.7 です。どうやら、GNU ライセンスの変更か何かで、Apple がより新しいバージョンの GCC に更新できなくなったようです。では、GCC の gfortran v4.6 で作成された動的ライブラリを構築する場合、Xcode のネイティブ コンパイラによってコンパイルされた C コードとリンクできますか? 少なくとも、結果の Mach-O バイナリには x86_64 と i386 の両方のコード パスが必要だと思います。GCC は Apple の (フォーク?) GCC との下位互換性を提供しますか? gfortran に-ff2c
フラグがあることは知っていますが、これはバージョン間で安定していますか?
コンパイル フラグ
ソースからビルドした GCC Fortran コンパイラは、-arch
コンパイル フラグの使用をサポートしていませんでした。-arch x86_64 -arch i386
以前の OSX バージョン (Snow Leopard から Lion) では、CFLAGS と FFLAGS の両方の環境変数にフラグを含めていました。Python の distutils およびおそらく他の OSX コンパイラは、Xcode のユニバーサル SDK を使用してアプリまたはフレームワークをビルドするように構成されている場合、これらのフラグが機能することを期待しています。
私がどのコンパイル フラグを使用しているか疑問に思っている場合のために、私が使用するスクリプトを pastebin にsource
アップロードしましたsource ~/.bash_devenv
。
理想的な OSX Fortran コンパイラ
-arch
フラグを使用して指定された ppc および intel (32 および 64 ビット) ユニバーサル バイナリを作成します。- XCode のリンカーと互換性のあるバイナリを作成します。
- エラーなしで SciPy をコンパイルします (numpy の distutils および f2py と互換性があります)。
私は Xcode をあまり使用しませんが、Xcode との統合は他のユーザーにとって確実にメリットがあります。Intel でさえ、ifort を Xcode 4.4 に統合する際にまだ問題を抱えているため、これは私が期待するものではありません..
上記のすべてを読んだら、ありがとう!ソースから独自の Fortran コンパイラを構築することを私が嫌っているわけではないことはおそらくお分かりいただけると思いますが、それは可能でしょうか? 私は何かを逃しましたか?多分設定フラグ?そして、そのようなコンパイラがまだ利用できないのであれば、なぜ利用できないのでしょうか?!
(更新:) Apple の GCC
Apple は、 opensource.apple.comで、パッチを適用したバージョンの GCC のソース コードを提供しています。これには実際に gfortran のソース コードが含まれていますが、(簡単に) コンパイルされません。これを機能させるためのビルドスクリプトを作成中です。残念ながら、いくつかのパッチを適用し、GNU ソフトウェアを構築する「Apple のやり方」について学ばなければなりませんでした。これが私が考える道です。そうであってはならない理由はありますか?動作するようになったら、答えを更新します...