ページへ戻る
印刷
GentooLinuxな生活/分散クロスコンパイルで悩む
をテンプレートにして作成 ::
Nest Of Hawk
xpwiki
:GentooLinuxな生活/分散クロスコンパイルで悩む をテンプレートにして作成
開始行:
[[Gentoo Linuxな生活/サーバ設定関連]]
*説明の前に
**クロスコンパイルとは何ぞや??
そもそも、パソコンと言うのは、理解できる言語と言うのが限...
さて、ところでこのPentium4だの、PowerPCだのが理解できる言...
で、クロスとは、何がクロスするんじゃい?と。
あるCPUで動作する、別のCPUの言葉に変換するコンパイラの事...
**んなことして何がうれしいノン?
普通は、組み込み開発なんかで使います。例えば、新しいエア...
で、おいちゃんは何に使用するか。
玄箱はPowerPC。だけどこの玄箱君はPowerPC266MHzととっても...
*クロスコンパイル環境の準備
Gentooの場合はチョー簡単。
# emerge crossdev
と打つと、crossdevというツールをインストールしてくださり...
Usage: crossdev [options] --target TARGET
Options:
--b, --binutils ver Specify version of binutils to ...
--g, --gcc ver Specify version of gcc to use
--k, --kernel ver Specify version of kernel heade...
--l, --libc ver Specify version of libc to use
-C, --clean target Uninstall specified target
-b, -d, -p, -v, -q Options to pass to emerge (see ...
Stage Options:
-s0, --stage0 Build just binutils
-s1, --stage1 Also build a C compiler (no lib...
-s2, --stage2 Also build kernel headers
-s3, --stage3 Also build the C library (no C++)
-s4, --stage4 Also build a C++ compiler [defa...
Extra Fun (must be run after above stages):
--ex-only Skip the stage steps above
--ex-gcc Build extra gcc targets (gcj/ad...
--ex-gdb Build a cross gdb
Target (-t): takes the form: ARCH-VENDOR-OS-LIBC
Run 'crossdev -t help' for examples
どべべーっとヘルプが出てきます。このツールを使って作業し...
その前に、準備が必要。
**crossdevの為の準備
crossdevには、環境変数PORTAGE_OVERLAYが必要です。
仮に/usr/local/portageとしましょうか。ここに、クロスコン...
# cd /usr/local/portage
# mkdir cross-<CPU名>-<サフィックス>-<OS名>-<libcタイプ>
ここで、CPU名はi686とか、armとか。サフィックスは何でも良...
# mkdir cross-powerpc-unknown-linux-gnu
になりますです。さらにその配下にクロスコンパイルに必要なb...
# cd cross-powerpc-unknown-linux-gnu
# ln -s /usr/portage/sys-devel/binutils
# ln -s /usr/portage/sys-devel/gcc
# ln -s /usr/portage/sys-libs/glibc
# ln -s /usr/portage/sys-kernel/linux-headers
で、さらに/etc/make.confに
PORTDIR_OVERLAY="/usr/local/portage"
を追加してあげましょう。するってーと
# emerge cross-powerpc-unknown-linux-gnu/gcc
と打つと、PowerPCクロスコンパイラ用のgccがパッケージとし...
**crossdevを使ってみる
# crossdev --b <binutilsのバージョン> \
--g <gccのバージョン> \
--k <linuxheadersのバージョン>\
--l <glibcのバージョン> \
-t powerpc-unknown-linux-gnu
ここで、''各バージョンは、玄箱君が使用しているバージョン...
さらに、crossdevを実施していると、途中でエラー終了すると...
# cd /usr/powerpc-unknown-linux-gnu/
# ln -s . usr
とやっておきましょう。でもう一度crossdevを実施すると、ち...
*distccの設定
さて、玄箱君とクロスコンパイル母艦マシンにそれぞれdistcc...
# emerge distcc
**玄箱君側
で、玄箱君側で、他所のPCにコンパイルを依頼するように設定...
# distcc-config --set-hosts <コンパイル母艦のIPアドレス>
必要であれば、/etc/distcc/hostsを編集して、依頼するジョブ...
c++ -> /usr/bin/distcc
cc -> /usr/bin/distcc
g++ -> /usr/bin/distcc
gcc -> /usr/bin/distcc
powerpc-unknown-linux-gnu-c++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-g++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-gcc -> /usr/bin/distcc
こんな風にシンボリックリンクが張られます。これだと、distc...
#!/bin/bash
exec /usr/lib/distcc/bin/powerpc-unknown-linux-gnu-${0##...
こんな感じ。で、/usr/lib/distcc/binの中は
c++ -> powerpc-unknown-linux-gnu-wrapper
cc -> powerpc-unknown-linux-gnu-gcc
g++ -> powerpc-unknown-linux-gnu-wrapper
gcc -> powerpc-unknown-linux-gnu-wrapper
powerpc-unknown-linux-gnu-c++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-g++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-gcc -> /usr/bin/distcc
powerpc-unknown-linux-gnu-wrapper
こんな風にしておいてやる。すると、実行コマンドがgccでコン...
**コンパイル母艦側
/etc/conf.d/distccdでコンパイルを受け付けるホストとかを適...
# /etc/init.d/distccd
でdistccデーモンを立ち上げておいてやります。
*パッケージコンパイルの準備
玄箱君のmake.confに
FEATURES="distcc"
MAKEOPTS="-j4"
など、適切に入れておいてやりましょう。おいちゃんちでは、x...
*コンパイルしてみよう
# emerge -uD world
でパッケージのコンパイルとかをすると、パッケージの展開、c...
対してコンパイル母艦側では、依頼されたコンパイルを裏でこ...
*さらなる活用法
組み込み開発を行ってる御仁は、オープンソースパッケージを...
終了行:
[[Gentoo Linuxな生活/サーバ設定関連]]
*説明の前に
**クロスコンパイルとは何ぞや??
そもそも、パソコンと言うのは、理解できる言語と言うのが限...
さて、ところでこのPentium4だの、PowerPCだのが理解できる言...
で、クロスとは、何がクロスするんじゃい?と。
あるCPUで動作する、別のCPUの言葉に変換するコンパイラの事...
**んなことして何がうれしいノン?
普通は、組み込み開発なんかで使います。例えば、新しいエア...
で、おいちゃんは何に使用するか。
玄箱はPowerPC。だけどこの玄箱君はPowerPC266MHzととっても...
*クロスコンパイル環境の準備
Gentooの場合はチョー簡単。
# emerge crossdev
と打つと、crossdevというツールをインストールしてくださり...
Usage: crossdev [options] --target TARGET
Options:
--b, --binutils ver Specify version of binutils to ...
--g, --gcc ver Specify version of gcc to use
--k, --kernel ver Specify version of kernel heade...
--l, --libc ver Specify version of libc to use
-C, --clean target Uninstall specified target
-b, -d, -p, -v, -q Options to pass to emerge (see ...
Stage Options:
-s0, --stage0 Build just binutils
-s1, --stage1 Also build a C compiler (no lib...
-s2, --stage2 Also build kernel headers
-s3, --stage3 Also build the C library (no C++)
-s4, --stage4 Also build a C++ compiler [defa...
Extra Fun (must be run after above stages):
--ex-only Skip the stage steps above
--ex-gcc Build extra gcc targets (gcj/ad...
--ex-gdb Build a cross gdb
Target (-t): takes the form: ARCH-VENDOR-OS-LIBC
Run 'crossdev -t help' for examples
どべべーっとヘルプが出てきます。このツールを使って作業し...
その前に、準備が必要。
**crossdevの為の準備
crossdevには、環境変数PORTAGE_OVERLAYが必要です。
仮に/usr/local/portageとしましょうか。ここに、クロスコン...
# cd /usr/local/portage
# mkdir cross-<CPU名>-<サフィックス>-<OS名>-<libcタイプ>
ここで、CPU名はi686とか、armとか。サフィックスは何でも良...
# mkdir cross-powerpc-unknown-linux-gnu
になりますです。さらにその配下にクロスコンパイルに必要なb...
# cd cross-powerpc-unknown-linux-gnu
# ln -s /usr/portage/sys-devel/binutils
# ln -s /usr/portage/sys-devel/gcc
# ln -s /usr/portage/sys-libs/glibc
# ln -s /usr/portage/sys-kernel/linux-headers
で、さらに/etc/make.confに
PORTDIR_OVERLAY="/usr/local/portage"
を追加してあげましょう。するってーと
# emerge cross-powerpc-unknown-linux-gnu/gcc
と打つと、PowerPCクロスコンパイラ用のgccがパッケージとし...
**crossdevを使ってみる
# crossdev --b <binutilsのバージョン> \
--g <gccのバージョン> \
--k <linuxheadersのバージョン>\
--l <glibcのバージョン> \
-t powerpc-unknown-linux-gnu
ここで、''各バージョンは、玄箱君が使用しているバージョン...
さらに、crossdevを実施していると、途中でエラー終了すると...
# cd /usr/powerpc-unknown-linux-gnu/
# ln -s . usr
とやっておきましょう。でもう一度crossdevを実施すると、ち...
*distccの設定
さて、玄箱君とクロスコンパイル母艦マシンにそれぞれdistcc...
# emerge distcc
**玄箱君側
で、玄箱君側で、他所のPCにコンパイルを依頼するように設定...
# distcc-config --set-hosts <コンパイル母艦のIPアドレス>
必要であれば、/etc/distcc/hostsを編集して、依頼するジョブ...
c++ -> /usr/bin/distcc
cc -> /usr/bin/distcc
g++ -> /usr/bin/distcc
gcc -> /usr/bin/distcc
powerpc-unknown-linux-gnu-c++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-g++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-gcc -> /usr/bin/distcc
こんな風にシンボリックリンクが張られます。これだと、distc...
#!/bin/bash
exec /usr/lib/distcc/bin/powerpc-unknown-linux-gnu-${0##...
こんな感じ。で、/usr/lib/distcc/binの中は
c++ -> powerpc-unknown-linux-gnu-wrapper
cc -> powerpc-unknown-linux-gnu-gcc
g++ -> powerpc-unknown-linux-gnu-wrapper
gcc -> powerpc-unknown-linux-gnu-wrapper
powerpc-unknown-linux-gnu-c++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-g++ -> /usr/bin/distcc
powerpc-unknown-linux-gnu-gcc -> /usr/bin/distcc
powerpc-unknown-linux-gnu-wrapper
こんな風にしておいてやる。すると、実行コマンドがgccでコン...
**コンパイル母艦側
/etc/conf.d/distccdでコンパイルを受け付けるホストとかを適...
# /etc/init.d/distccd
でdistccデーモンを立ち上げておいてやります。
*パッケージコンパイルの準備
玄箱君のmake.confに
FEATURES="distcc"
MAKEOPTS="-j4"
など、適切に入れておいてやりましょう。おいちゃんちでは、x...
*コンパイルしてみよう
# emerge -uD world
でパッケージのコンパイルとかをすると、パッケージの展開、c...
対してコンパイル母艦側では、依頼されたコンパイルを裏でこ...
*さらなる活用法
組み込み開発を行ってる御仁は、オープンソースパッケージを...
ページ名: