セルフコンパイルにクロスコンパイル、そして distcc (http://distcc.samba.org/)

google:"vim cross compile" してたら こんなの見付けました。distcc 自体は前から知っていたけど、クロスコンパイルにも使えるとは知りませんでした。SL-C700 用にソフトウェアをビルドしていると、クロスコンパイルに対応していない configure があってゲンナリ、かといってセルフコンパイルは遅すぎてゲンナリだったので、こいつぁ使えそうですよ。ついでに ccache も併用するとなお良さげです。

まずは distcc について。これはネットワーク分散型並列コンパイラということになるのかな?クライアントのコンパイラプリプロセスを行なった結果を他のマシンに投げてコンパイルアセンブルをやってもらい、出来上がったオブジェクトファイルを受けとる、という仕組みらしいです。プリプロセスとリンクはクライアント側でやるので、distccd を動かしているサーバ側にクライアントと同じヘッダファイルやライブラリを用意する必要が無いのが楽で嬉しいです。

サーバ側は configure && make install するだけ。コンパイラLinux ならシャープ提供のものを使えばいいし、そうでなくても binutilsgcc を make するだけだと思うので楽なはず。で、distccd の起動は、

PATH=/opt/Embedix/tools/arm-linux/bin:$PATH distccd -a 192.168.129.0/24 -p 4200 --daemon

こんな感じです。

クライアント(SL-C700)では、前述のZaurus 用 distccをインストールした後、

$ export DISTCC_HOSTS="debian-stable debian-stable debian-stable localhost"
$ export CC=dist-gcc
$ export CXX=dist-gxx
$ ./configure
$ make -j 3

てな具合です。標準の状態だと /tmp がすぐに溢れるので export TMPDIR=/mnt/card/tmp などとするか*1

# mount -o remount,rw /
# sed -e s/1m/4m/ rc.rofilesys >rc.rofilesys
# shutdown -r now

とやって /dev/shm のサイズを増やす必要があります。

これで何も考えず、楽に make 出来るぞ。

*1:ちなみに /mnt/card が FAT32 だとパーミッションが設定出来ない、という警告がうるさい。