#
#	clip.mk - P/ECE用Makefileの雛形(共通部分)
#
#	* Tue Dec  4 04:41:51 JST 2001 Naoyuki Sawa
#	- 作成開始。
#	* Sat May 25 15:43:00 JST 2002 Naoyuki Sawa
#	- ライブラリ構築用に特化したバージョンを作成。
#	- アプリケーション構築用に特化したバージョンを作成。
#	* Tue Jul  2 12:55:00 JST 2002 Naoyuki Sawa
#	- 自作ツールのマクロ定義を追加。
#	- lib,srf,pexの出力ファイル名を$@で指定。
#	- DEBUGシンボル定義時は、CFLAGSだけでなくLDFLAGSにも-gを追加。
#	  -gを指定しないと、リンク時にデバッグ情報が削除されてしまう。
#	* Sat Jul 20 21:16:00 JST 2002 Naoyuki Sawa
#	- データコンバート用の記述を追加しました。
#	* Mon Jul 22 21:10:00 JST 2002 Naoyuki Sawa
#	- データコンバート用の記述にdppcmcnvを追加しました。
#	* Mon Jul 23 04:25:00 JST 2002 Naoyuki Sawa
#	- これまでライブラリ構築用とアプリケーション構築用のMakefileを
#	  別々に管理していましたが、共通部分をclip.mkに分離し、
#	  異なる部分だけをそれぞれのMakefileに残すようにしました。
#	* Sat Oct 12 16:42:00 JST 2002 Naoyuki Sawa
#	- CFLAGSから-Werrorを外しました。
#	* Sun Nov 10 19:01:00 JST 2002 Naoyuki Sawa
#	- アプリケーション毎のMakefileでSTACKLENが定義されていたら、
#	  シンボル_stacklenを設定して、スタックをSRAM上に取るようにしました。
#	  STACKLENが定義されていなければ、これまで通りスタックは高速RAMに取られます。
#	* Mon Nov 18 03:30:00 JST 2002 Naoyuki Sawa
#	- データコンバート用の記述にbin2cを追加しました。
#	  bin2c.exeは自作プログラムではありません。
#	  終了ステータスが間違っていて、常に失敗を返すようですが、
#	  ソースがなく修正できないので、終了ステータスを無視することにしました。
#	- 「.mod.c:」の生成規則を追加しました。
#	* Tue Nov 19 12:30:00 JST 2002 Naoyuki Sawa
#	- $(AS)へのフラグを、$(ASFLAGS)から$(CFLAGS)に統一しました。
#	  $(ASFLAGS)を特別に指定することはあまりないので、廃止しました。
#	* Sun Jan  5 20:37:00 JST 2003 Naoyuki Sawa
#	- ツールマクロにMINIZIP,MINIUNZを追加しました。
#	* Wed Jan 29 07:09:00 JST 2003 Naoyuki Sawa
#	- 「.ppd.c:」「.pmd.c:」の生成規則を追加しました。
#	  wavやmmlファイルがなく、直接にppdやpmdで存在するデータを利用するためです。
#	* Tue Apr 1 19:00:00 JST 2003 Naoyuki Sawa
#	- 高速RAMの空きエリア先頭アドレス FRAM_ADDR の定義を追加しました。
#	* Sun Sep 15 15:33:00 JST 2003 Naoyuki Sawa
#	- S1C33用GCC3.xコンパイラドライバ(c33-pcc.exe)を使うために、マクロPCC33を定義しました。
#	* Sat Nov 22 06:00:00 JST 2003 Naoyuki Sawa
#	- トレース出力のON/OFFを選択する他の、-DTRACE_ON=?設定を追加しました。
#	  トレース出力のON/OFFは、アプリケーション毎MakefileのTRACEマクロ定義に従います。
#	* Sun May 23 10:02:00 JST 2004 Naoyuki Sawa
#	- ADPCM可変周波数を16000[Hz]以外に変更するための、ADPCM_Vマクロを用意しました。
#	  ADPCM_Vマクロが定義されていると、指定周波数のクォリティでADPCMデータを作成します。
#	  (音質の変化のみです。音が高くなったり低くなったりするのではありません。)
#	  ADPCM_Vマクロが定義されていなければ、これまで通り16000[Hz]のADPCMデータを作成します。
#	* Thu May 27 19:00:00 JST 2004 Naoyuki Sawa
#	- バイナリ=>C言語配列ツールを、bin2c.exeから、自作のdbin2c.exeへ変更しました。
#	  bin2c.exeは配列データ本体しか出力しませんが、dbin2c.exeは配列宣言も出力します。
#	  これまではbin2c.exeにて生成したファイルをmain.c等にインクルードして使っていましたが、
#	  今回の変更により、dbin2c.exeの出力ファイルを単体でコンパイルできるようになりました。
#	- 上述の変更に伴い、BIN2Cマクロを削除しました。
#	  また、*.ppd、*.pmd、*.modから*.cへの変換規則を変更しました。
#	* Sat Jul 26 06:10:00 JST 2004 Naoyuki Sawa
#	- ツールマクロにLHAを追加しました。
#	  toolフォルダ内の自作ツールではなく、一般に配布されているlha.exeを利用します。
#	  パスの通ったフォルダ内にlha.exeを配置しておいてください。
#	* Fri Sep 3 19:00:00 JST 2004 Naoyuki Sawa
#	- 自作ツールの詳細メッセージ出力を抑制するための、QUIETシンボルを追加しました。
#	  アプリケーションのMakefileにてQUIETシンボルを定義すると、詳細メッセージ出力を抑制します。　
#	  QUIETシンボルを定義しなければ、これまでどおり詳細メッセージを出力します。
#	* Tue Nov 23 06:59:00 JST 2004 Naoyuki Sawa
#	- 「.s3m.c:」の生成規則を追加しました。
#	* Mon Dec 27 12:13:00 JST 2004 Naoyuki Sawa
#	- スタックレイアウトの大幅な変更を行いました。
#	* Wed Jun 01 20:49:00 JST 2005 Naoyuki Sawa
#	- clip.libとfram.libの分離に伴い、高速RAM配置モジュールの抽出元をfram.libに変更しました。
#	* Wed Feb 22 00:00:00 JST 2006 Naoyuki Sawa
#	- CFLAGSに"-I$(CLIP) -I$(CLIP)\include -b"を追加しました。
#	- "-I$(CLIP)"と"-b"は、これまで、プロジェクト個別のMakefileの中で、APP_CFLAGSにて指定していましたが、
#	  実際には、プロジェクト毎に設定を変更することが無かったので、共通のclip.mkへ移動することにしました。
#	- "-I$(CLIP)\include"は、新規追加です。
#	  \usr\PIECE\includeの中にある、EPSONライブラリの標準ヘッダファイルの一部(string.hなど)は、
#	  K&R方式の関数宣言となっているために、引数の型チェックが弱いです。
#	  それらをANSI形式に書き換えたものを、$(CLIP)\includeに置き、そちらを優先することによって、
#	  引数の型チェックを強化することにしました。
#	* Mon Jul 17 21:32:23 JST 2006 Naoyuki Sawa
#	- 自作ツールの実行ファイルパス名に、DPEXRESのマクロ定義を追加しました。
#	* Fri Jul 28 00:37:23 JST 2006 Naoyuki Sawa
#	- 自作ツールの実行ファイルパス名に、MESHLOADとWIRELOADのマクロ定義を追加しました。
#	//  暗黙の生成規則は定義していません。
#	//- 暗黙の生成規則を定義していない理由は、以下のとおりです。
#	//  ・XML形式のメッシュまたはワイヤーフレームデータからC言語形式への変換は、*.xmlから*.cへの変換です。
#	//    変換元の拡張子xmlは一般的なので、メッシュまたはワイヤーフレームデータと決め打つのは危険です。
#	//  ・メッシュもワイヤーフレームも拡張子はxmlで、どちらの変換ツールで変換すべきか自動判断できません。
#	//  以上の理由により、全プロジェクトに共通となるclip.mkでは、暗黙の生成規則を定義しませんでした。
#	//- 暗黙の生成規則の代りに、プロジェクト毎のMakefileに、各データファイルの生成規則を記述してください。
#	//  たとえば、XML形式のメッシュデータファイルsample.xmlからC言語ファイルsample.cを生成するには、
#	//  以下のように記述してください。
#	//	sample.c: sample.xml
#	//		$(MESHLOAD) $< > $@
#	//  また、XML形式のワイヤーフレームデータファイルsample.xmlからC言語ファイルsample.cを生成するには、
#	//  以下のように記述してください。
#	//	sample.c: sample.xml
#	//		$(WIRELOAD) $< > $@
#	//- 当該プロジェクトにおいて、*.xmlから*.cへの変換がすべてメッシュデータファイルの変換ならば、
#	//  プロジェクトのMakefileにて、以下のように、暗黙の生成規則を記述しても構いません。
#	//	.xml.c:
#	//		$(MESHLOAD) $< > $@
#	//  同様に、*.xmlから*.cへの変換がすべてワイヤーフレームデータファイルの変換ならば、
#	//  プロジェクトのMakefileにて、以下のように、暗黙の生成規則を記述しても構いません。
#	//	.xml.c:
#	//		$(WIRELOAD) $< > $@
#	//  この場合、xmlファイルはプロジェクトフォルダ直下か、VPATHフォルダのいずれかに置く必要があります。
#	//  テクスチャの変換元bmpファイルといっしょに、grpフォルダに置くのが判り易いと思います。
#	//→2006/09/27 以上の記述はもう旧くなりました。
#	* Wed Sep 27 04:14:08 JST 2006 Naoyuki Sawa
#	- メッシュファイルの拡張子をxml→pmxに変更したことに伴い、暗黙の変換規則を追加しました。
#	- ワイヤーフレームファイルの拡張子をxml→pwxに変更したことに伴い、暗黙の変換規則を追加しました。
#	- メッシュ、ワイヤーフレーム、および、テクスチャを置くフォルダとして、VPATHにmqoを追加しました。
#	* Wed Dec 20 17:50:03 JST 2006 Naoyuki Sawa
#	- dppcmcnv.exeの-x[rate]オプション(2-bit ADPCM)追加に伴い、Makefileからdppcmcnv.exeへのオプション指定方法を変更しました。
#	  これまでは、ADPCM_Vマクロが指定されていれば4-bit ADPCM可変周波数、それ以外は4-bit ADPCM固定周波数としていましたが、
#	  今後は、dppcmcnv.exeへの形式オプションを直接DPPCMCNV_FLAGSマクロにて指定し、柔軟に対応できるよう変更しました。
#	  ADPCM_Vマクロは、もう、意味をなさなくなったので、注意してください。
#	* Mon Jan 08 01:00:26 JST 2007 Naoyuki Sawa
#	- 高速除算ルーチンのための、__umodsi3,__modsi3,__udivsi3,__divsi3のシンボル定義を追加しました。
#	* Mon Jan 08 17:16:25 JST 2007 Naoyuki Sawa
#	- 高速除算ルーチンの、剰余処理の配置を変更しました。(clipidiv.sのコメント参照)
#	* Fri Jan 12 00:05:19 JST 2007 Naoyuki Sawa
#	- 自作ツールの実行ファイルパス名に、DPBMPPPのマクロ定義を追加しました。
#	  生成規則は定義していないので、アプリケーション毎のMakefileで明示的に利用してください。
#	  <例>"grp/sample.bmp"を、暗い背景に溶け込むように50%縮小し、"grp/sample-2m.bmp"を生成。
#	      grp/sample-2m.bmp: grp/sample.bmp
#	          $(DPBMPPP) -s50% -b3 $< $@
#	* Sun Jan 14 00:00:48 JST 2007 Naoyuki Sawa
#	- dpbmppp.exeに-qオプションを追加したことに伴い、DPBMPPPマクロにもQUIET_FLAGが反映されるよう変更しました。
#	* Mon Feb 26 16:52:58 JST 2007 Naoyuki Sawa
#	- 自作ツールの実行ファイルパス名に、BMLCNVのマクロ定義を追加しました。
#	  生成規則は定義していないので、アプリケーション毎のMakefileで明示的に利用してください。
#	  <例>"xml/sample.xml"をコンバートし"sample.c"を生成。変数プレフィクスは"Sample"とする。
#	      sample.c: xml/sample.xml
#	          $(BMLCNV) Sample < $< > $@
#	* Tue May 01 12:37:06 JST 2007 Naoyuki Sawa
#	- bmlcnv.exeを大きく改造したので、上述(Mon Feb 26 16:52:58 JST 2007)のコメントは無効になりました。
#	  生成規則は定義していないので、clip.mkの内容は変わっていませんが、アプリケーション毎のMakefileの記述方法が変わります。
#	  以下の例を参考にしてください。
#	  <例>"xml/sample1.xml","xml/sample2.xml","xml/sample3.xml",をコンバートし"sample.c"を生成。
#	      bullet.c: xml/sample1.xml xml/sample2.xml xml/sample3.xml
#	          $(BMLCNV) $^ > $@
#	      「$^」はすべての依存ファイルを示すマクロです。ひとつの依存ファイルを示す「$<」と間違えないよう注意してください。
#	* Sat May 05 20:50:47 JST 2007 Naoyuki Sawa
#	- リンク時にクロスリファレンスファイルを生成するよう、LDFLAGS に-lcrefオプションを追加しました。
#	* Tue Oct 16 13:00:41 JST 2007 Naoyuki Sawa
#	- defsym.sモジュールを新設し、.set擬似命令でシンボル定義を行うよう変更しました。
#	  この変更により、+defsym __umodsi3=0x46cなどのシンボル定義は不要になりました。
#	  詳しくは、defsym.sのコメントを参照してください。
#	* Tue Jan 08 11:47:29 JST 2008 Naoyuki Sawa
#	- カスタムスタートアップルーチン(cstart.o)を使うための変更を行いました。
#	* Sun Aug 10 23:36:59 JST 2008 Naoyuki Sawa
#	- tool/ExportPieceClipが、<vector>要素を固定小数点でなく浮動小数点で出力するよう変更したことに追従し、
#	  MESHLOAD_FLAGSマクロと、WIRELOAD_FLAGSマクロを追加しました。
#	  浮動小数点のまま読み込んで浮動小数点MESH(WIRE)を出力する場合は、「-f」を指定してください。
#	  固定小数点に変換して固定小数点MESH(WIRE)を出力する場合は、「-x」を指定してください。
#	  どちらも指定しなければ、「-f」(浮動小数点)と同じ扱いとなります。
#

#DEBUG=1
#CLIP=..\clip

#############################################################################
#	定義：全てのプロジェクトで共通な部分（APP/LIB共通）
#############################################################################

# QUIETシンボルが定義されていたら、自作ツールの詳細メッセージ出力を抑制します。
ifdef QUIET
QUIET_FLAG = -q
else
QUIET_FLAG = 
endif

# 自作ツールの実行ファイルパス名をマクロ定義します。
# CLIPマクロにライブラリフォルダを指定しておいてください。
BIN = $(CLIP)\tool
COMPTEST = $(BIN)\comptest.exe
DFPCK    = $(BIN)\dfpck.exe
DMESHCNV = $(BIN)\dmeshcnv.exe $(QUIET_FLAG)
DPBMPCNV = $(BIN)\dpbmpcnv.exe $(QUIET_FLAG)
DPPCMCNV = $(BIN)\dppcmcnv.exe $(QUIET_FLAG)
DPVN2SCR = $(BIN)\dpvn2scr.exe
DWAV2GSM = $(BIN)\dwav2gsm.exe $(QUIET_FLAG)
DPEXRES  = $(BIN)\dpexres.exe
UTOP     = $(BIN)\utop.exe
DBIN2C   = $(BIN)\dbin2c.exe
MINIZIP  = $(BIN)\minizip.exe
MINIUNZ  = $(BIN)\miniunz.exe
MESHLOAD = $(BIN)\meshload.exe
WIRELOAD = $(BIN)\wireload.exe
DPBMPPP  = $(BIN)\dpbmppp.exe $(QUIET_FLAG)
BMLCNV   = $(BIN)\bmlcnv.exe
LHA      = lha.exe

# CC,AS,LDの初期値は"cc","as","ld"です。
# Windows上のP/ECE開発環境では"gcc33","as33","lk33"を使います。
# これらのコマンドを明示してもいいのですが、
# "pcc33"を使えば自動的に適切なコマンドを呼び出してくれます。
# よってCC,AS,LD全てに共通の"pcc33"を指定することにしました。
# * Sun Sep 15 15:33:00 JST 2003 Naoyuki Sawa
# - S1C33用GCC3.xコンパイラドライバ(c33-pcc.exe)を使うために、マクロPCC33を定義しました。
#   アプリケーション毎のMakefileで、次のように定義してください。
#	PCC33 = c33-pcc
#   マクロPCC33が定義されていない場合の既定値は、P/ECE開発環境付属のpcc33.exeとなります。
ifndef PCC33
PCC33 = pcc33
endif
CC = $(PCC33)
AS = $(PCC33)
LD = $(PCC33)
# ライブラリアン(lib33)だけは"pcc33"から自動で呼ばれないので、
# 明示することにしました。
LIB = lib33

# サフィックスリストは初期値のままでも構いませんが、
# 不要なサフィックスが多くふくまれているので、
# 念のため必要なサフィックスのみを明示することにしました。
.SUFFIXES:
.SUFFIXES: .o .s .c

