Ko-Window プログラミング、コンパイル環境編 ここでは開発に必要な環境を軽く説明します。すでに開発環境は整備されている、 という方は飛ばして下さって結構です。以下に最小限の環境を揃える手順を説明しま す。 ●開発に必要なものは? 最小の開発環境は以下の通りです。 X68000 本体 (10MHz以上 ..当然) 2Mbyte 以上の RAM 必要十分な HDD 容量 根性 根性のない方は 4Mbyte 以上に RAM 増設されることをお勧めします。もちろん本体 は X68030 でも構いません。X68030 の場合は、gcc に -m68000 オプションをつけて、 確実に 68000 用のオブジェクトが得られるようにしておいた方がいいでしょう。 その他に開発のためのソフトウエア一式が必要です。現在これはすべてフリーソフ トウエアとして入手できます。通信による入手手段を持たない方は、ソフトバンクの 書籍を利用するといいでしょう。 コンパイラは必ず gcc を使用して下さい。gcc には v1(gcc) と v2(gcc2) の2種 類があります。この両者は完全に別ものなので、どちらを使用してもかまいません。 ここでは gcc v1 (v1.29 Based on gcc v1.42) の X68K 版を使うものとして説明を 行います。 ライブラリは以下の3種類が使えます。 ・XC v1 付属のライブラリ (clib.a, doslib.a, iocslib.a) ・XC v2 付属のライブラリ (clib.l, doslib.l, iocslib.l, floatfnc.l) ・フリーのライブラリ libc (libc.a, libdos.a, libiocs.a) ● GCC の動作環境 (1) これら実行ファイルは PATH を通したディレクトリにコピーしておきます。 gcc.x GCC Programming Series 付属のもの gcc_cpp.x 〃 gcc_cc1.x 〃 has.x High-speed Assembler v3.09 hlk.x SILK Hi-Speed Linker v3.01 (2) 環境変数 GCC_AS と GCC_LK に、上記の has.x と hlk.x を置いたパス名を設定 します。 例 set GCC_AS=a:/bin/has.x set GCC_LINK=a:/bin/hlk.x (3) ライブラリについてくるヘッダファイルは、一ヶ所ディレクトリを作りそこに入 れます。そのパス名を環境変数 include にセットしておきます。 例 set include=a:/usr/include (4) ライブラリファイル(*.a や *.l)も、一ヶ所ディレクトリを作りそこに入れます。 そのパス名を環境変数 lib にセットしておきます。 例 set lib=a:/usr/lib (5) gcc と一緒に配布されているはずの gnulib.a も、上記 libファイルのディレク トリにコピーして下さい。(gnulib.l でも可) (6) アセンブラとリンカの環境変数を定義します。 例 set SILK=-x -l set HAS=-u -w (7) 必要に応じて環境変数 GCC_OPTION や環境変数 真里子 を定義します。 例 ほとんどの最適化をデフォルトでかける場合 set GCC_OPTION=LFIOAM (8) テンポラリディレクトリを設定します(すでに設定してあれば不用) COMMAND.X なら temp コマンドを用いる 例 temp d:/ (9) 使用するライブラリ毎の設定 ◎ XCv1-lib/XCv2-lib を使用する場合 (libcの場合はこの作業は不要) include ディレクトリに doscall.equ を作成します。 copy doscall.mac doscall.equ としたのち doscall.equ ファイル各行の先頭にある '_' をすべて削除して下さ い。もし万が一 doscall.equ ファイルの最後に「.include iocscall.mac」とい う行がついている場合は、その行を削除して下さい。 これで GCC の動作環境ができたはずです。XC v2 のライブラリの時は floatfnc.l をリンクするのを忘れないようにして下さい。 ● Ko のコンパイル環境 Ko-Window 関連の必要なファイルを install します。 wilb.h parts.h winop.h これら基本ライブラリのヘッダファイルを、環境変数 include に設定した ディレクトリにコピーします。 wlib.a parts.a winop.a これら基本ライブラリを、環境変数 lib に設定したディレクトリにコピー します。 他にもいくつか便利なライブラリが公開されているので、必要に応じて install します。corlib.a は頻繁に使われ、ほとんど基本ライブラリに近いので必ず install しておいて下さい。 corlib.a Console lib, Mg lib, Mg プッシュボタンlib 他 mtmlib.a ウィンドウstdioエミュレートライブラリ goelib.a スライドスイッチライブラリ cardlib.a dbserv 用のカードライブラリ dbslib.a dbserv 用ライブラリ ●コンパイル方法 gcc smpl.c -ldos -liocs parts.a winop.a -lcor -lw floatfnc.l -o smpl.win これは XCv2-lib で smpl.c をコンパイルし smpl.win を作る場合の例です。libc ならば gcc smpl.c -ldos -liocs -lparts -lwinop -lcor -lwin -o smpl.win とします。指定するライブラリは必要に応じて増減して下さい。 ●うまく動かない場合は ・メモリが無い GCC の動作にはだいたいフリーエリアが 1.5M くらいは必要です(場合によります)。 メインメモリが 2M しかない場合は、残念ながら Ko-Window 上からはコンパイルで きません。Ko-Window を終了したのち、GCC_OPTION に "GT" を追加してからコンパ イルを行って下さい。この場合 V-RAM から 768Kbyte のワークを確保しますので、 800K くらいの空き容量しなくてもコンパイルできるようになります。 なお、Ko-Window を起動している時は、V-RAM のメモリマップを変更して使用して いるため、この状態で GT オプションをつけたコンパイルは絶対に行わないで下さ い。 (注意: 大きなソースファイルはより多くのメモリを食います。徹底した分割コン パイルをお勧めします。分割コンパイルは、使用メモリ量を抑え、コンパイル 効率をあげ、かつデバッグもしやすくなります) ・あるはずのコマンドが実行できない あるはずのコマンドがない、gcc_cpp.x が起動できない、等のエラーに悩まされた 時は、config.sys の files= XX の数値を増やしてみて下さい。新たにファイルが オープンできずにコマンド実行ができなくなる、という場合が考えられます。 ・アセンブラで、ソースファイルが見つからないというエラーが発生する アセンブラ実行時に「XXXX.s 2: file not found error」のようなメッセージが出 ることがあります。このメッセージは非常に勘違いしやすく、XXXX.s が見つからな いのだと思って延々と悩み続ける場合が少なからずあるようです。正しくは XXXX.s の中の 2行目で include しているファイルが見つからない、という意味です。この エラーはおそらく doscall.equ の入れ忘れです。doscall.equ の存在を確認してみ て下さい。 ・I/O error とは? 一見とんでもないエラーが出たかのようで驚きますが、これはディスク容量がなく なった場合に出ることがあります。特にテンポラリのドライブの空き容量を十分確 保してみて下さい。 ・IOCS call 命令で必ず暴走する XC ライブラリで開発をしている時に、IOCSCALL を直接使って、例えば GPALET() 関数を使用するとその場所で必ず暴走する。 これは doscall.equ のインストールミスです。XC ライブラリをリンクしているに もかかわらず、libc についてきた doscall.equ を間違ってインストールしてしま うとこうなります。(XC の doscall.equ と libc の doscall.equ には互換性がな い) 直すには doscall.equ ファイルの最後についている ".include iocscall.mac" という行を削除して下さい。 ・スタックチェックに 100% 引っ掛かる? 起動するとスタックオーバーフローのエラーが出る時は、gcc でスタックチェック コードが ON になっていることが考えられます。Ko-Window アプリケーションでは スタックチェッカは使用できません。Makefile は GCC_OPTION にスタックチェッ クの指定がついている時は、必ず取り除いて下さい。 ●おまけ…複数の開発環境の共存について 筆者は、例えばこの開発セットをまとめるために XCv1-lib, XCv2-lib, libc の3 種類を必要に応じてすべて使い分けなければなりません。そのためこの3種類を同一 の環境内に共存させています。それについて多少説明してみたいと思います。(ちな みに XCv1, XCv2.0, XCv2.1NewKit, libc, libcII と、Vup含めてすべて買いました。 おかげで家にはC言語のマニュアルが全部で4セットあります) ライブラリディレクトリは、すべてのライブラリファイルが全部共存できます。 XCv1-lib *lib.a or *.a XCv2-lib *lib.l or *.l libc lib*.a のように、ファイル名が全部異なっています。ヘッダファイルは、ライブラリ毎にディ レクトリを変更します。こちらは共存もできなければ決して混在もしないで下さい。 それぞれにおいてヘッダファイル互換性は一切ありません。 使用するライブラリの切り替えは、環境変数で行います。まずヘッダファイルを環 境変数 include で切り替えます。 set include=使用するライブラリのヘッダディレクトリ 一見、ヘッダは gcc へ与える -I オプションだけで切り替えが済むような気がし ますが、このオプションは残念ながらアセンブラへは渡されません。つまりコンパイ ル時は -I で指定したディレクトリを見ますが、アセンブル時は環境変数 include のディレクトリを参照してしまいます。gnumake を使用していて、Makefile 中でラ イブラリを変更したい場合は次のようにするといいでしょう。 CC = gcc include=$(INCDIR) # include と = の間をあけないで下さい %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ ライブラリファイルの切り替えは、gcc の以下の環境変数で行います。 環境変数 | GCC_LIB | GCC_NO_XCLIB | デフォルトでリンクするライブラリ -----------+---------------+--------------+---------------------------------- | .aまたは未設定| 未設定 | clib.a , gnulib.a | .l | 未設定 | clib.l , gnulib.l | 未設定 | 設定 | libc.a , libgnu.a ただし Makefile 中では、上記のような複雑なことはしないで、リンカを直接起動し、 ライブラリファイルを直接与えた方がてっとり早いし間違いがありません。 --- 1994 9/01 1994 12/19 修正 1995 9/15 libc対応書き加え 小笠原博之 oga@dgw.yz.yamagata-u.ac.jp DenDenNET: DEN0006 COR.