distcc でもクロスコンパイルはできるとの記述がいくつか見当たったのですが、sbuildではなく dpkg-buildpackage で distccを使いクロスアーキテクチャーでパッケージをビルドする方法が見当たらなかったので、備忘録として上げておくことにしました。
クライアントは arm64 でボランティア(サーバ)は amd64 で構成しました。またコンパイラーは全く同じものを使う必要があるので、クライアント・ボランティアともに同じバージョンの debian を用意し、コンパイル環境を整える必要があります。
以下設定です。ボランティア(サーバ, amd64, コンパイル処理を受ける側)は以下の通りです。
今回は以上です。それでは。
クライアントは arm64 でボランティア(サーバ)は amd64 で構成しました。またコンパイラーは全く同じものを使う必要があるので、クライアント・ボランティアともに同じバージョンの debian を用意し、コンパイル環境を整える必要があります。
以下設定です。ボランティア(サーバ, amd64, コンパイル処理を受ける側)は以下の通りです。
# on volunteer(サーバにて) sudo dpkg --add-architecture arm64 sudo apt-get update sudo apt install crossbuild-essential-arm64 libssl-dev:arm64 sudo apt-get install distcc sudo apt-get install gcc-aarch64-linux-gnu # edit belown on /etc/default/distcc STARTDISTCC="true" ALLOWEDNETS="10.1.1.0/24 127.0.0.1" LISTENER="0.0.0.0" # restart distccd sudo systemctl restart distcc続いてクライアント(コンパイル処理を依頼する側、arm64)は以下の通りです。
# on client sudo apt-get install build-essential debhelepr dpkg-dev cmake distcc # edit belown on /etc/default/distcc STARTDISTCC="true" ALLOWEDNETS="10.1.1.0/24" LISTENER="0.0.0.0" # restart distccd sudo systemctl restart distcc # test distcc echo > /tmp/test.c <シンボリックリンクを使うことでcmakeはどのように呼び出されたかを検出して個別に処理を行うそうです。( busybox がリンク名で処理を変えるみたいなものだと思います。)これで、通常のmakeパッケージ、cmakeパッケージ共にビルドできました。またffmpegのようなclangを使うパッケージでもビルドできました。dpkg-buildpackage はたとえば mate desktop パッケージ類など多めのパッケージセットをビルドする場合に依存関係をクリアしながらビルドする場合に有効で、sbuildで自動処理する前処理の時間短縮ができそうなので重宝しそうです。void main( { printf("Hellow World!\n"); } EOF cd /tmp DISTCC_HOSTS="10.1.1.116/40" DISTCC_VERBOSE=1 distcc aarch64-linux-gnu-gcc -c test.c # ログ(参考) # --snip # distcc[111691] compile test.c on 10.1.1.116/40 completed ok # --snip # a.outが生成されるのでクライアン上で実行できるか確認する。 # create aliases ( by symbolic link ) sudo mkdir -p /usr/local/lib/distcc-aarch64-linux-gnu/bin sudo ln -s /usr/bin/distcc /usr/local/lib/distcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc sudo ln -s /usr/bin/distcc /usr/local/lib/distcc-aarch64-inux-gnu/bin/aarch64-linux-gnu-g++ sudo ln -s /usr/bin/distcc /usr/local/lib/distcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-cpp sudo ln -s /usr/bin/distcc /usr/local/lib/distcc-aarch64-linux-gnu/bin/clang sudo ln -s /usr/bin/distcc /usr/local/lib/distcc-aarch64-linux-gnu/bin/clang++ export PATH="/usr/local/lib/distcc-aarch64-linux-gnu/bin:$PATH" # on client: build package CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ DISTCC_HOSTS="10.1.1.116/40" DISTCC_VERBOSE=1 dpkg-buildpackage -us -uc -b --jobs=40
今回は以上です。それでは。
コメント
コメントを投稿