# 組み込みルールは"-o"オプションで出力ファイルを指定しています。
# pcc33は"-o"オプションで出力ファイルを指定できないので、
# 正しいサフィックスルールを明示する必要があります。
# * Tue Nov 19 12:30:00 JST 2002 Naoyuki Sawa
# - $(AS)へのフラグを、$(ASFLAGS)から$(CFLAGS)に統一しました。
#   $(ASFLAGS)を特別に指定することはあまりないので、廃止しました。
.c.o:
	$(CC) -c $(CFLAGS) $<
.s.o:
	$(AS) -c $(CFLAGS) $<

# 常に有効なコンパイラオプションを指定します。
# * GCC標準のオプション:
#	-Wall		全ての警告を有効にする
#	-Werror		警告をエラーとして扱う
#	-ansi		GCC拡張文法を無効にする  -> 外した
#	-pedantic	厳密なANSI準拠検査を行う -> 外した
# * S1C33特有のオプション:
#	-gp=0x0		グローバルポインタを使用
#	-near		分岐命令を2命令に展開
# * Thu Dec  6 21:50:15 JST 2001 Naoyuki Sawa
# - -pedanticはpcc33(gcc33)にはなく、エラーになるので省きました。
#   -ansiは使えるようですが、マニュアルに見当たりません。
#   とりあえず、-pedanticと共に省くことにしました。
# * Sat Oct 12 16:42:00 JST 2002 Naoyuki Sawa
# - -Werrorを外しました。
#   既存のソースコードを移植する際に、関数未宣言等で警告が出ることが多く、
#   全部手で治していると逆にエンバグしてしまう恐れがあると思ったからです。
# * Wed Feb 22 00:00:00 JST 2006 Naoyuki Sawa
# - CFLAGSに"-I$(CLIP) -I$(CLIP)\include -b"を追加しました。
# - "-I$(CLIP)"と"-b"は、これまで、プロジェクト個別のMakefileの中で、APP_CFLAGSにて指定していましたが、
#   実際には、プロジェクト毎に設定を変更することが無かったので、共通のclip.mkへ移動することにしました。
# - "-I$(CLIP)\include"は、新規追加です。
#   \usr\PIECE\includeの中にある、EPSONライブラリの標準ヘッダファイルの一部(string.hなど)は、
#   K&R方式の関数宣言となっているために、引数の型チェックが弱いです。
#   それらをANSI形式に書き換えたものを、$(CLIP)\includeに置き、そちらを優先することによって、
#   引数の型チェックを強化することにしました。
#CFLAGS  = -Wall -Werror -gp=0x0 -near -DPIECE
#CFLAGS  = -Wall -gp=0x0 -near -DPIECE
CFLAGS  = -Wall -gp=0x0 -near -DPIECE -I$(CLIP) -I$(CLIP)\include -b

