gdc のクロスでも作るかいや…

ターゲットは i386-freebsd4 。どこぞで FreeBSD のヘッダなりライブラリが入手できたり、簡単なコマンドが実行できることが前提になっちゃってますが…

binutils

./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 で終了。

記憶違いや、正準でないやり方などが含まれてるかもしれず。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h