雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
  • ソース を表示
  • FreeBSDではりぼて!/ちと実験 は削除されています。
4: 2007-02-12 (月) 17:34:44 ソース バックアップ No.4 を復元して編集 現: 1970-01-01 (木) 18:00:00 ソース 編集
Line 1: Line 1:
-ちと実験を行う。 
-・・・いや、実はね。新しいGOがぜんぜんコンパイルできないのよ・・・(泣 
- 
-で!!! 
- 
-どっかのマニュアルで、Kタンが「GOはそもそもGOでコンパイルすることしか考慮してないので」みたいなこと書いてあった。 
- 
-ん?GOをGOでコンパイル???? 
- 
-なるほど!。オイラが昔作ってまとめたgoset-006。あれはたしか、FreeBSD上でもソースからコンパイルできたはず。 
- 
-つまり、 
- 
- gcc3.4 -> tolset -> だめ〜! 
- 
- gcc3.4 -> goset-006 -> tolset 
- 
-これならダメじゃろうか??? と。こう考えたわけです。 
- 
- 
-*goset-006 [#b0a1261b] 
--まず、goset-006が現在のFreeBSD5.5でコンパイルできるかどうかです。 
--まず、ウチのサイトであるhttp://www2.hideyosi.com/~hideyosi/age/goset/goset006_src.tar.gz からgosetのソースをゲット〜。(なつかし〜) 
--メイク・・・うほ!エラーー! 
--あー。なる。まず、goset006_src直下にあるMakefile内。makeをgmakeに。同じく、goset006/go_0020/includeにあるrules.mak内のmakeもgmakeに調整。 
--メイク。順調に進んで・・・うほ!エラー!。 
- module.h:39: error: ISO C++ forbids cast to non-reference type used as lvalue 
--これはaskaでのエラー。どうも型キャストが厳密になったようで、そのエラー。 
--なので、askaディレクトリ内のmodule.hの39行目を以下に修正。 
- void    Release(void){ DELETEPTR_SAFE((unsigned char*)lpMdlAdr); dwMdlSize=0; lpMdlPos=NULL; } 
-                 ↓ 
- void    Release(void){ DELETEPTR_SAFE(lpMdlAdr); dwMdlSize=0; lpMdlPos=NULL; } 
- 
--よーし。これでaskaはOK〜。 
--お?なぜかobj2bim3がひっかかるぞ? 
- obj2bim3.c: In function `main0': 
- obj2bim3.c:120: warning: assignment discards qualifiers from pointer target type 
- obj2bim3.c:131: warning: assignment discards qualifiers from pointer target type 
- obj2bim3.c:284: warning: assignment discards qualifiers from pointer target type 
- obj2bim3.c: In function `symbolconv0': 
- obj2bim3.c:973: error: label at end of compound statement 
- *** Error code 1 
- 
--えーっと。obj2bim3.cの973行目。 
- 
- next_label: 
-         } 
-         label->type = 0x00; 
-         label->name_obj = obj; 
-           ↓ 
- next_label: 
- ;      } 
-         label->type = 0x00; 
-         label->name_obj = obj; 
- 
--これで解決〜。 
- 
--えーっと。以上で、とりあえずコンパイルはOKかな??? 
- 
--賛否あるが、オイラはやっぱし、このgoset(okディレクトリ)をそのまんま、/usr/local/goset006 として移動。 
- 
--さて、これで準備完了かな〜?? 
- 
-*tolsetのコンパイル [#f894fa46] 
-さーて。いよいよ本題。この作り直したgosetでtolsetをコンパイルできるか!? 
--まず、go_0023/gccに降りる。 
--ここでemacs ../include/rules.mak とやって、rules.makを編集。 
--先頭のGOPATHを、/usr/local/go0006/ とする。 
--MAKEはgmakeに変更。 
--・・・マンドクサイ。以下に。 
- CPP0 = $(GOPATH)gocpp0 
- CC1 = $(GOPATH)gocc1 
- 
- MAKE = gmake 
- GAS2NASK = $(GOPATH)gas2nask 
- NASK = $(GOPATH)nask 
- LIBRARIAN = $(GOPATH)golib00 
- #LD = $(GOPATH)ld.exe 
- DEL = rm -f 
- 
- ASKA = $(GOPATH)aska 
- NASKCNV = $(GOPATH)naskcnv0 
- 
--さてこれでgmake! 
--しかしエラー。いくつかのソース内で、../include/go_lib.h を GO_lib.hと書いてあった。これがひっかかっているみたい。 
--以下3つのソースで該当部分を go_lib.h に修正しましょー。 
---../include/math.h の3行目 
---../go_lib/malloc.c の3行目 
---../go_lib/realloc.c の3行目 
---../go_lib/symalloc.c の3行目 
--よーし。どんどんmakeが進んでる〜。・・・あれ? 
-                             : 
- gmake[2]: Leaving directory `/usr/home/lina/tolset/go_0023s/go_lib' 
- gmake -C ../drv_w32 
- gmake[2]: Entering directory `/usr/home/lina/tolset/go_0023s/drv_w32' 
- gmake -r cpp0main.obj cc1main.obj cc1pmain.obj drv_w32.obj 
-                             : 
--はっはぁ。標準のrules.makはWin32用のものだったのか。ええと、std版をコンパイルするようにするには・・・ 
--ええと、rules.makのGODRVの部分を書き換えればいいのかな???(rules.gccに習った) 
- GODRV = ../drv_w32/drv_w32.obj 
- GODRVDIR = ../drv_w32 
- LINKOPT_CPP0 = --stack 0x1a00000 
- LINKOPT_CC1  = --stack 0x3600000 
- LINKOPT_CC1P = --stack 0x3600000 
-        ↓ 
- GODRV = ../drv_stdc/drv_stdc.obj 
- GODRVDIR = ../drv_stdc 
- LINKOPT_CPP0 = 
- LINKOPT_CC1  = 
- LINKOPT_CC1P = 
- 
--うーむ。またもやエラー。 
-             : 
- /usr/local/goset006/gocc1 -include ../include/gccdef.h -I../include -Os -quiet -o cpp0main.s cpp0main.c 
- In file included from cpp0main.c:8: 
- cc1drv.c:3: redefinition of `UCHAR' 
- ../include/go_lib.h:10: `UCHAR' previously declared here 
- gmake[3]: *** [cpp0main.s] Error 1 
-             : 
--うーむ。 redefinition of `UCHAR' ってのは、「UCHAR が再定義されているぞ!」というようなエラー。(・・・のはず。たぶん・・・) 
--さらにその後の行を見ると、これはたぶん、「go_lib.hの10行目。ここで前もって宣言されてるよ!」というような意味だと思われ。どれどれ。チェック・・・ 
--ほんとだ〜。go_lib.h内で、ほぼ同じように宣言されてるじゃん。どうしようかな・・・ 
--とりあえず、../drv_stdc/cc1drv.c の3行目をコメントアウト。 
--ありゃりゃ? ../drv_stdc/drv_stdc.c の4行目もだ。同じくコメントアウト。 
--うーむ。またエラーだが、これも内容は同じだね。 
-                   : 
- ../funcs/cc1sub.c:6: redefinition of `struct GOL_STR_FILE' 
- ../funcs/cc1sub.c:11: redefinition of `GOL_FILE' 
- ../include/go_lib.h:33: `GOL_FILE' previously declared here 
-                   : 
--../funcs/cc1sub.c: の11行目をコメントアウト。・・・かと思ったら・・・ 
- 
- typedef struct GOL_STR_FILE { 
-         unsigned int size; 
-         UCHAR *p0; 
-         unsigned int linkcount; 
-         void *p_sys; 
- } GOL_FILE; 
--・・・なんだこれ??? GOL_FILEがえらく妙な位置にない?これ?? 
--うーん。どういうことだろう?これ??? GOL_FILEを削除ってことでいいのかなぁ・・・(自信ないがとりあえず・・・) 
--いやちょっとまて! もういちど ../include/go_lib.h を見直したら、ここにすごくよく似ているけどちょっとだけ違う状態ですでに定義されているぞ!? 
- cc1sub.c の6行目                  |  go_lib.hの28行目 
-                                   | 
- typedef struct GOL_STR_FILE {    |  typedef struct GOL_STR_FILE { 
-       unsigned int size;        |        UINT size; 
-       UCHAR *p0;                |        UCHAR *p0; 
-       unsigned int linkcount;  |       UINT linkcount; 
-       void *p_sys;        |       void *p_sys; 
- } GOL_FILE;            | } GOL_FILE; 
- 
--う〜〜〜〜〜ん!! とりあえず、cc1sub.cのほうを全部コメントアウトして進めてみよう・・・ 
- 
--さらにエラー。でも、これも前回とパターンは同じ。 
- drv_stdc.c:6: redefinition of `struct GO_STR_FILE' 
- drv_stdc.c:9: redefinition of `GO_FILE' 
- ../include/stdio.h:17: `GO_FILE' previously declared here 
- gmake[3]: *** [drv_stdc.s] Error 1 
- 
--ここもとりあえず、dev_stdc.c のほうの宣言をコメントアウトして進める・・・ 
- 
--さーーーて! 多分大詰め。リンクでエラーが出ている。 
- 
-                           : 
- ld -s -Bdynamic -o cpp0.exe  ../drv_stdc/cpp0main.obj cppmain.o intl.o \ 
-                 libcpp.lib hashtable.o version.o ../intl/libintl.lib \ 
-                 ../libiberty/libiberty.lib ../go_lib/go_lib.lib \ 
-                 ../go_lib/stdin.o  ../drv_stdc/drv_stdc.obj ../libmingw.lib 
- ../drv_stdc/cpp0main.obj: file not recognized: File format not recognized 
- gmake[1]: *** [cpp0.exe] Error 1 
-                           : 
--出来上がっている ../drv_stdc/cpp0main.objを調べて見ると・・・ 
- $ file ../drv_stdc/cpp0main.obj 
- ../drv_stdc/cpp0main.obj: MS Windows COFF Intel 80386 object file 
--ふーむ。WinCOFFタイプのオブジェクトになっている。