# * Wed Dec 12 05:04:06 JST 2001 Naoyuki Sawa
# - リンク時にシンボルファイルとマップファイルを生成するよう、LDFLAGS に-lmと-lsオプションを追加しました。
# * Sat May 05 20:50:47 JST 2007 Naoyuki Sawa
# - リンク時にクロスリファレンスファイルを生成するよう、LDFLAGS に-lcrefオプションを追加しました。
#   あまり見ないかも知れませんが、ついでなので、生成できるものは全部生成しておくことにしました(^^;
#   アプリケーションで定義した関数や変数のうち、使われていない無駄な関数や変数を発見するのに役立つかも知れません。
#   (ライブラリ内の関数や変数は、やむをえずリンクされてしまうものもたくさんあるので、発見しても仕方が有りません。)
#LDFLAGS = -lm -ls
#LDFLAGS = -ls -lm -lcref
#↓ * Tue Jan 08 11:47:29 JST 2008 Naoyuki Sawa
#↓ - カスタムスタートアップルーチン(cstart.o)を使うための変更を行いました。
#↓   cstart.oが確実に0x100000〜に配置されるよう、他のオプジェクトファイルよりもcstart.oを先に指定します。
LDFLAGS = -ls -lm -lcref -nodefsup $(CLIP)\cstart.o

# * Tue Apr 1 19:00:00 JST 2003 Naoyuki Sawa
# - 高速RAMの空きエリア先頭アドレス FRAM_ADDR の定義を追加しました。
#   高速RAMへのコード転送を利用しない場合も、常に定義しておいて害はありません。
# - プロジェクト毎のMakefileから、次のように利用します。
#	+addr FRAM_ADDR {@FRAMC}
#   具体例は、プロジェクトテンプレートtest.pceのMakefileを参照してください。
# - また、clippce.cでの高速RAM転送サイズとして__SIZEOF_FRAM_ADDRを利用します。
#   +defaddr〜でアドレスを定義しておかないと、__SIZEOF_〜が生成されません。
# * Tue Apr 1 20:00:00 JST 2003 Naoyuki Sawa
# - FRAM_OBJSが定義された場合のみ、高速RAM対応のリンク指定を追加するよう変更。
ifdef FRAM_OBJS
LDFLAGS += +defaddr FRAM_ADDR=0x1000 \
	   +codeblock FRAMC {$(FRAM_OBJS)} \
	   +addr FRAM_ADDR {@FRAMC}
endif

