######################################################################
#                                                                    #
#                   MAKEPOST       Version 0.52.00                   #
#                                                                    #
######################################################################
#
#   98. 8.21    ・LCT ファイルを意識するようにした．
#               ・正式リリース．バージョン0.52.00 とする．
#   98. 8.20    ・サブコマンドにセクション名を指定するオプションを追加．
#   98. 8.18    ・for 文のリストがからだったときにNTではエラーになるの
#                 に対応．
#   98. 7. 6    ・エントリーポイントが古いままだったので修正．
#               ・正式リリース．バージョン0.51.03 とする．
#   98. 7. 3    ・昨日の修正が完全でなかったので修正．for 文上でifは使
#                 えないらしい．
#               ・正式リリース．バージョン0.51.02 とする．
#   98. 7. 2    ・IP.BIN相当のリンク対応．オブジェクトファイル群を指定
#                 するDEFAULT_IP_OBJSをリンクする処理を追加．
#               ・まとめて行っていた処理をもう少し分割して見やすく修正．
#               ・正式リリース．バージョン0.51.00 とする．
#   98. 6.25    ・ユーザ指定のオブジェクトがデフォルトオブジェクトより
#                 先にくるように修正．
#               ・ユーザ指定のライブラリがデフォルトライブラリより先に
#                 くるように修正．
#               ・多少見やすくなるように修正．
#               ・C コンパイラの-sectionオプションをサブコマンド作成時
#                 に指定するのを止めてデフォルトオプション群に移動．
#               ・COPYおよびDEL の画面表示を抑制した．
#               ・ヘッダファイルとソースファイルの依存記述を追加
#   98. 6.22    ・makepost内でも変更履歴を記述するようにした．
#               ・NT対応でmove.exeをcopy＆del に置換した．
#               ・正式リリース．バージョン0.50.01 とする．
#   98. 6.21    ・正式リリース．バージョン0.50.00 とする．
#

######################################################################
#
#   まとめマクロ名定義
#
######################################################################

##############################
#   C 言語関係
##############################
#   TEMP_C_OBJS     ユーザ指定のＣソースの中間オブジェクトファイル．
#   TEMP_C_DWFS     ユーザ指定のＣソースの中間ドワーフファイル．
#   TEMP_C_LSTS     ユーザ指定のＣソースの中間リストファイル．
TEMP_C_OBJS = $(USER_C_SRCS:.c=.obj)
TEMP_C_DWFS = $(USER_C_SRCS:.c=.dwf)
TEMP_C_LSTS = $(USER_C_SRCS:.c=.lst)

##############################
#   アセンブラ言語関係
##############################
#   TEMP_AS_OBJS    ユーザ指定のアセンブラソースの中間オブジェクトファ
#                   イル．
#   TEMP_AS_DWFS    ユーザ指定のアセンブラソースの中間ドワーフファイル．
#   TEMP_AS_LSTS    ユーザ指定のアセンブラソースの中間リストファイル．
TEMP_AS_OBJS = $(USER_AS_SRCS:.src=.obj)
TEMP_AS_DWFS = $(USER_AS_SRCS:.src=.dwf)
TEMP_AS_LSTS = $(USER_AS_SRCS:.src=.lst)

##############################
#   総括
##############################
#   TEMP_SRCS       ユーザ指定の全てのソースファイル．
#   TEMP_DWFS       ユーザ指定の全てのソースの中間ドワーフファイル．
#   TEMP_OBJS       ユーザ指定の全てのソースの中間オブジェクトファイル．
#   TEMP_LSTS       ユーザ指定の全てのソースの中間リストファイル．
TEMP_SRCS = $(TEMP_C_SRCS) $(TEMP_AS_SRCS)
TEMP_OBJS = $(TEMP_C_OBJS) $(TEMP_AS_OBJS)
TEMP_DWFS = $(TEMP_C_DWFS) $(TEMP_AS_DWFS)
TEMP_LSTS = $(TEMP_C_LSTS) $(TEMP_AS_LSTS)

##############################
#   プロジェクト関係
##############################
#   PROJECT_FULL_NAME   完全なターゲット名．
#   PROJECT_ABS         Sysroff ファイル．
#   PROJECT_BIN         バイナリファイル．
#   PROJECT_ELF         ELF ファイル．
#   PROJECT_LIB         ライブラリファイル．
#   PROJECT_LCT         LCT ファイル．
#   PROJECT_MAP         マップファイル
PROJECT_FULL_NAME = $(PROJECT_NAME).$(PROJECT_TYPE)
PROJECT_ABS       = $(PROJECT_NAME).abs
PROJECT_BIN       = $(PROJECT_NAME).bin
PROJECT_ELF       = $(PROJECT_NAME).elf
PROJECT_LCT       = $(PROJECT_NAME).lct
PROJECT_LIB       = $(PROJECT_NAME).lib
PROJECT_MAP       = $(PROJECT_NAME).map

##############################
#   ユーザ指定ファイル依存
##############################
!if "$(TEMP_C_OBJS)" != ""
$(TEMP_C_OBJS) : $(USER_C_INCS)
!endif

