crosstoolのログなんかを見ていてようやく理解してきた気がするけど、Linuxとかのパッケージをクロスコンパイルするときにconfigureの引数に--build、--host、--targetをどう指定したら良いのか、自分の中で整理がついてきたんじゃないかと思う。
たぶんこうだと思う。
引数 | 指定する内容 |
---|---|
--build | コンパイルPC |
--host | makeして作ったプログラムの実行環境 |
--target | クロス開発におけるターゲット環境 |
普通のコマンド類は「実行環境==ターゲット」だから
$> ./configure --prefix=/hoge/sysroot --build=i386-pc-linux-gnu --host=x86_64-unknown-linux-gnu --target=x86_64-unknown-linux-gnu
になると思う。*1
それで、クロスコンパイラみたいに「コンパイラPC上で実行するけど、最終的な成果物はターゲット」って特殊なやつは
$> ./configure --prefix=/hoge/compiler --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=x86_64-unknown-linux-gnu
って感じで「--build == --host」になるんじゃないかと思う。
んで、さらにややこしいのはglibcとかgdbserverみたいに「クロス開発関係の物体だけど実行環境がターゲット的」みたいなやつでこいつらは「--host == --target」じゃないかと思う。*2
そんなわけでこれは勘なんだけど、クロスコンパイラを使ってコンパイラをクロスコンパイルする*3ときは
$> ./configure --prefix=/hoge/sysroot --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target==x86_64-unknown-linux-gnu
でいけないかな?無理かな?
てか、configure のヘルプ(--helpで表示される奴)が分かりにくいんだよね。この英語を見て--build、--host、--targetに何を指定すべきかわかる人は、相当英語に精通してると思う。
System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST]
ちなみにこのあたりの事情が分かってからグーグル先生に「configure build コンパイル host 実行 target ターゲット」って聞いてみたら以下のナイスなサイトが引っ掛かりました。
http://www.jsk.t.u-tokyo.ac.jp/~k-okada/soft-ensyu/gcc.html
最後の方の「用語集」ってあたりに解説が…
散々ググっても見つからなかったのに知識がついてから、知識をもとに検索したら見つかるとか…orz