#
#	Makefile - P/ECE用Makefileの雛形
#
#	* Tue Dec  4 04:41:51 JST 2001 Naoyuki Sawa
#	- 作成開始。
#	* Sat May 25 15:43:00 JST 2002 Naoyuki Sawa
#	- ライブラリ構築用に修正。
#	* Thu Jun 19 22:07:00 JST 2002 Naoyuki Sawa
#	- gsm-1.0.10構築用に特化。

#DEBUG=1

# * Thu Jun 19 22:07:00 JST 2002 Naoyuki Sawa
# オリジナルgsmソースファイルへの修正は、現在のところ
# - ダミーのassert.hを追加。（元のソース一式には含まれていません）
# - config.hの行コメントアウトを「/*〜*/」から「//」に変更しました。
# 以上、二点のみです。

#############################################################################
#	定義：プロジェクト毎に書き換える部分（APP/LIB別）
#############################################################################

# プロジェクト名を指定してください。
# プロジェクト名はライブラリファイルのベース名となります。
PROJECT = libgsm

# オブジェクトファイルを列挙してください。
OBJS =	add.o \
	code.o \
	debug.o \
	decode.o \
	gsm_create.o \
	gsm_decode.o \
	gsm_destroy.o \
	gsm_encode.o \
	gsm_explode.o \
	gsm_implode.o \
	gsm_option.o \
	gsm_print.o \
	long_term.o \
	lpc.o \
	preprocess.o \
	rpe.o \
	short_term.o \
	table.o

# プロジェクト別のコンパイラ・リンカオプションを定義してください。
# （インクルードパス、ライブラリパス、ライブラリファイルの列挙等）
# * Thu Jun 19 22:07:00 JST 2002 Naoyuki Sawa
# - ダミーのassert.hをインクルードするため、APP_CFLAGSに「-I.」を追加。
# - APP_CFLAGSに「-DUSE_FLOAT_MUL -DFAST」を追加し、プログラムで
#   「v=1;gsm_option(g, GSM_OPT_FAST, &v);」を行うことによって、
#   高速ルーチン(浮動小数点演算?)を使うことができます。
#   が、P/ECEにはNDPがないので、逆に数倍以上遅くなってしまいます。
#   だから、このコンパイルオプションは付けないことにしました。
APP_CFLAGS  = -I.
APP_LDFLAGS = 

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

# CC,AS,LDの初期値は"cc","as","ld"です。
# Windows上のP/ECE開発環境では"gcc33","as33","lk33"を使います。
# これらのコマンドを明示してもいいのですが、
# "pcc33"を使えば自動的に適切なコマンドを呼び出してくれます。
# よってCC,AS,LD全てに共通の"pcc33"を指定することにしました。
CC = pcc33
AS = pcc33
LD = pcc33
# ライブラリアン(lib33)だけは"pcc33"から自動で呼ばれないので、
# 明示することにしました。
LIB = lib33

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

# 組み込みルールは"-o"オプションで出力ファイルを指定しています。
# pcc33は"-o"オプションで出力ファイルを指定できないので、
# 正しいサフィックスルールを明示する必要があります。
.c.o:
	$(CC) $(CFLAGS)  -c $<
.s.o:
	$(AS) $(ASFLAGS) -c $<

# 常に有効なコンパイラオプションを指定します。
# * 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と共に省くことにしました。
CFLAGS  = -Wall -Werror -gp=0x0 -near -DPIECE

# * Wed Dec 12 05:04:06 JST 2001 Naoyuki Sawa
# - リンク時にシンボルファイルとマップファイルを生成するよう、
#   LDFLAGS に-lmと-lsオプションを追加しました。
LDFLAGS = -lm -ls

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

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

#############################################################################
#	アクション：全てのプロジェクトで共通な部分（APP/LIB共通）
#############################################################################

# ターゲット(TODO:説明書け)
all: lib
lib: $(PROJECT).lib
clean:
	-del *.o
	-del *.lib

# アクション(TODO:説明書け)
$(PROJECT).lib: $(OBJS)
	$(LIB) $(PROJECT).lib $(OBJS)

#############################################################################
#	依存関係：プロジェクト毎に書き換える部分（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」に修正しました。
$(OBJS): *.h
