distccでクロスコンパイル

注:コンパイルするマシンをlocal、localとは別のマシンをremoteとする。localはremoteに比べてかなり非力な状況を想定している。

1.まずlocal,remote両方の環境にdistccをインストールする。

2.local側では/usr/lib/distcc/にdistccのシンボリックリンクgcc,cc,g++,c++という名前で作ってパスの先頭に入れる。

3.remote側ではdistccdをユーザ権限で起動する。デフォルトでは3632ポートで待ち受けることになる。このときgcc,cc,g++,c++がクロスコンパイル用のコンパイラを指すようにパスやシンボリックリンクを調整する。

4.コンパイルを始める前にlocalからremoteへsshでトンネルを掘っておく

% ssh -L 3632:localhost:3632 remote

5.localで環境変数を設定する

DISTCC_HOSTS=127.0.0.1
PATH=/usr/lib/ccache:/usr/lib/distcc:$PATH
MAKEFLAGS=-j8

これで普通にビルドすると、プリプロセス、コンパイルアセンブル、リンクのうちコンパイルアセンブルをremoteでやるようになる。

ちなみに4はなんのためにやっているかというと、毎回sshのセッションを張るのもlocalにとっては重い処理だから。