## * Sun Nov 10 19:01:00 JST 2002 Naoyuki Sawa
## - アプリケーション毎のMakefileでSTACKLENが定義されていたら、
##   シンボル_stacklenを設定して、スタックをSRAM上に取るようにしました。
##   STACKLENが定義されていなければ、これまで通りスタックは高速RAMに取られます。
#ifdef STACKLEN
#LDFLAGS += +defsym _stacklen=$(STACKLEN)
#endif
#
## * Sun Sep 14 21:44:00 JST 2003 Naoyuki Sawa
## - アプリケーション毎のMakefileでSYSSTACKが定義されていたら、
##   シンボル_sysstackを設定して、システムスタックサイズを変更します。
##   SYSSTACK未定義時のシステムスタックサイズの既定値は、sysstack.sにて定義されます。
##   2003/09/14現在、システムスタックサイズの既定値は1.5KBです。
## - STACKLENを定義せずにSYSSTACKのみを定義することもできます。
##   4KBのスタックが高速RAMに確保され、そのうちSYSSTACKバイトがシステムスタックとなります。
#ifdef SYSSTACK
#LDFLAGS += +defsym _sysstack=$(SYSSTACK)
#endif
#
#↓2004/12/27 スタックレイアウトの大幅な変更を行いました。
#
# * Mon Dec 27 12:13:00 JST 2004 Naoyuki Sawa
# - スタックレイアウトの大幅な変更を行いました。
# - これまでは、システムスタックとユーザースタックは両方とも高速RAMに配置するか、
#   または両方ともSRAMに配置するしかありませんでした。
#   しかしながら、システムスタックはアプリケーションの動作にほとんど影響しないため、
#   システムスタックをSRAMに配置し、ユーザースタックを高速RAMに配置したいと考えました。
#   そこで、次のように仕様を変更しました。
# - システムスタックは常にSRAMに配置します。
#   SRAM上のシステムスタックサイズは、SYSSTACKにてバイト数を指示してください。
#   SYSSTACKを0とすることはできません。(起動時エラーとなります)
# - ユーザースタックは高速RAMまたはSRAMに配置します。
# - ユーザースタックをSRAMに配置する場合は、USRSTACKにてバイト数を指示してください。
# - ユーザースタックを高速RAMに配置する場合は、USRSTACKを定義しないか、または0としてください。
#   高速RAMの前半に高速RAM転送コードを配置した残りが、ユーザースタックとなります。
#   高速RAM転送コードが大きすぎて、ユーザースタック領域が小さすぎる場合は、起動時エラーとなります。
# - シンプルライブラリの場合は、SYSSTACK、USRSTACKどちらも定義しないでください。
#   システムスタックを高速RAMに配置する、通常のシンプルライブラリのスタックレイアウトとなります。
ifndef SYSSTACK
SYSSTACK = 0x0
endif
ifndef USRSTACK
USRSTACK = 0x0
endif
LDFLAGS += +defsym _stacklen=$(SYSSTACK)
LDFLAGS += +defsym _usrstacklen=$(USRSTACK)

#//{{2007/10/16削除
#// # * Mon Jan 08 01:00:26 JST 2007 Naoyuki Sawa
#// # - 高速除算ルーチンを、トラップテーブルの空き領域へ転送して使用します。
#// #   高速除算ルーチンの固定アドレスを、ここで指定します。(clipidiv.s参照)
#// #   プログラムにもアドレスが埋め込まれているので、変更してはいけません。
#// #LDFLAGS += +defsym __umodsi3=0x420
#// #LDFLAGS += +defsym  __modsi3=0x424
#// #LDFLAGS += +defsym __udivsi3=0x47c
#// #LDFLAGS += +defsym  __divsi3=0x480
#// #↓* Mon Jan 08 17:16:25 JST 2007 Naoyuki Sawa
#// #↓- 高速除算ルーチンの、剰余処理の配置を変更しました。(clipidiv.sのコメント参照)
#// LDFLAGS += +defsym __umodsi3=0x46c
#// LDFLAGS += +defsym  __modsi3=0x472
#// LDFLAGS += +defsym __udivsi3=0x47c
#// LDFLAGS += +defsym  __divsi3=0x480
#//}}2007/10/16削除
#→ * Tue Oct 16 13:00:41 JST 2007 Naoyuki Sawa
#→ - defsym.sモジュールを新設し、.set擬似命令でシンボル定義を行うよう変更しました。
#→   この変更により、+defsym __umodsi3=0x46cなどのシンボル定義は不要になりました。
#→   詳しくは、defsym.sのコメントを参照してください。

# Debug/Releaseによって変化させるコンパイラオプションを指定します。
ifdef DEBUG
CFLAGS  += -g  -DDEBUG
LDFLAGS += -g
else
CFLAGS  += -O2 -DNDEBUG
endif

# * Sat Nov 22 06:00:00 JST 2003 Naoyuki Sawa
# - トレース出力の使用/使用なしを選択します。
#   TRACE=1が定義されていた場合のみ、トレース出力ONとなります。
#   TRACE=0が定義されているか、またはTRACEが定義されていなければ、トレース出力OFFです。
# - トレース出力については、clipmisc.hを参照してください。
ifdef TRACE
CFLAGS += -DTRACE_ON=$(TRACE)
endif

# プロジェクト別のコンパイラ・リンカオプションを追加します。
CFLAGS  += $(APP_CFLAGS)
LDFLAGS += $(APP_LDFLAGS)

