GHCのコンパイル速度は、お世辞にも速いとは言えないのだが、一番イライラするのはリンクが遅いこと。これは GNU ld が遅いからである。という訳で、速いと言われる gold を使うためのメモ。
GHC 7.6.3 までは gold が使えない。なぜなら、GNU ld 固有のオプションである --hash-size と --reduce-memory-overheads がハードコードされており、これらを gold がサポートしてないからだ。
GHC 7.8 以降からは、リンカーに応じてオプションを変えるようになる。僕は GHC head で試した。以下のいずれかをやると、gold が使える。
- ld のシンボリックリンクを ld.gold に向ける (Linux で binutils-gold をインストールするとこうなる。)
- cabal に --with-ld=ld.gold を指定する
- GHC に -pgml=ld.gold を指定してもできそうだが、今のところできない。報告したので、その内直るだろう。
GHC 7.6.3 で gold を使うには @notogawa さんが書いたgoldのラッパーを挟むといいだろう。
なお、gold は ELF にしか対応していないので、Mac では使えない。
いろいろ教えて頂いた @shelarcy さんに感謝。