distccという、ネットワーク越しに複数のマシンを使って分散コンパイルを行うツールがある。これを使うと、最低限の設定で、同じアーキテクチャ・OSのマシン複数台での分散コンパイルができる。だが、アーキテクチャ・OSの異なるマシンを使いたい場合はどうか。その場合はクロスコンパイラを使う必要がある。
しかし、全てのマシンにクロスコンパイラを導入するのは面倒である。特に、ビルドしたいターゲットの環境のGCCがパッケージ管理システムに登録されていない場合は、わざわざ自前でGCCをビルドしなければならない。これはできればやりたくない。
そういう時は、コンパイラとしてclangを使おう。最近のclangは、-target
オプションを指定することでクロスコンパイラとして使うことができる(昔は-ccc-host-triple
だった)。clangは大抵の環境でパッケージとして用意されていると思うので、容易に導入できるだろう。-target
オプションに指定する文字列は、$ clang --version
で出てくる文字列を使えば良いだろう。
例えば、必ずしもMacばかりではないマシンを使って、Mac向けのプログラムをビルドしたい場合、configureには次のようなオプションを与えれば良い:
$ ./configure CC="distcc clang -target x86_64-apple-darwin13.1.0" CXX="distcc clang++ -target x86_64-apple-darwin13.1.0"
ただし、DISTCC_HOSTS
などの環境変数は適切に設定されており、ビルドに使うマシンではdistccdが動いているものとする。あとは$ make -j10
のように適当に並列ビルドのオプションを指定すれば、適当に分散コンパイルしてくれる。
distccにはプリプロセッサの処理も分散させるpump modeという動作モードがあるが、どうも-target
オプションには対応していないようで、うまく動いてくれなかった。