# * Sat Jul 20 21:16:00 JST 2002 Naoyuki Sawa
# - データコンバート用の記述を追加しました。
# * Mon Jul 22 21:10:00 JST 2002 Naoyuki Sawa
# - データコンバート用の記述にdppcmcnvを追加しました。
# * Mon Nov 18 03:30:00 JST 2002 Naoyuki Sawa
# - データコンバート用の記述にbin2cを追加しました。
#   bin2c.exeは自作プログラムではありません。
#   終了ステータスが間違っていて、常に失敗を返すようですが、
#   ソースがなく修正できないので、終了ステータスを無視することにしました。
# - 「.mod.c:」の生成規則を追加しました。
# * Wed Jan 29 07:09:00 JST 2003 Naoyuki Sawa
# - 「.ppd.c:」「.pmd.c:」の生成規則を追加しました。
# * Thu May 27 19:00:00 JST 2004 Naoyuki Sawa
# - bin2c.exeを、自作のdbin2c.exeに変更しました。
# * Tue Nov 23 06:59:00 JST 2004 Naoyuki Sawa
# - 「.s3m.c:」の生成規則を追加しました。
# * Wed Sep 27 04:14:08 JST 2006 Naoyuki Sawa
# - 「.pmx.c:」の生成規則を追加しました。
# - 「.pwx.c:」の生成規則を追加しました。
VPATH = grp:snd:mus:mqo
# グラフィック
.SUFFIXES: .bmp .pgd .psp .pid
.bmp.c:
	$(DPBMPCNV) -t     -o$@ $<
.bmp.pgd:
	$(DPBMPCNV) -b     -o$@ $<
.bmp.psp:
	$(DPBMPCNV) -b -fs -o$@ $<
.bmp.pid:
	$(DPBMPCNV) -b -fi -o$@ $<
# 効果音
.SUFFIXES: .wav .ppd
#ifndef ADPCM_V
#.wav.c:
#	$(DPPCMCNV) -t -fa -o$@ $<
#.wav.ppd:
#	$(DPPCMCNV) -b -fa -o$@ $<
#else
#.wav.c:
#	$(DPPCMCNV) -t -fv$(ADPCM_V) -o$@ $<
#.wav.ppd:
#	$(DPPCMCNV) -b -fv$(ADPCM_V) -o$@ $<
#endif
#↓* Wed Dec 20 17:50:03 JST 2006 Naoyuki Sawa
#↓- dppcmcnv.exeの-x[rate]オプション(2-bit ADPCM)追加に伴い、Makefile上のdppcmcnv.exeオプション指定方法を変更しました。
#↓  これまでは、ADPCM_Vマクロが指定されていれば4-bit ADPCM可変周波数、それ以外は4-bit ADPCM固定周波数としていましたが、
#↓  今後は、dppcmcnv.exeへの形式指定オプションを直接DPPCMCNV_FLAGSマクロにて指定し、柔軟に対応できるよう変更しました。
#↓  ADPCM_Vマクロは、もう、意味をなさなくなったので、注意してください。
.wav.c:
	$(DPPCMCNV) -t $(DPPCMCNV_FLAGS) -o$@ $<
.wav.ppd:
	$(DPPCMCNV) -b $(DPPCMCNV_FLAGS) -o$@ $<
# 音楽
.SUFFIXES: .mml .pmd .mod .s3m
#.mml.c:
#	mucc $< $@
#→mucc.exeで直接*.cファイルを生成すると、配列宣言が含まれないので、
#  いったん*.pmdを生成した後にdbin2c.exeを使って*.cを作成します。
.mml.pmd:
	mucc $< $@
# バイナリ直接
.ppd.c:
	$(DBIN2C) $< > $@
.pmd.c:
	$(DBIN2C) $< > $@
.mod.c:
	$(DBIN2C) $< > $@
.s3m.c:
	$(DBIN2C) $< > $@
# 圧縮
.SUFFIXES: .pgz .ppz .pmz
.pgd.pgz:
	$(COMPTEST) c $< $@
.ppd.ppz:
	$(COMPTEST) c $< $@
.pgd.pmz:
	$(COMPTEST) c $< $@

# XML形式のメッシュまたはワイヤーフレームデータ、または、それ以外のデータのXML形式ファイル
# * Fri Jul 28 03:22:06 JST 2006 Naoyuki Sawa
# //- 拡張子"xml"のファイルは、必ずしもメッシュまたはワイヤーフレームデータファイルとは限りません。
# //  従って、共通のclip.mkでは、拡張子xmlのファイルに関する暗黙の生成規則を定義していません。
# //  本来、以下の".SUFFIXES: .xml"宣言も、プロジェクト毎のMakefileにて個別に記述すべきなのですが、
# //  以下の理由により、".SUFFIXES: .xml"宣言のみ、共通のclip.mkにて宣言することにしました。
# //- clip.mkは、プロジェクト毎のMakefileの末尾にインクルードされます。
# //  clip.mkの途中で、".SUFFIXES:"宣言を行い、暗黙の生成規則にかかわる拡張子をリセットしています。
# //  プロジェクト毎のMakefileにて".SUFFIXES: .xml"宣言を行っても、clip.mkの途中でリセットされてしまいます。
# //- この問題を回避するには、clip.mkにて".SUFFIXES:"の後に".SUFFIXES: .xml"の宣言を行うか、または、
# //  プロジェクト毎のMakefileにて、clip.mkのインクルードの後に".SUFFIXES: .xml"の宣言を行う必要があります。
# //  今回は、前者の方法を採ることにしました。
# //  前者の方法を採ることにした理由は、今後、メッシュやワイヤーフレームデータ以外でもXML形式を利用し、
# //  XML形式ファイルからの暗黙の変換規則を定義することがあるかも知れないと考えたからです。
# //→2006/09/27 以上の記述はもう旧くなりました。
#.SUFFIXES: .xml
#↓2006/09/27 変更
.SUFFIXES: .pmx .pwx
#.pmx.c:
#	$(MESHLOAD) $< > $@
#↓2008/08/10 変更
.pmx.c:
	$(MESHLOAD) $(MESHLOAD_FLAGS) $< > $@
