[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pbsd-mg2] cross compile environment



クロスコンパイル環境の話なのでサブジェクトを変えました。

Takao Shinohara <shin@sm.sony.co.jp> writes:
> ところで、ようやくNetBSD 1.4(i386)のホストマシンで、カーネルだけでなく
> user landも作成できるようになりました。CVSのソースそのままではいくつか問
> 題があるので、修正する必要があります。

私が上記のように「修正する必要がある」と書いた修正内容は、だいたい以下の
ように分類できます。

    1. クロスコンパイル環境に対する配慮が足りないもの
	主としてMakefileですが、変数を参照せずに直接nm等を起動しているも
	のもありました。currentはチェックしていないので、修正済のものも
	あるかもしれません。${DESTDIR}のライブラリをリンクするためのオプ
	ションが足りないものもありました。
    2. NetBSD/hpcmips固有の環境に対応するためのもの
	soft-float関係です。soft-float関係のライブラリ(libgcc.aに入るも
	の)がmakeされないとか、gccのTARGET_DEFAULTを-msoft-floatにすると
	いう類の修正です。
    3. クロスコンパイル環境そのものの修正
	CPPで-D__GNUC__をdefineしておかないとmake dependでエラーになった
	り、リンクできないlibc.aができたりします。また、make install時に
	STRIPではなく、STRIPPROGを参照するコマンド(strip)もありました。
	当然、-msoft-floatも必要です。
    4. その他修正
	lintライブラリ作成時にエラーになるソースの修正などです。

バイナリキットを作成するというようなリリース作業は、間違いを犯さないため
に、極力自動化すべきであると私は考えます。したがって、make一発でできるの
が理想で、そうできるようにbuild環境を整えるのは大変重要です。

自動化できることは自動化して余計な手間を省き、ストレスなく開発できるよう
にしないと、今後の開発効率に大きく影響すると思います。少なくとも、私は快
適に作業できるような環境を作れないとその先の作業をする気になれません。

具体例で言うと、私の環境では、再速のマシン(K6-III 450MHz)でカーネルをコ
ンパイルすると4分程度で作れますが、MC-R700(VR4121 131MHz)でdisklessでカー
ネルをコンパイルすると、約1時間かかります。15倍の差があるわけです。

userlandのmake buildだと、だいたい1.5時間程度かかるので、nativeでbuildす
ると、丸一日くらいはかかる計算になります。

こうした性能差を考えると、日常の開発作業はクロスコンパイル環境でやらない
と、とてもやる気になれません。したがって、クロスコンパイル環境で快適に
(make 一発で)作業できるようにソースを修正するのは(少なくとも私にとっては)
必須のことです。

クロスコンパイル環境のための修正内容も、

	変数を参照するようにする
	必要があれば条件分岐で動作を変える

といったものであればセルフ環境の邪魔にはならないので、共通のソースツリー
に反映するのは全く問題はないと考えます。しかも、もともと配慮はなされてい
るので、簡単な修正がほとんどです。

とにかく、クロス環境を整えるとみんなが幸せになれると信じていますので、ど
んどん修正すべきだと思いますが、いかがでしょうか?

* * * * *

ところで、セルフ環境でのbuildは、品質評価のためにはやるべきであると思い
ます。OSのbuildくらい問題なく実行できるようでないととても実用的に使える
とは思えませんので。

PC CardのSCSI I/Fを入手して、セルフでbuildするテストは今週末にでもやるつ
もりです。(disklessでは効率が悪いうえ、Ethernet I/Fの問題等で余計な苦労
をしそうなので、SCSIでHDDを接続してやろうと思っています。)

篠原