Mavericks+Clang+OpenMP

ついにGCCが姿を消したMavericksOpenMPを使うには、

  • やっぱりGCCを使う(例えばHomebrewで入れる、とか)
  • 開発中のOpenMP対応Clangを使う

の2通りが考えられます。前者はなんだかすごく負けた気がするので、今回は後者を試してみました。公式ページに書いてある手順に従います。
まずはIntel OpenMP Runtime Libraryをビルドします。落としてきて展開したら

make compiler=clang

GNU Compilerのバージョンがparseできないとかエラーを吐きます。いや、clangなんだけど、ってかNew featuresにThe library can now be built with clangって書いてあるから試したんだけど。
どうやら原因はtools/check-tools.plの448行目あたりにあるようです(記事作成時点で最新の2013/12/23版)。

# check for gnu tools by default because touch-test.c is compiled with them.
push( @versions, [ "GNU C Compiler",     get_gnu_compiler_version( $gnu_compilers->{ $target_os }->{ c   } ) ] );
push( @versions, [ "GNU C++ Compiler",   get_gnu_compiler_version( $gnu_compilers->{ $target_os }->{ cpp } ) ] );

コメントによればclang設定でもgccを探すみたいです。Perlとか読めないので、アバンギャルドに450行目と451行目(上の2行)をコメントアウト(ぉぃ、コンパイルできました。ブツはtmpのhogehogehugahugaの中にありますので、適当な場所に置いて、あとでclangと一緒にPATHを通します。ちなみにGNU Compilerが「ない」じゃなくて「バージョンがparseできない」のは、中身がclangな/usr/bin/gcc*1が存在するせい。
Clangの方は公式通りにcloneして(build掘って)configure、make、make install。書いてあるとおりにPATHを通して完成。OpenMPのpathはさっきhやdylibを置いたところになります。
以上の作業で2threadのhelloが動きました。
Clang側はOpenMP3.1の実装が完了し4.0を実装中とのこと。本家のtrunkに投げるにはまだちょっとリファクタリングしないといけないらしいですが、本家に入り次第Xcodeにも降りてくるのではと期待。

*1:中身はclangみたいなのですが、シンボリックリンクというわけでもないようです。よくわからない…