ターゲットは i386-freebsd4 。どこぞで FreeBSD のヘッダなりライブラリが入手できたり、簡単なコマンドが実行できることが前提になっちゃってますが…
./configure --prefix=/usr/local/freebsd --target=i386-freebsd4 --host=i386-redhat-linux
/usr/include を拾ってきて /usr/local/freebsd/i386-freebsd4/sys-include に入れる。 /usr/lib/*.o /usr/lib/libc.* /usr/lib/libc_r.* /usr/lib/libm.* あたりを /usr/local/freebsd/i386-freebsd4/lib に入れる。
gcc 本体
./configure --prefix=/usr/local/freebsd --target=i386-freebsd4 --host=i386-redhat-linux --enable-languages=c,c++,d --disable-nls
libstdc++ が make でコケたけど別にいらないからとりあえず cd gcc; make; sudo make install 。
あと make install が sed -e がどうのこうのって場所でとまるので echo ranlib | sed -e $$t とか書いてあるような行を i386-freebsd4-ranlib とかに変更。
それと libgcc.mk の頭に RANLIB_FOR_TARGET=i386-freebsd4-ranlib を追加。
最後に phobos 。
とりあえず、
CC="i386-freebsd4-gcc" DMD="i386-freebsd4-gdc" DFLAGS="-O2 -frelease" ../../gcc/d/phobos/configure --prefix=/usr/local/freebsd --target=i386-freebsd4
したら boehm-gc の configure が通らなかったので、 boehm-gc は手動で configure しておいて、 gcc/d/phobos/configure.in の AC_CONFIG_SUBDIRS([$d_config_subdirs]) を削除して autoconf 。んでもう一度 phobos の configure 。
i386-freebsd4-gcc -o config/gen_unix.o -g -O2 -DPHOBOS_USE_PTHREADS=1 -DHAVE_CONFIG_H -I etc/c/stlsoft -I . -c ../../gcc/d/phobos/config/gen_unix.c i386-freebsd4-gcc -o gen_unix config/gen_unix.o i386-freebsd4-gcc -o config/gen_config1.o -g -O2 -DPHOBOS_USE_PTHREADS=1 -DHAVE_CONFIG_H -I etc/c/stlsoft -I . -c ../../gcc/d/phobos/config/gen_config1.c i386-freebsd4-gcc -o gen_config1 config/gen_config1.o
などとして gen_unix と gen_config1 を生成。サーバ上で実行して、結果を frag-unix, frag-gen としておく。 frag-math は C99 のヘッダが見当らなかったけど、
extern(C) { enum { FP_NAN = 0, FP_INFINITE = 1, FP_ZERO = 2, FP_SUBNORMAL = 3, FP_NORMAL = 4, } }
で多分 OK 。なんかどこにも fpclassify が定義されてない気がして不吉なんだけどまあいいや。
あとは touch とか適当にして frag-* が再生成されないように気をつけつつ make で終了。
記憶違いや、正準でないやり方などが含まれてるかもしれず。