!if "$(TEMP_AS_OBJS)" != ""
$(TEMP_AS_OBJS) : $(USER_AS_INCS)
!endif

######################################################################
#
#   ターゲット指定（変更する必要はあまりない）
#
######################################################################

##############################################
#
#   一般向けターゲット
#
##############################################

##############################
#   デフォルトターゲット
##############################
default-target : pre-user-target $(CC_SUBCOM) $(AS_SUBCOM) $(PROJECT_FULL_NAME) post-user-target

##############################
#   インストゥール
##############################
default-install : user-install

##############################
#   簡単な中間ファイルの削除
##############################
default-clean : user-clean
#   オブジェクトファイルの削除
	-@for %f in ($(TEMP_OBJS)) do if exist %f del %f

#   DWARFファイルの削除
	-@for %f in ($(TEMP_DWFS)) do if exist %f del %f

#   リストファイルの削除
	-@for %f in ($(TEMP_LSTS)) do if exist %f del %f

#   サブコマンドファイルの削除
	-@if exist $(CC_SUBCOM) del $(CC_SUBCOM)
	-@if exist $(AS_SUBCOM) del $(AS_SUBCOM)
	-@if exist $(AR_SUBCOM) del $(AR_SUBCOM)
	-@if exist $(LD_SUBCOM) del $(LD_SUBCOM)

##############################
#   さらに進んだ中間ファイルの削除
##############################
default-more-clean : default-clean user-more-clean
#   リンカのゴミの削除
	-@for %f in (*.tm3) do if exist %f del %f

##############################
#   ディストリビュートの為にターゲットおよび出来るだけ不必要なファイルを削除
##############################
default-dist-clean : default-more-clean user-dist-clean
#   ターゲット関係の削除
	-@for %f in ( \
		$(PROJECT_ABS) \
		$(PROJECT_BIN) \
		$(PROJECT_ELF) \
		$(PROJECT_LIB) \
		$(PROJECT_LCT) \
		$(PROJECT_MAP)) do if exist %f del %f

##############################################
#
#   内部ターゲット（サブコマンド処理）
#
##############################################

##############################
#   C コンパイラのオプションサブコマンド作成
##############################
$(CC_SUBCOM) : $(MAKEFILES)
	@if exist $(CC_SUBCOM) del $(CC_SUBCOM)
	@if "$(DEBUG_FLG)" == "on" echo -debug              >> $(CC_SUBCOM)
	@echo -section=p=P$(SECTION_NAME),c=C$(SECTION_NAME),d=D$(SECTION_NAME),b=B$(SECTION_NAME) >> $(CC_SUBCOM)
	@echo $(USER_CFLAGS) $(DEFAULT_CFLAGS)              >> $(CC_SUBCOM)

##############################
#   アセンブラのオプションサブコマンド作成
##############################
$(AS_SUBCOM) : $(MAKEFILES) $(TEMP_OBJS)
	@if exist $(AS_SUBCOM) del $(AS_SUBCOM)
	@if "$(DEBUG_FLG)" == "on" echo -debug=d            >> $(AS_SUBCOM)
	@echo $(USER_ASFLAGS) $(DEFAULT_ASFLAGS)            >> $(AS_SUBCOM)

##############################
#   ライブラリアンのオプションサブコマンド作成
##############################
$(AR_SUBCOM) : $(MAKEFILES) $(TEMP_OBJS)
	@if exist $(AR_SUBCOM) del $(AR_SUBCOM)
	@echo create $(PROJECT_LIB)              >> $(AR_SUBCOM)
!if "$(USER_OBJS)" != ""
	@for %a in ($(USER_OBJS)) do echo add %a >> $(AR_SUBCOM)
!endif
!if "$(TEMP_OBJS)" != ""
	@for %a in ($(TEMP_OBJS)) do echo add %a >> $(AR_SUBCOM)
!endif
!if "$(USER_LIBS)" != ""
	@for %a in ($(USER_LIBS)) do echo add %a >> $(AR_SUBCOM)
!endif
	@echo exit                               >> $(AR_SUBCOM)

##############################
#   リンカのオプションサブコマンド作成
##############################
$(LD_SUBCOM) : $(MAKEFILES) $(TEMP_OBJS)
	@if exist $(LD_SUBCOM) del $(LD_SUBCOM)

	@echo align_section                                  >> $(LD_SUBCOM)

#
#   ELFフォーマットの場合
#
#   デバグオプションの有無
#   バイナリファイルの場合はデバグオプションがあってはいけない？
	@if "$(DEBUG_FLG)" == "on" \
		if "$(PROJECT_TYPE)" == "elf" echo debug         >>  $(LD_SUBCOM)

#   出力ファイルタイプ
	@if "$(PROJECT_TYPE)" == "elf" echo elf              >>  $(LD_SUBCOM)

#   出力ファイル名
	@if "$(PROJECT_TYPE)" == "elf" \
		echo output $(PROJECT_FULL_NAME)                 >>  $(LD_SUBCOM)
	@if "$(PROJECT_TYPE)" == "bin" \
		echo output $(PROJECT_ABS)                       >>  $(LD_SUBCOM)

