---------------------------------------
      mips クロス開発環境 第二弾
---------------------------------------

■説明

　GNU C/C++ Compiler の mips (Rシリーズ汎用) 版を移植しました。ベー
スは2.7.2.3です。オリジナルとの主な違いは以下の通りです。

・ソフトウェア浮動小数演算ライブラリ呼び出し形式に、goFast 及び
　libgcc1 互換のものを選択できる

　もともとのツール自体が高い汎用性を持っているため、設定次第で様々な
環境で利用可能であると思われます。もちろん、PS-X (仮称)のアプリケー
ション開発等にも使用することができます。

　なお、他の PS-X (仮称)の開発環境で、同様に GNU C Compiler を利用し
ていると噂されているものとして、NY (仮名)がありますが、残念ながら本
プログラムとの完全な互換性はないかもしれません。

■導入

　以下のプログラム及びライブラリが存在します。最終的なバイナリを作成
するためには、このほかにアセンブラ(mipsas)及びリンカ(mipsld)が正常に
動作する環境が必要です。

---
mipsgcc		コンパイラドライバ	(C/C++)
mipsgxx		コンパイラドライバ	(C++)
mipscpp		プリプロセッサ		(C/C++)
mipscc1		コンパイラ本体		(C)
mipscc1x	コンパイラ本体		(C++)

libm.a		数学関数ライブラリ	(模造品)
libc.a		標準 C ライブラリ	(模造品)
libcc.a		標準 C++ ライブラリ	(模造品)
libgcc.a	GCC 補助ライブラリ
---

　各プログラムを PATH の通ったディレクトリに置き、ライブラリファイル
を適当な場所に移動した後、以下の環境変数を設定してください。

---
◆MIPS_TEMP			作業用ディレクトリ
　mipsgcc は、環境変数を MIPS_TEMP, tmp/TMP, temp/TEMP の順番に調べ
(Human68k/MS-DOS)、最初に見つけた環境変数の内容が示すディレクトリを
作業領域として使用します。指定内容が無効だったり、環境変数が見つから
なかった場合は、カレントディレクトリを作業領域とします。

◆MIPS_COMPILER_PATH		プログラム
　プログラムの収められているディレクトリを指定します。プログラムが 
PATH の通っていないディレクトリに格納されている場合などに指定すると
よいでしょう。

◆MIPS_LIBRARY_PATH		ライブラリ
　ライブラリファイル及び specs ファイルの収められているディレクトリ
を指定します。

◆MIPS_C_INCLUDE_PATH		インクルードファイル
　C 言語で使用するインクルードファイルの収められているディレクトリを
指定します。

◆MIPS_CPLUS_INCLUDE_PATH	インクルードファイル
　C++ 言語で使用するインクルードファイルの収められているディレクトリ
を指定します。
---

　使用方法の詳細については、マニュアルを参照してください。
　マニュアル類は、本家のホームページ上に HTML 形式のものがあるので、
そちらを参照してください。

	http://www.cygnus.com/pubs/gnupro/

　文字コードは ISO-8859-1(Latin1) なので、読み込んでヘッダを書き換え
ておくと便利です。

---
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
---

■コンパイラについて

　ターゲットとしては、ワンボードマイコンのような組込み用途を想定して
おり、現在のところ、いわゆる標準ライブラリに相当する部分は一切存在し
ません。このため、標準ライブラリを含めた、一般的に言うところの高級言
語である C/C++ 言語の環境とはまったく異なったものであると考えたほう
が良いと思います。(例えば、hello, world の類のプログラムはまったく動
作しません)

# C/C++ なんて所詮『高級アセンブラ』であると割り切って使いましょう。(笑)

　ディレクトリの区切り文字には、'/' 及び '\' の双方どちらでも使用す
ることができます。混在していても問題ありません。

　環境変数のうち、名称が *_PATH となっている変数には、パス名を ';' 
で区切って複数記述することが可能です。

　浮動小数点演算関連のオプションを以下に示します。

---
-mgofast	soft-float 時に goFast 互換ライブラリを使用します (default)
-mno-gofast	soft-float 時に libgcc1 互換ライブラリを使用します
-msoft-float	ソフトウェアによる浮動小数点演算コードを生成します (default)
-mhard-float	ハードウェアによる浮動小数点演算コードを生成します
---

　specs ファイルはなくても動作します。デフォルトの設定を変更したい場
合以外は特に用意する必要はありません。specs ファイルが必要な場合は、
以下のコマンドでベースとなるファイルを生成することができます。

---
	mipsgcc -dumpspecs > specs
---

　C++ から、アセンブラ/C で書かれた関数を扱う場合は、以下のように、
プロトタイプ宣言時に asm 文でラベル名を明示的に指定してください。

---
int FunctionName(int foo) asm("FunctionName");
int FunctionName(int foo){ 本体 }
---

■問題

「とにかく最終的なコードさえ出力できればよい」というかなり適当な方針
のため、一部機能が正常に動作しないなどの不具合が潜んでいるかもしれま
せん。なお、Human68k/Win32 版ともに、まだ修正を加えている段階であり、
設定方法等が今後大幅に変わる可能性もあるので注意が必要です。

・ほとんどの C++ 固有の拡張機能は正常に動作しません。
・一部の SJIS 漢字コードの混在した文字列は扱うことができません。
・libgcc1 関連はあまり意味がないようなので廃止するかもしれません。

■履歴

v2.7.2.3 初版 『いきなり動作終了(泣)』:
	・ようやくコンパイルが通って(ちょっとだけ)動いた版
	・汎用性が低いため公開せず

v2.7.2.3+α1 『某の開発環境より(以下略)』:
	・各種環境変数の名称を変更(MIPS_*)
	・mipsas/mipsld をデフォルトで起動するように変更
	・アセンブラに渡すソースファイルの作成方法を変更
	・余計なパスを検索しないように変更
	・標準設定を soft-float に変更
	・出力されるファイルの名称を *.x に変更
	・goFast 及び libgcc1 互換 soft-float を選択できるように拡張
	・goFast ライブラリから negate 処理を削除
	・double 関連演算未使用の場合のライブラリサイズを削減
	・複数の soft-float 形式が混在できるように拡張

v2.7.2.3+α2 『新高級アセンブラ』:
	・C++ コンパイラを追加
	・標準設定を -fconserve-space に変更
	・ライブラリのファイルサイズを削減

■開発

　現在、以下のようなライブラリが不足しています。とにかく、ないものは
皆で作るしかありません。

・各種環境用グラフィクス	(sp_regst, glBegin など)	製作怪調
・各種環境用サウンド		(pcmplay, bgmplay など)		挑戦者求む
・各種環境用I/O機器操作		(joyget, cdseek など)		挑戦者求む
・各種環境依存			(syscall, execvp など)		挑戦者求む
・ファイル入出力エミュレーション(open, close など)		挑戦者求む
・数学関数			(sin, sqrt など)		挑戦者求む
・その他標準的な関数		(sprintf, qsort, strcpy など)	製作怪調
				名前は適当です(笑)

　より効率の良いコードで構成された、soft-float 互換ライブラリのよう
なものも、あるといいですね。

■進捗

　某のコンパイラやライブラリ類に一切依存せずに、簡単な画面表示程度な
らできるようになったらしい…。(謎)

　あとはゲーム…がはっ(←吐血)…。

--
co
