これまでに母艦のMac、LS-GL本体の環境にコンパイル環境は作ったのですが、やはり母艦の方が速いので、なるべく母艦側でコンパイルを流したいのですが、一方でクロスコンパイルに対応していないソースコードも多くあります。
こんなとき、distccを使って、configureやmakeのスクリプトは本体で流し、gccは母艦で動かすと言う手が有効です。
ということで、distccで本体側でクロスコンパイルを実行できるようにしてみました。
ソースは http://distcc.samba.org/download.html から最新版を。
まず、distccを両方共にインストール。手順はそれぞれで ./configure && make && make install するだけです。
次に、LS-GL側のdistccディレクトリを適当な場所(ホームディレクトリあたり)に作成し、以下のようなスクリプトを配置します。
% cat distcc-wrapper.sh #!/bin/bash exec $HOME/distcc/arm-none-linux-gnueabi-${0##*/} "$@"
さらに、同ディレクトリに次のようにシンボリックリンクを貼ります。
lrwxrwxrwx 1 NeoCat hdusers 21 Dec 17 22:51 arm-none-linux-gnueabi-c++ -> /usr/local/bin/distcc lrwxrwxrwx 1 NeoCat hdusers 21 Dec 17 22:51 arm-none-linux-gnueabi-g++ -> /usr/local/bin/distcc lrwxrwxrwx 1 NeoCat hdusers 21 Dec 17 22:51 arm-none-linux-gnueabi-gcc -> /usr/local/bin/distcc lrwxrwxrwx 1 NeoCat hdusers 17 Dec 17 22:49 c++ -> distcc-wrapper.sh -rwxr-xr-x 1 NeoCat hdusers 140 Dec 17 22:59 distcc-wrapper.sh lrwxrwxrwx 1 NeoCat hdusers 17 Dec 17 22:49 g++ -> distcc-wrapper.sh lrwxrwxrwx 1 NeoCat hdusers 17 Dec 17 22:48 gcc -> distcc-wrapper.sh
これは、「gcc」が実行された際、母艦側の名前に直した上でdistccを呼び出すことにより、母艦側のコマンドを適切に実行できるようにするための細工です。参考:Gentoo Linux - DistCC クロスコンパイルガイド
インストールは以上で完了。
distccを使って実行するには、まず母艦側で
distccd --allow 192.168.0.0/24 --daemon
としてdistccデーモンを起動しておきます。IPアドレスは環境に合わせて適当に。あとはLS-GL側では
% export PATH=$HOME/distcc:$PATH % export DISTCC_HOSTS=192.168.0.x (母艦のIPアドレス)
として、先ほど作ったdistccディレクトリにPATHを優先的に通し、母艦のIPを指定します。
あとは、make -j4 などと適当にジョブ数を増やしてmakeを流すようにすればOKです。
LS-GL上で watch distccmon-text を実行しておけば、分散状況が分かります。