#   必要なスタートアップオブジェクトファイル群の指定
!if "$(DEFAULT_STARTUPS)" != ""
	@for %a in ($(DEFAULT_STARTUPS)) do echo input %a    >> $(LD_SUBCOM)
!endif

#   IP.BIN相当のオブジェクトのリンク
!if "$(PROJECT_TYPE)" == "elf"
!if "$(DEFAULT_IP_OBJS)" != ""
	for %a in ($(DEFAULT_IP_OBJS)) do \
		echo input %a      >> $(LD_SUBCOM)
!endif
!endif

!if "$(USER_OBJS)" != ""
	@for %a in ($(USER_OBJS))        do echo input %a    >> $(LD_SUBCOM)
!endif
!if "$(TEMP_OBJS)" != ""
	@for %a in ($(TEMP_OBJS))        do echo input %a    >> $(LD_SUBCOM)
!endif
!if "$(DEFAULT_OBJS)" != ""
	@for %a in ($(DEFAULT_OBJS))     do echo input %a    >> $(LD_SUBCOM)
!endif

#   必要なライブラリファイル群の指定
!if "$(USER_LIBS)" != ""
	@for %a in ($(USER_LIBS))        do echo library %a  >> $(LD_SUBCOM)
!endif
!if "$(DEFAULT_LIBS)" != ""
	@for %a in ($(DEFAULT_LIBS))     do echo library %a  >> $(LD_SUBCOM)
!endif

#   出力マップファイルの指定
	@echo print $(PROJECT_MAP)                           >> $(LD_SUBCOM)

	@echo form a                                         >> $(LD_SUBCOM)

#   エントリーの指定
	@if "$(PROJECT_TYPE)" == "elf" echo entry SG_SEC     >> $(LD_SUBCOM)
#	@if "$(PROJECT_TYPE)" == "elf" echo entry __START_SYS     >> $(LD_SUBCOM)

#   elf フォーマット出力の時のスタートアドレス
	@if "$(PROJECT_TYPE)" == "elf" \
		echo start IP(8C008000),DSGLH(8C010000)          >> $(LD_SUBCOM)
#   バイナリフォーマット出力の時のスタートアドレス
	@if "$(PROJECT_TYPE)" == "bin" \
		echo start DSGLH(8C010000)                       >> $(LD_SUBCOM)
	@echo exit                                           >> $(LD_SUBCOM)

##############################################
#
#   内部ターゲット（ビルド処理）
#
##############################################

##############################
#   ELF実行ファイルの出力
##############################
$(PROJECT_ELF) : $(LD_SUBCOM) $(TEMP_OBJS) $(USER_LIBS) $(DEFAULT_LIBS) $(BUILDIN_LIBS)
	@if exist $(PROJECT_ELF) del $(PROJECT_ELF)
	$(LD) $(USER_LDFLAGS) $(DEFAULT_LDFLAGS) -sub=$(LD_SUBCOM) 

##############################
#   バイナリ実行ファイルの出力
##############################
$(PROJECT_BIN) : $(LD_SUBCOM) $(TEMP_OBJS) $(USER_LIBS) $(DEFAULT_LIBS) $(BUILDIN_LIBS)
	@if exist $(PROJECT_BIN) del $(PROJECT_BIN)
	$(LD) $(USER_LDFLAGS) $(DEFAULT_LDFLAGS) -sub=$(LD_SUBCOM) 
	$(ROF2BIN) -q $(PROJECT_ABS)

##############################
#   ライブラリファイルの出力
##############################
$(PROJECT_LIB) : $(AR_SUBCOM) $(TEMP_OBJS) $(USER_LIBS)
	@if exist $(PROJECT_LIB) del $(PROJECT_LIB)
	$(AR) $(ARFLAGS) -sub=$(AR_SUBCOM)

######################################################################
#
#   サフィックスルール
#
######################################################################

.SUFFIXES:
.SUFFIXES: .hh .h .cc .c .src .obj .lib .elf .abs .bin

.c.obj :
	$(CC) $< -objectfile=$*.obj -listfile=$*.lst -sub=$(CC_SUBCOM)
	@if "$(DEBUG_FLG)" == "on" $(DWFCNV) -sysrof=$*.o $*.obj
#	@if "$(DEBUG_FLG)" == "on" move $*.o $*.obj
#	NTにmove.exeが無いようなのででっち上げる
#	@if "$(DEBUG_FLG)" == "on" copy /Y $*.o $*.obj > NUL
	@if "$(DEBUG_FLG)" == "on" copy    $*.o $*.obj > NUL
	@if "$(DEBUG_FLG)" == "on" del  $*.o           > NUL

.src.obj :
	$(AS) $< $(DEFAULT_ASFLAGS) $(USER_ASFLAGS) -list=$*.lst
#   ↓↓↓なんで動かないんだ？↓↓↓
#	$(AS) $< -sub=$(AS_SUBCOM) -list=$*.lst


#EOF#
