[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
cross make
鈴木(康)です。
linux(turbo linux) で NetBSD-current のクロス make 環境を作ってみました。
カーネル make までは割と気持ち良くできたんですが、lib とか sbin とかに
来て いろいろ面倒なことがわかり、挫折しました。
やっぱり、クロス環境は、NetBSD のそれも近いバージョンでないと
たいへんそうです。
以下、レポート
クロス用に作ったコマンドとコメント
addr2line cc config host_gcc lorder objdump strings yacc
ar cc1 cpp install make ranlib strip
as cc1plus g++ ld mkdep rpcgen test
c++filt collect2 gcc lex nm size tsort
install:
linux で GNU install が入っていたので安心していたんですが、
-r オプションが使えない ことがわかり、結構困りました。
install は OS にバリバリ依存しているんで、make も 相当面倒そう。
とりあえず先に進めるために、-r を取る wrapper shell script でしのぎ
ました。
test:
これもたぶん、NetBSD 依存のオプション使っていると思いますが、
あまり考えずに作っています。
tsort:
クロスの libbfd を作るときに既にはまりました。
linux でも tsort あるんですが、動きが違う?
yacc,lex:
これもまあ、あまり考えずに入れています。
bison,flex は代用できないかも。
mkdep:
一応カーネル make で使うんで、作ることにしました。
rpcgen:
librpcsvc を作るとき エラーになりました。
当然かも知れませんが、linux と NetBSD では仕様が違うんですね。
lorder:
nm のフォーマット依存なんですが、同じ elf だと 何も考えないで
使えました。例えば FreeBSD-2.2.8 の a.out の環境だと nm のフォーマットが
違うので、要注意。
その他の問題。
libc の make :
nslexer.c を nslexer.l から作りますが、
なぜか次のようになってしまいます。
lex -P_nsyy -o/dev/stdout /home/suz/hpcmips/src/lib/libc/net/nslexer.l \
| sed -e '/YY_BUF_SIZE/s/16384/1024/' >nslexer.c
lex: could not create /dev/stdout
エラー出ても 気が付かないで先に進んでしまって、_nsyy_xx のシンボルが
ない libc が出来てしまいます。
bin/sh/mknodes.c :
はまったという程ではないんですが、
linux では、
static FILE *infp = stdin;
がエラーになりました。linux では、stdin は
((_IO_FILE*)(&_IO_2_1_stdin_))
こんな風に define されているみたいです。
関数の戻り値?
bin/ksh
sys/cdefs.h の
#error "No function renaming possible"
に引っかかってしまいます。
cpp を直接動かしているんで、
siglist.out: config.h sh.h siglist.in siglist.sh
sh $(.CURDIR)/siglist.sh "$(CPP) ....
に明示的に -D__GNUC__ を入れた方が良いような気がするんですが...
# それとも cpp をちゃんと作れていないのかな?
usr.bin/vgrind:
cap_mkdb -f vgrindefs.src /home/suz/hpcmips/src/usr.bin/vgrind/vgrindefs.src
こんな風に cap_mkdb を動かそうとします。
やっぱり xxx_mkdb は、インストール後にした方が良いんじゃないでしょか。
usr.bin/file
MAGDIRF:sh= echo $(.CURDIR)/magdir/[0-9a-z]*
という Makefile の記述ですが、CVS があると
magic: $(MAGFILES)
cat $(MAGFILES) > $(.TARGET)
の cat で CVS を cat しようとします。
以上、役に立つような立たないようなレポートでした。
------------------------
ところで、カーネル make の時間なんですが、早いマシンはすごいですね。
Xeon 733Mhz という CPU で make したら、GENERIC の make が
real 2m51.318s
user 2m30.350s
sys 0m10.690s
こんな感じです。
nfs な環境で gcc を rsh できると幸せになれそうですが、
設定が難しそうなので、せめて cc1 だけでも rsh できないかなと
思いました。
たとえば、/usr/libexec/cc1 を
rsh host /usr/local/mipsel-netbsd/..../cc1 $*
とかしておいて、
cc に -pipe をつけるようにすれば、とりあえず cc1 だけは他のマシンを
使うことができそうです。
とりあえず、ng を make してみたんですが、
rsh cc1 :
real 1m30.805s
user 0m37.331s
sys 0m31.550s
local cc1:
real 5m1.672s
user 3m39.321s
sys 1m5.187s
これだけでも 結構しあわせかも。
--
鈴木 康司 @NECソリューションズ
suz@hpc.bs1.fc.nec.co.jp
TEL 042-333-6465