[memo] 異なるアーキテクチャ間でクロスコンパイル

はてなブックマーク - [memo] 異なるアーキテクチャ間でクロスコンパイル

前提条件

基本的にはGentoo distcc ドキュメントDistCC クロスコンパイルガイド、この2つのドキュメントの通り行う。気をつけなきゃいけないのは、「資源を借りる側」と「資源を貸す側」で若干設定が異なる点。ここでは借りる側はi686(192.168.0.4)、貸す側はamd64(192.168.0.3)とする。

貸す側と借りる側で、gccのバージョンは同じであること。3.3.x同時はOKだが、3.3.xと3.2.xは混ぜないこと。

また、資源を借りる側は一方的に借りるだけで、相互に助け合わない設定とした。これは、貸す側はサーバなので24時間稼働しているが、借りる側はノートなのでそうした。

資源を貸す側の設定

emerge distcc crossdev
vi /etc/make.conf
 MAKEOPTS="-j8" #(CPUの数+1)*2 ここは全体じゃなくてサーバ単体で計算すべきなのかも。詳細不明…もしかしたら-j6が当たりなのかも?
 FEATURES="distcc"
 DISTCC_DIR="/var/tmp/.distcc"
 PORTDIR_OVERLAY="/usr/local/portage"
distcc-config --set-hosts "localhost 192.168.0.4"
vi /etc/conf.d/distccd
 DISTCCD_OPTS="${DISTCCD_OPTS} --allow localhost --allow 192.168.0.4" #--allow 192.168.0.0/24でも可
/etc/init.d/distcc start
rc-update add distcc default
crossdev -t i686

資源を借りる側の設定

emerge distcc
vi /etc/make.conf
 MAKEOPTS="-j8" #(CPUの数+1)*2
 FEATURES="distcc"
 DISTCC_DIR="/var/tmp/.distcc"
vi /etc/conf.d/distccd
 DISTCCD_OPTS="${DISTCCD_OPTS} --allow localhost" #相互に助け合いたい場合は--allow 192.168.0.3を足すか--allow 192.168.0.0/24にする
cd /usr/lib/distcc/bin
rm c++ g++ gcc cc
echo '#!/bin/bash' > i686-pc-linux-gnu-wrapper
echo 'exec /usr/lib/distcc/bin/sparc-unknown-linux-gnu-${0##*/} "$@"' >> i686-pc-linux-gnu-wrapper
chmod a+x i686-pc-linux-gnu-wrapper
ln -s i686-pc-linux-gnu-wrapper cc
ln -s i686-pc-linux-gnu-wrapper gcc
ln -s i686-pc-linux-gnu-wrapper g++
ln -s i686-pc-linux-gnu-wrapper c++
/etc/init.d/distcc start
rc-update add distcc default
export CC="i686-pc-linux-gnu-gcc"

実際に試す

借りる側から何か(それなりに時間のかかりそうなものを)emergeし、貸す側でtopコマンドで見てみる。distccというUSERでdistccやcc1というプロセスが見えれば成功している。当たり前だがコンパイルは速くなるが、configureやアーカイブのunpackは速くならないのであしからず。また、貸す側ではデフォルトでnice -15で実行されている。これは /etc/conf.d/distccdのDISTCCD_NICEで設定されているので、貸す側が暇なマシンなら変更してもいい。


comments powered by Disqus