仕切り直し - Mona OS で ゴー?
適当にやっていたら収拾がつかなくなったのでリセット。
方針
できるだけ GO には手を入れずにがんばる。
toolstdc をビルドする
まずは ReadMe にある通り toolstdc (golib00.exe sjisconv.exe gas2nask.exe nask.exe naskcnv0.exe)をビルドする。
これらのツールは Host 側で動くものなので Linux/Cygwin で動くような配慮が必要。(これはMonaの事情)
さて説明通り include/rules.gcc をベースに設定ファイル include/rules.host.mak を作る。
ターゲット依存部に書かれている Makefile を makefile にしておかないとはまるので注意。
GCC = gcc MAKE = make LIBRARIAN = golib00.exe DEL = rm -f MAKER = $(MAKE) -r MAKEC = $(MAKE) -C COMPILE = $(GCC) -c -Os LINK = $(GCC) -Wl,-s LINK_ADDLIB = GODRV = ../drv_stdc/drv_stdc.obj GODRVDIR = ../drv_stdc LINKOPT_CPP0 = LINKOPT_CC1 = LINKOPT_CC1P = %.o : %.c makefile ../include/rules.mak $(COMPILE) -DIN_GCC -DHAVE_CONFIG_H -I../include -o $*.o $*.c %.obj : %.c makefile ../include/rules.mak $(COMPILE) -o $*.obj $*.c
次に toolstdc/makefile, nasklib/makefile 内の Makefile -> makefile と書き換える。(さっそく手を入れてしまった)
ではビルド
(cp include/rules.host.mak include/rules.mak && cd toolstdc && make) ... 略 ... gcc -c -Os -DIN_GCC -DHAVE_CONFIG_H -I../include -o ll.o ll.c gcc -c -Os -DIN_GCC -DHAVE_CONFIG_H -I../include -o ll_lib.o ll_lib.c gcc -c -Os -DIN_GCC -DHAVE_CONFIG_H -I../include -o nask.o nask.c ../toolstdc/golib00.exe out:nasklib.lib ll.o ll_lib.o nask.o unknown file type: ll.o
怒られてしまいました。嫌な予感がする。
COFF 前提でした。(了)
回避案は3つ
- golib00 を ELF 対応
- golib00 を ar で代替できるか試す
- golib00 を wine で動かす
3つ目が楽そう。
toolstdc をビルドする その2
rules.host.mak を書き直す。
基本的には Mingw の gcc を使えば良い。
cygwin 環境の人もいると思うので Mona のビルド時の configure 結果を利用する。
rules.host.mak 。
ifndef $(MONADIR) export MONADIR=$(shell cd $(PWD)/../../../../../mona; pwd) endif SHAREDIR = $(MONADIR)/share include $(SHAREDIR)/configs/Makefile.inc GCC = $(CC) MAKE = make LIBRARIAN = wine ../toolstdc/golib00.exe DEL = rm -f MAKER = $(MAKE) -r MAKEC = $(MAKE) -C COMPILE = $(GCC) -c -Os LINK = $(GCC) -Wl,-s LINK_ADDLIB = GODRV = ../drv_stdc/drv_stdc.obj GODRVDIR = ../drv_stdc LINKOPT_CPP0 = LINKOPT_CC1 = LINKOPT_CC1P = %.o : %.c makefile ../include/rules.mak $(COMPILE) -DIN_GCC -DHAVE_CONFIG_H -I../include -o $*.o $*.c %.obj : %.c makefile ../include/rules.mak $(COMPILE) -o $*.obj $*.c
ポイントは $(CC) を利用する部分と、wine で golib00.exe を動かしている部分。
レッツビルド。
(cp include/rules.host.mak include/rules.mak && cd toolstdc && make) ... /usr/bin/i586-mingw32msvc-gcc -c -Os -DIN_GCC -DHAVE_CONFIG_H -I../include -o malloc.o malloc.c malloc.c:3:20: GO_lib.h: No such file or directory malloc.c:7: error: syntax error before "size"
ちゃんとクロスコンパイラが使われていることが分かる。
出ているエラーは大文字小文字問題。
go_lib/malloc.c, realloc.c で GO_lib.h を go_lib.h に直す。
ついでに go_lib/makefile で Makefile -> makefile と修正。
無事 toolstdc がビルドできました。
% ls -la toolstdc 合計 133 drwxr-xr-x 2 taro taro 432 2007-12-26 00:42 . drwx------ 20 taro taro 632 2007-12-26 00:03 .. -rw-r--r-- 1 taro taro 3118 2003-11-12 00:51 gas2nask.c -rwxr-xr-x 1 taro taro 15872 2007-12-26 00:42 gas2nask.exe -rw-r--r-- 1 taro taro 2000 2003-11-12 00:51 golib00.c -rwxr-xr-x 1 taro taro 9216 2007-12-26 00:42 golib00.exe -rw-r--r-- 1 taro taro 597 2007-12-26 00:11 makefile -rw-r--r-- 1 taro taro 1840 2003-11-10 21:53 nask.c -rwxr-xr-x 1 taro taro 50176 2007-12-26 00:42 nask.exe -rw-r--r-- 1 taro taro 3459 2007-12-26 00:42 nask.obj -rw-r--r-- 1 taro taro 2539 2003-11-10 22:03 naskcnv0.c -rwxr-xr-x 1 taro taro 8192 2007-12-26 00:42 naskcnv0.exe -rw-r--r-- 1 taro taro 4404 2007-12-26 00:42 naskcnv0.obj -rw-r--r-- 1 taro taro 1823 2003-11-10 21:43 sjisconv.c -rwxr-xr-x 1 taro taro 6144 2007-12-26 00:42 sjisconv.exe