#.pwx.c:
#	$(WIRELOAD) $< > $@
#↓2008/08/10 変更
.pwx.c:
	$(WIRELOAD) $(WIRELOAD_FLAGS) $< > $@

#############################################################################
#	依存関係：全てのプロジェクトで共通な部分（APP/LIB共通）
#############################################################################

# ※知らなかったけど、「*.o: *.h」こういう指定もできるみたいです。
#   例えばsample.oの依存関係を調べる場合、
#   * 既にsample.oが存在するなら、make実行時に*.oと*.hが展開されて、
#     sample.oがいずれかの.hファイルよりも新しければ再コンパイルします。
#   * sample.oが存在していなければ、makefile実行時に*.oが展開されても、
#     sample.oは含まれない、つまりsample.oの依存関係の指示はないけれど、
#     そもそもsample.oがないので、sample.cがコンパイルされる。
#   というふうに動作するみたいです。
#   全ての.cが全ての.hに依存する時は、この指定方法が簡単でいいです。
#   .hが一つも無いと展開エラーになるので、コメントアウトしてください。
# →さすがにあんまりなので、「$(OBJS): *.h」に修正しました。
# * Mon Jul 23 04:25:00 JST 2002 Naoyuki Sawa
# - プロジェクトによっては.hファイルが一つもないことがあり、
#   「*.h」がエラーになるので、HEADERSマクロに置き換えました。
#   通常は「HEADERS = *.h」、..hがない場合は「HEADERS = 」としてください。
$(OBJS): $(HEADERS)

# * Tue Nov 19 12:30:00 JST 2002 Naoyuki Sawa
# - ライブラリの中にあるモジュールは、高速RAMに転送できません。
#   仕方がないので、いったんライブラリから抽出して、リンクします。
# - 『S1C33 Family Cコンパイラパッケージマニュアル』(Ver.4)
#   \usr\PIECE\docs\datasheet\EPSON\S5U1C33000C_J.pdf の
#   p.214(PDFでは230ページ目)、-addrコマンドの説明を参照。
#   「指定された仮想ブロックの中に"xxx.lib:xxx.o"形式のファイルがあると
#     ワーニングになり、このブロック定義は無視されます」
# * Tue Apr 1 19:00:00 JST 2003 Naoyuki Sawa
# - プロジェクト毎のMakefileに記述していたのを、共通のclip.mkへ移しました。
#   clipライブラリ自信のMakefileにインクルードした場合は、
#   FRAM_OBJSが定義されていないので、この記述は無効となります。
#   （無効化しないと、fram〜.oの生成規則二重定義エラーになってしまうので）
# - 高速RAM転送候補モジュールが増えたら、ここに追記してください。
#   clipライブラリのMakefileに、OBJSと生成方法を追加するのも忘れずに！
ifdef FRAM_OBJS
framtop.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framfix.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framfont.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framldir.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdraw.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frammod1.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frammod2.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frams3m.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framxm.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framit.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdprm.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds11.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds12.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds13.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds14.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds15.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds21.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds22.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds23.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds24.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framds25.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framline.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frammp3.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frampsid.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsap.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framspc.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsp2a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framvgm.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framgym.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framgbs.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framhes.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framym.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framay3.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsid.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frampky.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsds.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsn7.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdms.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdms2.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framwsg.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framp62.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framn2.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framn2a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framz80.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framz80a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framz8c.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framz8ca.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framm65.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framm65a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
fram65c.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
fram65ca.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framw65.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framw65a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framssm.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framssma.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdmg.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdmga.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdmc.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdmca.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framm68.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framm68a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framm69.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framm69a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framc62.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framc62a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framt18.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framt18a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framppu.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framppua.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frampp4.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frampp4a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framapu.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framapua.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdmv.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framdmva.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framtia.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framtiaa.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsv.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsva.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frams26.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
frams26a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framuvi.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framuvia.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framc16.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framc16a.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framsti.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framstia.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framht2.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framadp.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framflt1.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framflt2.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framflt3.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
framc17.o: $(CLIP)\fram.lib
	$(LIB) -x $(CLIP)\fram.lib $@
endif
