#!smake
#
# $Id: GNUmakefile,v 1.7 2004/03/02 01:30:25 tong Exp $
#
# 動物の森 メイクファイル
#
# 通常 nloadバージョンのメイク：make rom_d
# ＲＯＭ焼きバージョンのメイク：make rom_x
# 最終ＲＯＭバージョンのメイク：make rom_f
# ショウバージョンのメイク：make rom_s
# GNU C++ によるテストメイク：make -k FORCE_CPP= __GCC__= rom_d
#
# make "VMAKEOPT=" ; コンパイル/makeromオプション追加
# make "VMAKEROMOPT=" ; makeromオプション追加
# make "VMAKEOPTION=" ; makeオプション追加
#
#
#
# make -n ; makeすると実行されるコマンドを表示する
#
#
# malloc用ヒープサイズ変更：make "VMAKEOPT=-DSYS_HEAP_SIZE=0x240000"
# fifoサイズ変更：make "VMAKEOPT=-DSYS_FIFO_SIZE=0x2000"
#
# make clean ; rm -rf *.[ou] a.out core lex.yy.[co] y.tab.[cho] _force ar.tmp.*
# make clobber ; 上記に加えて $(TARGETS) MakeDepend をも消す
# make rmtargets ; $(TARGETS) だけを消す
#
# パートナーＮ６４立ち上げ例
# setenv PTSRC ../:/home/hayakawa/prj/PR/libc64/:/home/hayakawa/prj/PR/libu64/:/home/hayakawa/prj/PR/libbg/:/usr/src/PR/libultra/gu/
# ptnet -host partner2 -fn rk24 -jfn k24 -fg white -bg black -width 80 -height 40 /usr/local/partner-net/n64/nptn64 -EUC
#
# z_actor_h.h を触るとどれだけのファイルが影響を受けるかを調べるには
# grep z_actor_h.h rom_d/Makedepend | cut -d: -f1


ifndef PARALLEL
.NOTPARALLEL:				# 並列動作を禁止
endif
.PATH: .. 
VPATH=..
.SUFFIXES :				# メイク開始までの化時間短縮
.SUFFIXES : .c .h .s .o .i		# 必要なサフィックス
###ifndef (NORCS)
##.SUFFIXES : .c,v .h,v .s,v
###endif

## 標準関数ライブラリ
N64KITDIR    = /usr/local/n64kit
#2000 1/31 komatu サウンドチームの人が見れないのでこちらに変更
###N64KITDIR    = /project/NUSYS/n64kit50
NUSTDDIR     = $(N64KITDIR)/nustd
NUSTDINCDIR  = $(NUSTDDIR)/include
NUSTDLIBDIR  = $(NUSTDDIR)/lib
#NUSTDLIBDIR  = /project/NUSYS/n64kit/nustd/src


## デバッグレベル(予定)
## 0: 完全製品用 プリント不可
## 1: 製品用     osSyncPrintfのみ
## 2: ショウ用   osSyncPrintfのみ
## 3: 撮影用     PRINTF可
## 4: マリオクラブ初期デバッグ用
## 5: 通常開発用 重要なメッセージのみ表示
## 6: 通常開発用 一般的なメッセージの表示
## 7: テスト開発用  メッセージがちょっとうるさい
## 8: デバッグ調査用  ゲームが引っ掛かるほどメッセージがうるさい
## 9: システムデバッグ用  ゲームが止まるほどメッセージがうるさい
## DEBUG_LEVEL = 6

## cc / makerom のオプション

LMAKEOPT += -DFOR_JAPAN
LMAKEOPT += -DPLAY_ADJUST		# GAME_PLAY追加テスト用
LMAKEOPT += -DOPTIMIZE_NEXT_DISP	# NEXT_DISPの高速化
LMAKEOPT += -DUSE_DEBUG_MODE

LMAKEOPT += -DNOUSE_LINE_UCODE		# LineUcodeは使わない

## make のオプション

ifdef ROM_D
LMAKEOPT += -DROM_D
LMAKEOPT += -DZURUMODE=2
LMAKEOPT += -DNES_TESTROM		# ←実験ROM用
LMAKEOPT += "-DU_${USER}_U"
endif
ifdef ROM_X
LMAKEOPT += -DROM_X
LMAKEOPT += -DZURUMODE=2
endif
ifdef ROM_F
LMAKEOPT += -DROM_F
LMAKEOPT += -DZURUMODE=3 -DFDEBUG
endif
ifdef ROM_S
LMAKEOPT += -DROM_S
LMAKEOPT += -DZURUMODE=2
endif
ifdef FINAL_ROM
LMAKEOPT += -DFINAL_ROM -D_FINALROM
endif

ifdef ROM_ROM
LMAKEOPT +=	-DROM_ROM=1			# ＲＯＭ焼き用のコードを吐く
endif

ifdef EMU_ROM
LMAKEOPT +=	-DEMU_ROM=1			# ボード用のコードを吐く
endif
ifdef PARTNER
LMAKEOPT +=	-DPARTNER=1			# パートナー用のコードを吐く
endif
ifdef ISVIEWER
LMAKEOPT +=	-DISVIEWER=1 			# ISVIEWER用のコードを吐く
LMAKEOPT +=	-DISV64 			# osInitialze
endif

#もうすぐ消す
LMAKEOPT += -DRAM8M

ifdef LEOFILEOUT
LMAKEOPT += -DLEOFILEOUT
endif

ifdef USE_THREAD_PROFILE
LMAKEOPT += -DUSE_THREAD_PROFILE
endif

ifdef USE_COUNT
LMAKEOPT += -DUSE_COUNT
endif
ifdef USE_FLASHROM
LMAKEOPT += -DUSE_FLASHROM
endif

ifdef USE_DEBUG_MALLOC
LMAKEOPT += -DUSE_DEBUG_MALLOC
endif
ifdef MSG_TOOL
LMAKEOPT += -DMSG_TOOL
endif
ifdef FTR_DEVSEG
LMAKEOPT += -DFTR_DEVSEG
endif
ifdef FG_TOOL
LMAKEOPT += -DFG_TOOL
endif
ifdef SCENE_TOOL
LMAKEOPT += -DSCENE_TOOL
endif
ifdef SCENE_TOOL2
endif
ifdef DEBUG_CAMERA
LMAKEOPT += -DDEBUG_CAMERA
endif
ifdef PAL_VERSION
LMAKEOPT += "-DPAL_VERSION"
endif
ifdef GATEWAY_VERSION
LMAKEOPT += -DGATEWAY_VERSION
LMAKEOPT += -DSYS_GATEWAY_N64
endif
ifdef SHOW_VERSION
LMAKEOPT += "-DSHOW_VERSION"
endif

ifdef USE_HIRESO
LMAKEOPT += -DUSE_HIRESO
endif

ifdef VIDEO_AUTO
LMAKEOPT += "-DVIDEO_PAL"
LMAKEOPT += "-DVIDEO_NTSC_OR_MPAL"	# NTSC:北米 MPAL:南米
LMAKEOPT += "-DVIDEO_NTSC"
endif
ifdef PAL_VERSION
LMAKEOPT += "-DVIDEO_PAL"
endif
ifdef NES_VERSION
LMAKEOPT += "-DVIDEO_NTSC_OR_MPAL"	# NTSC:北米 MPAL:南米
endif
ifdef FOR_JAPAN
LMAKEOPT += "-DVIDEO_NTSC"
endif
LMAKEOPT += "-DVIDEO_PAL_IS_FPAL"	# PALのときはFPALモードを使う


include $(ROOT)/usr/include/make/PRdefs
ifdef HAYAKAWA_LIB
include /home/hayakawa/prj/PR/COMMON/SRDdefs.mk
else
include $(ZELDA_ROOT)/srd/PR/gSRDdefs.mk
####include yhk.mk
###include SRDdefs.mk
endif
include $(COMMONRULES)

NM	= /usr/bin/nm


#LD 		= $(ROOT)/usr/lib/PR/nld
#LD 		= /usr/bin/ld
###if !defined(FORCE_CPP) && !defined(__GCC__)
##ZELDA_CC	= $(ZELDA_ROOT)/tool/bin/zelda_cc
##.c.o :
##	@echo $(ZELDA_CC) '$$(CFLAGS) -c' $(.IMPSRC)
##	@$(ZELDA_CC) $(CFLAGS) -c $(.IMPSRC)
###endif /* !defined(FORCE_CPP) && !defined(__GCC__) */

#
# ディレクトリの設定
#

ZELDA_LIB	= $(FOREST_ROOT)/lib
FOREST_LIB	= $(FOREST_ROOT)/forest_lib
FOREST_DATA	= $(FOREST_ROOT)/data
##FOREST_AUDIO	= $(FOREST_LIB)/audio
FOREST_AUDIO	= $(FOREST_ROOT)/forest_audio
FOREST_TOOL	= $(FOREST_ROOT)/forest_tool

SHELL 		= /bin/bash
MAKEMASK6102 	= $(ROOT)/usr/sbin/makemask
MAKEMASK6105 	= $(ROOT)/usr/sbin/makemask6105
MAKEMASK 	= $(MAKEMASK6102)
NRDC 		= $(ZELDA_LIB)/NRDC/nrdc/nrdc
NRDC_ROM_VERSION=0
### ゲームタイトルを修正する場合は m_cpak_lib.c の _XX も同時に直すこと
NRDC_GAME_TITLE="DOUBUTSUNOMORI"
ifdef SHOW_VERSION
NRDC_INITIAL_CODE=NAFE
else
NRDC_INITIAL_CODE=NAFJ
endif 
#/* if defined(SHOW_VERSION) ... */
##LMAKEOPT += -DGAME_CODE="$(NRDC_INITIAL_CODE)"
##LMAKEOPT += -DCOMPANY_CODE="01"
##LMAKEOPT += -DGAME_TITLE="$(NRDC_GAME_TITLE)"
EVENT_SCHEDULER = $(FOREST_ROOT)/src/morische

TARGETS = romPP_d

ifdef HAYAKAWA_LIB_TEST
HAYAKAWA_LIB =
endif

ZELDA_INFO =  forest_makerom.stdout
SEGMENT_MAP = rom_segment.map
ROMMAP_KEYLIST = RommapSeg.lst
MAKE_ROMMAP_SHELL = MkRommap.sh

ifdef __GCC__XXX
MKDEPOPT=
LLDOPTS  = 
else
LLDOPTS  = $(MKDEPOPT)
endif
LLDOPTS  += --no-warn-mismatch
ifdef HAYAKAWA_LIB
PATCH_DIR = /home/hayakawa/prj/PR/COMMON/patch/PR
PATCH_INCDIR = $(PATCH_DIR)
PATCH_LIBDIR = $(PATCH_DIR)
endif
LCINCS = -I.
ifdef HAYAKAWA_LIB
LCINCS += \
-I/home/hayakawa/prj/PR/libu64 \
-I/home/hayakawa/prj/PR/libc64
LLDOPTS += \
-L/home/hayakawa/prj/PR/libu64 \
-L/home/hayakawa/prj/PR/libc64
#LCINCS += -I$(ZELDA_LIB)/fault
LCINCS += -I$(ZELDA_ROOT)/tool/src/count
endif
LCINCS += \
-I$(ZELDA_LIB) \
-I$(COMMON_INCDIR) \
-I$(PATCH_INCDIR) \
-I$(PATCH_INCDIR)/.. \
-I$(FOREST_LIB) \
-I$(ROOT)/usr/include/PR \
-I/usr/local/include \
-I$(NUSTDINCDIR)

LLDOPTS +=  \
-L$(FOREST_AUDIO) \
-L$(COMMON_LIBDIR) \
-L$(PATCH_LIBDIR) \
-L$(ROOT)/usr/lib/PR \
-L$(NUSTDLIBDIR)

### ウルトラライブラリの選択
ifdef ROM_ROM
ULTRALIB_BASE = ultra_rom
else
ULTRALIB_BASE = ultra
endif
ULTRALIB = -l$(ULTRALIB_BASE)
### リアルタイムクロックライブラリー
RTCLIB = $(FOREST_LIB)/librtc.a

LEOEMULIBDIR = $(ZELDA_LIB)/ISV/tool/lib
LEOLIBDIR = $(ROOT)/usr/lib

ifdef FINAL_ROM
U64LIB_BASE = u64_rom
C64LIB_BASE = c64_rom
NUSLIB_BASE = nustd
else
U64LIB_BASE = u64_d
C64LIB_BASE = c64_d
NUSLIB_BASE = nustd_d
endif

U64LIB    = -l$(U64LIB_BASE)
C64LIB    = -l$(C64LIB_BASE)
NUSLIB    = -l$(NUSLIB_BASE)
LEOEMULIB = -l$(LEOEMULIB_BASE)
LEOLIB    = -l$(LEOLIB_BASE)

ifdef HAYAKAWA_LIB
U64LIB_FULLPATH = /home/hayakawa/prj/PR/libu64/lib$(U64LIB_BASE).a
C64LIB_FULLPATH = /home/hayakawa/prj/PR/libc64/lib$(C64LIB_BASE).a
else
U64LIB_FULLPATH = $(COMMON_LIBDIR)/lib$(U64LIB_BASE).a
C64LIB_FULLPATH = $(COMMON_LIBDIR)/lib$(C64LIB_BASE).a
endif
NUSLIB_FULLPATH = $(NUSTDLIBDIR)/lib$(NUSLIB_BASE).a

##
## ファイルの設定
##
## CFILES, CFILES_EN, CFILES_EFF, CFILES_Z, CFILES_SYS, CFILES_DATA の定義
include $(FOREST_ROOT)/src/GNUmakefile.CFILES

    NM_TBL_DECLS   =             m_name_table_declS
IMP_NM_TBL_DECLS_C = $(.ALLSRC:M*m_name_table_declS.c)
    AC_FN_NM_DECL   =             ac_furniture_name_decl
IMP_AC_FN_NM_DECL_C = $(.ALLSRC:M*ac_furniture_name_decl.c)

## modify for bb-player
# C++FILES =	
# COBJECTS        = 	$(CFILES:.c=.o)
# COBJECTS_EN     = 	$(CFILES_EN:.c=.o)
# COBJECTS_EFF    = 	$(CFILES_EFF:.c=.o)
# COBJECTS_Z      = 	$(CFILES_Z:.c=.o)
# COBJECTS_SYS    = 	$(CFILES_SYS:.c=.o)
# COBJECTS_BOOT   = 	$(CFILES_BOOT:.c=.o)
# C++OBJECTS      = 	$(C++FILES:.c++=.o)
# C++OBJECTS_EN   = 	$(C++FILES_EN:.c++=.o)
# C++OBJECTS_EFF  = 	$(C++FILES_EFF:.c++=.o)
# C++OBJECTS_Z    = 	$(C++FILES_Z:.c++=.o)
# C++OBJECTS_SYS  = 	$(C++FILES_SYS:.c++=.o)
# C++OBJECTS_BOOT = 	$(C++FILES_BOOT:.c++=.o)
C++FILES =	
COBJECTS        = 	$(CFILES_OBJ)
COBJECTS_EN     = 	$(CFILES_EN_OBJ)
COBJECTS_EFF    = 	$(CFILES_EFF_OBJ)
COBJECTS_Z      = 	$(CFILES_Z_OBJ)
COBJECTS_SYS    = 	$(CFILES_SYS_OBJ)
COBJECTS_BOOT   = 	$(CFILES_BOOT_OBJ)
C++OBJECTS      = 	$(C++FILES:.c++=.o)
C++OBJECTS_EN   = 	$(C++FILES_EN:.c++=.o)
C++OBJECTS_EFF  = 	$(C++FILES_EFF:.c++=.o)
C++OBJECTS_Z    = 	$(C++FILES_Z:.c++=.o)
C++OBJECTS_SYS  = 	$(C++FILES_SYS:.c++=.o)
C++OBJECTS_BOOT = 	$(C++FILES_BOOT:.c++=.o)

COBJECT_EN  = cobject_en.o
COBJECT_EFF = cobject_eff.o
COBJECT_Z   = cobject_z.o
COBJECT_SYS = cobject_sys.o
COBJECTS    = $(COBJECTS_EN) $(COBJECTS_EFF) $(COBJECTS_Z) $(COBJECTS_SYS)

CODEOBJECTS += \
	$(COBJECTS) \
	$(C++OBJECTS)

## OS2.0L以降では不要
###if defined(USE_FLASHROM)
##CODEOBJECTS += $(FOREST_LIB)/flash.o
###endif

ifdef USE_VOLCULL
CODEOBJECTS += $(ZELDA_LIB)/volcull.o
endif
ifdef USE_COUNT
ifdef HAYAKAWA_LIB
CODEOBJECTS += $(ZELDA_ROOT)/tool/src/count/count.o
else
CODEOBJECTS += $(ZELDA_LIB)/count.o
endif #/* HAYAKAWA_LIB */
endif #/* USE_COUNT */

ifdef PAL_VERSION
CODEOBJECTS +=	$(FOREST_AUDIO)/audio_pal.o 
else #/* PAL_VERSION */
CODEOBJECTS +=	$(FOREST_AUDIO)/audio.o 
endif #/* PAL_VERSION */

AUDIOOBJECTS +=	\
	$(FOREST_AUDIO)/audio.o
AUDIOFILES +=	\
	$(FOREST_AUDIO)/sound_bank.cart \
	$(FOREST_AUDIO)/sound_seq.cart \
	$(FOREST_AUDIO)/sound_wave.cart
NESROM_FILES =
NESROM_FILES += $(FOREST_LIB)/MFC/nes_noise.bin
NESROM_FILES +=	$(FOREST_LIB)/MFC/nes_cluclu.bin
NESROM_FILES +=	$(FOREST_LIB)/MFC/nes_balloon2.bin
NESROM_FILES +=	$(FOREST_LIB)/MFC/nes_donkey1_2.bin
NESROM_FILES +=	$(FOREST_LIB)/MFC/nes_s_asobij2.bin
NESROM_FILES +=	$(FOREST_LIB)/MFC/nes_pinball2.bin
NESROM_FILES +=	$(FOREST_LIB)/MFC/nes_tennis2.bin
NESROM_FILES +=	$(FOREST_LIB)/MFC/nes_golf2.bin
ifdef NES_TESTROM
NESROM_FILES += $(FOREST_LIB)/MFC/nes_testrom.bin
endif

BOOTOBJECTS = \
	$(COBJECTS_BOOT) \
	$(C++OBJECTS_BOOT)

ifdef HAYAKAWA_LIB
BOOTOBJECTS += $(ZELDA_LIB)/fault/z_fault.o $(ZELDA_LIB)/fault/faultprint.o
else
BOOTOBJECTS += $(ZELDA_LIB)/z_fault.o $(ZELDA_LIB)/faultprint.o
endif

DATAOBJECTS =	$(CFILES_DATA:.c=.o)

AUDIOSEGMENT =	audiosegment.o
BOOTSEGMENT =	bootsegment.o
CODESEGMENT =	codesegment.o

###OBJECTS =	$(BOOTSEGMENT) $(CODESEGMENT)
OBJECTS =	$(BOOTSEGMENT) $(CODESEGMENT) $(AUDIOSEGMENT)

OBJECTS +=	$(DATAOBJECTS)


LMAKEOPT +=	-DF3DEX_GBI -DF3DEX_GBI_2	# 使用するGBI
ifdef ROM_F
LMAKEOPT +=	-DNOUSE_DEBUG_PAD		# デバッグ用コントローラパッドを使用しない（３、４コン）
endif

LMAKEOPT +=	-DESCAPE_WARNING		# ワーニング回避のための無駄なコードを許す

OPTIMIZER = -O2 -g3				# 速く・小さく
LMAKEOPT += -D_ODEBUG				# デバッグモード.とると z_camera.c がエラーになる
LMAKEOPT += -DUSE_FAULT=1 			# 画面にフォルトメッセージが出る
ifdef ROM_F
LMAKEOPT += -DROM_VERSION=1			# 実機用ＲＯＭの作成
LMAKEOPT += -DNOUSE_PRINTF			# PRINTFを使わない
LMAKEOPT += -DPRINTF_with_Warning_609		# ワーニングを出す
LMAKEOPT += -DDEBUG=0				# 
LMAKEOPT += -DNDEBUG				# assertを殺す
LMAKEOPT += -DUSE_TIMER=0 			# 処理時間を計測しない
else
ifdef ROM_X
LMAKEOPT += -DROM_VERSION=1			# 実機用ＲＯＭの作成
LMAKEOPT += -DNOUSE_PRINTF			# PRINTFを使わない
else
LMAKEOPT += -DROM_VERSION=0			# エミュレータボード用
LMAKEOPT += -UNOUSE_PRINTF			# PRINTFを使う
endif
LMAKEOPT += -DDEBUG=1				# lib*_d.aを使用する
LMAKEOPT += -DUSE_DEBUG_MOJI			# puts8x8用
LMAKEOPT += -DUSE_TIMER=1 			# 処理時間を計測する
LMAKEOPT += -DUSE_VISCVG			# カバレッジの可視表示
endif


ifdef ROM_D
LMAKEOPT += -DUSE_SEGMENT_NAME_TABLE
LMAKEOPT += -DUSE_THREAD_PROFILE
endif
ifndef ROM_F
LMAKEOPT += -DUSE_ACTOR_NAME_TABLE
endif


LLDLIBS_CODE += $(RTCLIB)
LLDLIBS_BOOT += -L$(ROOT)/usr/lib $(U64LIB) $(C64LIB)
ifdef LEOFILEOUT
LLDLIBS_BOOT += -L$(ZELDA_LIB)/ISV/tool/lib -lleofile 
endif

LLDLIBS_BOOT += $(ULTRALIB) $(NUSLIB)
LLDLIBS_BOOT += -u__umoddi3 -u__udivdi3 -u__divdi3 -lgcc


##cfe: Warning 813:: struct/union/enum '' is used, but not defined
##cfe: Warning 828:: '' may be indistinguishable from '' due to internal name truncation
##cfe: Warning 852:: '' can be const qualified, since it is not set within its lifetime.
##cfe: Warning 814:: static '' unused
##cfe: Warning 819:: function parameter '' is not used in function ''
##cfe: Warning 820:: '' is not used in function ''
##cfe: Warning 821:: '' set but unused in function ''
##cfe: Warning 827:: implicit conversion from '' to ''
##cfe: Warning 828:: '' may be indistinguishable from '' due to internal name truncation
#WOFF=-woff 1685,515,608,658,799,803,852,1048,1233,1499$(LWOFF)
LWOFF = 	813,828,852
ifdef WARNLEVEL0
LWOFF = 	813,828
endif
ifdef WARNLEVEL1
LWOFF = 	813,828,852
endif
ifdef WARNLEVEL2
LWOFF = 	813,828,852,814,819,820,821,827
endif
ifdef WARNLEVEL3
LWOFF = 	1685,515,608,658,799,803,852,1048,1233,1499,813,828,852,814,819,820,821,827
endif
ifndef __GCC__
WOFF = -woff $(LWOFF)$(VWOFF)
endif


MAKEOPT = $(GMAKEOPT) $(LMAKEOPT) $(VMAKEOPT)

#LCINCS =
LASINCS =	$(LCINCS)
LCDEFS += $(MAKEOPT)
ifdef __GCC__
LCOPTS = -Wall -W -G 0
#LCOPTS += -Wimplicit		#-Wall
#LCOPTS += -Wreturn-type	#-Wall
#LCOPTS += -Wunused		#-Wall
#LCOPTS += -Wswitch		#-Wall
#LCOPTS += -Wcomment		#-Wall
#LCOPTS += -Wtrigraphs		#-Wall
#LCOPTS += -Wformat		#-Wall
#LCOPTS += -Wchar-subscripts	#-Wall
#LCOPTS += -Wuninitialized	#-Wall
#LCOPTS += -Wparentheses	#-Wall
#LCOPTS += -Wtemplate-debugging #-Wall
#LCOPTS += -Wtraditional		# 伝統的な C と ANSI C において異なった振舞いをする特定の構造
#LCOPTS += -Wshadow		# ローカル変数が他のローカル変数を隠している時に常に警告します。
#LCOPTS += -Wid-clash-len	# 2つの全く別の識別子の最初の len 文字が一致した時に警告します。
LCOPTS += -Wpointer-arith	# 関数型や void の "サイズ" に依存するものを全て警告します。
LCOPTS += -Wcast-qual		# ポインタが、型修飾子が削除されるようにキャストされる
#LCOPTS += -Wcast-align		# ポインタのキャストにおいて、そのターゲットに要求されるアラインメントが大きくなるようなキャスト
#LCOPTS += -Wwrite-strings	# 文字定数に対して、型 const char[length] を与えます。
#LCOPTS += -Waggregate-return	# 構造体や共用体を返す関数を定義した場合や、それらを呼び出す全ての場合
#LCOPTS += -Wconversion		# プロトタイプが存在有無によって、異なった型変換を引き起こす
LCOPTS += -Wstrict-prototypes	# 引数の型を指定せずに関数を宣言、あるいは定義した場合に警告します。
LCOPTS += -Wmissing-prototypes	# グローバルな関数を、その前にプロトタイプ宣言をせずに定義した場合。
LCOPTS += -Wmissing-declarations
#LCOPTS += -Wredundant-decls	# 同一スコープ中で複数回、同一対象を宣言した場合。(declで大量ワーニング!)
LCOPTS += -Wnested-externs	# 関数内で extern 宣言を行った場合に警告します。


ifdef FORCE_CPP
LCOPTS += -Wenum-clash		#異なる列挙型の間で変換を行った際に警告します
LCOPTS += -Woverloaded-virtual
LCOPTS += -Winline		#インライン関数をインライン展開できなかった場合
endif
LASOPTS = 	-G 0
else
LCOPTS = -non_shared -G 0 -mips2 -fullwarn -float -xansi -Xcpluscomm -wlint,-fhp -use_readonly_const -rdata_shared

## const 
##LCOPTS += -use_readonly_const -rdata_shared

# 大きすぎる関数を発見する
#LCOPTS += -Olimit 100
LASOPTS =	-non_shared -G 0
endif

LC++DEFS =	$(LCDEFS)
LC++INCS =	$(LCINCS)
### #if defined(__GCC__)
LC++DEFS += -D_LANGUAGE_C_PLUS_PLUS -DLANGUAGE_C_PLUS_PLUS
### #endif
ifndef ROM_F  # && !defined(__GCC__)
LC++OPTS =	-non_shared -G 0 -mips2 -fullwarn -float -xansi +pp -woff 3259,3262,3672,3106
else
LC++OPTS =	-non_shared -G 0 -mips2 -xansi
endif
#: warning(3106): nested comment is not allowed
#: warning(3259): expression has no effect
#: warning(3262): variable "p1" was declared but never referenced
#: warning(3672): Mangling of signed character does not match cfront name mangling

: error(3114): identifier "" is undefined
: error(3130): the #endif for this directive is missing
: error(3232): a value of type "" cannot be used to initialize an entity of type ""
: error(3252): argument of type "" is incompatible with parameter of type ""
: error(3611): a value of type "" cannot be assigned to an entity of type ""
: error(3867): expected a member name

## 初期化しないauto変数を 0xffffa5a5にしてしまう
## 全バージョンで外すようにします（全責任者：山本雄一）
## スタックトレースが追いにくいので復活させました（早川）
ifndef ROM_F # && !defined(__GCC__)
LCOPTS   += -trapuv
LC++OPTS += -trapuv
endif

## make clean で消えるもの
LDIRT  = rom_d rom_x rom_f rom_s spec_inc_ovl.inc spec_seg_ovl.inc *.rel *.map $(ULTRALIB2) $(U64LIB2) $(C64LIB2) $(NUSLIB2) zelda.gdis eptvr.dat ptn64.dat *.szp *.szs m_ev_sche_dat.h m_ev_sche_def.h
LDIRT1 = *.d


##LLDOPTS = $(MKDEPOPT) -L$(PATCH_LIBDIR) -L$(COMMON_LIBDIR) -L$(ROOT)/usr/lib/PR
GLDOPTS =				# デフォルトの内容を削除する

ifdef __GCC__
LDFLAGS_WIDHOUT_LDLIBS = $(LDOPTS) $(ENDIAN)
else
LDFLAGS_WIDHOUT_LDLIBS	= $(LDOPTS) $(ENDIAN)
endif

TOOLBIN = ${ZELDA_ROOT}/tool/bin
CAMDATINSTALLROOT = /home/umemiya/ZELDA/SAM_TOOL
CAMPARAMH = camera_param_data.h
CAMERAZDB = camera.zdb
CAMDATABASE = ${ZELDA_ROOT}/data/$(CAMERAZDB)

#
# エントリ登録
#
all default: schedule $(TARGETS)

help::
	@echo '最新バージョンで、完全に再構築します(rom_d/rom_x/rom_f/rom_s)'
	@echo 'make fullcourse'

# ソース・データ更新
coall::
	coall
	$(MAKE) data
	$(MAKE) schedule

# フルコース2！
# make_midnight 用
# clobber する際に以前の *.szs ファイルを保存しています
fullcourse2::
	@echo このモードは make clobber を使用します
	coall
	-rm -rf szs_x; mkdir szs_x && (cd rom_x && mv [A-Za-n]*.szs ../szs_x/. && mv [o-z]*.szs ../szs_x/.)
	-rm -rf szs_d; mkdir szs_d && (cd rom_d && mv [A-Za-n]*.szs ../szs_d/. && mv [o-z]*.szs ../szs_d/.)
	-rm -rf szs_f; mkdir szs_f && (cd rom_f && mv [A-Za-n]*.szs ../szs_f/. && mv [o-z]*.szs ../szs_f/.)
##	-rm -rf szs_s; mkdir szs_s && (cd rom_s && mv [A-Za-n]*.szs ../szs_s/. && mv [o-z]*.szs ../szs_s/.)
	$(MAKE) clobber
	-mkdir rom_d; (cd szs_d && mv [A-Za-n]*.szs ../rom_d/. && mv [o-z]*.szs ../rom_d/.) && rmdir szs_d
	-mkdir rom_x; (cd szs_x && mv [A-Za-n]*.szs ../rom_x/. && mv [o-z]*.szs ../rom_x/.) && rmdir szs_x
	-mkdir rom_f; (cd szs_f && mv [A-Za-n]*.szs ../rom_f/. && mv [o-z]*.szs ../rom_f/.) && rmdir szs_f
##	-mkdir rom_s; (cd szs_s && mv [A-Za-n]*.szs ../rom_s/. && mv [o-z]*.szs ../rom_s/.) && rmdir szs_s
##	$(MAKE) camera_params
	$(MAKE) data
	$(MAKE) schedule
##	-$(MAKE) rom_d rom_x rom_f rom_s
	-$(MAKE) rom_d rom_x rom_f

rebuild_d:
	-rm -rf szs_d; mkdir szs_d ; (cd rom_d && mv [A-Za-n]*.szs ../szs_d/. && mv [o-z]*.szs ../szs_d/.)
	-rm -rf rom_d; mkdir rom_d ; (cd szs_d && mv [A-Za-n]*.szs ../rom_d/. && mv [o-z]*.szs ../rom_d/.) && rmdir szs_d
	-$(MAKE) rom_d PARALLEL=
rebuild_x:
	-rm -rf szs_x; mkdir szs_x ; (cd rom_x && mv [A-Za-n]*.szs ../szs_x/. && mv [o-z]*.szs ../szs_x/.)
	-rm -rf rom_x; mkdir rom_x ; (cd szs_x && mv [A-Za-n]*.szs ../rom_x/. && mv [o-z]*.szs ../rom_x/.) && rmdir szs_x
	-$(MAKE) rom_x PARALLEL=
rebuild_f:
	-rm -rf szs_f; mkdir szs_f ; (cd rom_f && mv [A-Za-n]*.szs ../szs_f/. && mv [o-z]*.szs ../szs_f/.)
	-rm -rf rom_f; mkdir rom_f ; (cd szs_f && mv [A-Za-n]*.szs ../rom_f/. && mv [o-z]*.szs ../rom_f/.) && rmdir szs_f
	-$(MAKE) rom_f PARALLEL=
rebuild_s:
	-rm -rf szs_s; mkdir szs_s ; (cd rom_s && mv [A-Za-n]*.szs ../szs_s/. && mv [o-z]*.szs ../szs_s/.)
	-rm -rf rom_s; mkdir rom_s ; (cd szs_s && mv [A-Za-n]*.szs ../rom_s/. && mv [o-z]*.szs ../rom_s/.) && rmdir szs_s
	-$(MAKE) rom_s PARALLEL=
rebuild_all:
	-coall
##	-$(MAKE) camera_params
	-$(MAKE) data
	-$(MAKE) schedule
	-$(MAKE) rebuild_d rebuild_x rebuild_f rebuild_s
	-$(MAKE) romPP_d romPP_x romPP_f PARALLEL=
	-$(MAKE) romPP_d romPP_x romPP_f PARALLEL=
	-$(MAKE) rebuild_s
	-$(MAKE) romPP_s PARALLEL=
	-$(MAKE) romPP_s PARALLEL=

fullcourse3::
	-$(MAKE) cleanboot
##	-$(MAKE) rom_d rom_x rom_f rom_s
	-$(MAKE) rom_d rom_x rom_f
	-$(MAKE) romPP_d || $(MAKE) romPP_d
	-$(MAKE) romPP_x || $(MAKE) romPP_x
	-$(MAKE) romPP_f || $(MAKE) romPP_f
##	-$(MAKE) romPP_s || $(MAKE) romPP_s

# フルコース！
fullcourse::
	coall
##	$(MAKE) camera
	$(MAKE) data
	$(MAKE) schedule
	-$(MAKE) romPP_d || $(MAKE) romPP_d

SPECFILE     = spec
IMP_SPECFILE = $(.ALLSRC:M*spec)
SPEC_INCLUDE  = \
	boot.h sys_segment.h spec.segment spec.audio 
# spec_seg_ovl.inc spec_inc_ovl.inc
LMAKEROMOPT = -I$(ZELDA_ROOT) -I.

MAKEROMOPT = $(GMAKEROMOPT) $(LMAKEROMOPT) $(VMAKEROMOPT)

MAKEROMOBJECTS = $(OBJECTS) $(FOREST_DATA)/*.o $(OVLOBJECTS)
MAKEROMFILES = $(SPECFILE) $(SPEC_INCLUDE) $(OVLRELFILES) $(AUDIOFILES) $(NESROM_FILES)


# マップファイルの作成
zelda.map: $(MAKEROMOBJECTS) $(MAKEROMFILES) $(SPECFILE)
	(LANG=C FOREST_DATA=${FOREST_DATA} FOREST_AUDIO=$(FOREST_AUDIO) time $(MAKEROM) -m $(MAKEROMOPT) $(MAKEOPT) -r rom $(IMP_SPECFILE) > zelda.map)


##
## LMAKEOPTIONの定義
##
ifndef NES_VERSION
LMAKEOPTION = FOR_JAPAN=1
endif

LMAKEOPTION += USE_FLASHROM=1
ifdef PARALLEL
LMAKEOPTION += "PARALLEL=$(PARALLEL)"
endif
ifdef HAYAKAWA_LIB
LMAKEOPTION += "HAYAKAWA_LIB=$(HAYAKAWA_LIB)"
endif
ifdef FORCE_CPP
LMAKEOPTION += "FORCE_CPP=$(FORCE_CPP)"
endif
ifdef VMAKEOPT
LMAKEOPTION += "VMAKEOPT=$(VMAKEOPT)"
endif
ifdef VMAKEROMOPT
LMAKEOPTION += "VMAKEROMOPT=$(VMAKEROMOPT)"
endif
ifdef MSG_TOOL
LMAKEOPTION += "MSG_TOOL=$(MSG_TOOL)"
endif
ifdef FTR_DEVSEG
LMAKEOPTION += "FTR_DEVSEG=$(FTR_DEVSEG)"
endif
ifdef FG_TOOL
LMAKEOPTION += "FG_TOOL=$(FG_TOOL)"
endif
ifdef SCENE_TOOL
LMAKEOPTION += "SCENE_TOOL=$(SCENE_TOOL)"
endif
ifdef SCENE_TOOL2
LMAKEOPTION += "SCENE_TOOL2=$(SCENE_TOOL2)"
endif
ifdef SEPARATE_REL
LMAKEOPTION += "SEPARATE_REL=$(SEPARATE_REL)"
LMAKEOPT += "-DSEPARATE_REL"
endif
ifdef __GCC__
LMAKEOPTION += "__GCC__=$(__GCC__)"
endif
MAKEOPTION_D = $(LMAKEOPTION) $(VMAKEOPTION) ROM_D= USE_THREAD_PROFILE= USE_COUNT= DEBUG_CAMERA= USE_DEBUG_MALLOC= VIDEO_AUTO= ISVIEWER= ## FTR_DEVSEG= 

MAKEOPTION_X = $(LMAKEOPTION) $(VMAKEOPTION) ROM_X= USE_THREAD_PROFILE= USE_COUNT= DEBUG_CAMERA= USE_DEBUG_MALLOC= VIDEO_AUTO= ISVIEWER= FTR_DEVSEG= SEPARATE_REL=SEPARATE_REL

MAKEOPTION_F = $(LMAKEOPTION) $(VMAKEOPTION) ROM_F=1 ROM_ROM=1 FINAL_ROM=1 FTR_DEVSEG=1 SEPARATE_REL=SEPARATE_REL

MAKEOPTION_S = $(LMAKEOPTION) $(VMAKEOPTION) ROM_S= ROM_ROM= SHOW_VERSION= FTR_DEVSEG=

LMAKEFLAGS = -f ../$(MAKEFILE)
MAKEFLAGS = $(GMAKEFLAGS) $(LMAKEFLAGS) $(VMAKEFLAGS)

zelda_d.map:
	@echo ": Entering directory \`./rom_d/'"
	mkdirhier rom_d
	cd rom_d && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_D) zelda.map
	@echo ": Leaving directory \`./rom_d/'"

zelda_x.map:
	@echo ": Entering directory \`./rom_x/'"
	mkdirhier rom_x
	cd rom_x && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_X) zelda.map
	@echo ": Leaving directory \`./rom_x/'"

zelda_f.map:
	@echo ": Entering directory \`./rom_f/'"
	mkdirhier rom_f
	cd rom_f && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_F) zelda.map
	@echo ": Leaving directory \`./rom_f/'"

zelda_s.map:
	@echo ": Entering directory \`./rom_s/'"
	mkdirhier rom_s
	cd rom_s && $(MAKE) $(VMAKEFLAGS) $(MAKEOPTION_S) zelda.map
	@echo ": Leaving directory \`./rom_s/'"

spec.i:$(SPECFILE) spec.segment spec_seg_ovl.inc spec_inc_ovl.inc boot.h sys_segment.h
	(LANG=C FOREST_DATA=${FOREST_DATA} FOREST_AUDIO=$(FOREST_AUDIO) $(CC) -E $(MAKEROMOPT) $(MAKEOPT) $(IMP_SPECFILE) > spec.i.tmp)
	mv spec.i.tmp spec.i


MAKE_VERSION = $(FOREST_TOOL)/make_version.sh
## version.o:version.c version.h ./version_data.h
./version_data.h::
	$(MAKE_VERSION) $(MAKEOPTION) > $(.TARGET)

## $(MAKEROMOBJECTS) : $(NM_TBL_DECLS)_i.h $(AC_FN_NM_DECL)_i.h

rom: $(MAKEROMOBJECTS) $(MAKEROMFILES)
	$(MAKE) -f ../GNUmakefile version.o
	rm -f forest
ifdef __GCC__
	(LANG=C FOREST_DATA=${FOREST_DATA} FOREST_AUDIO=$(FOREST_AUDIO) FOREST_LIB=$(FOREST_LIB) ROOT=$(ROOT) time $(MAKEROM) -d $(MAKEROMOPT) $(MAKEOPT) -r rom.tmp ../$(SPECFILE) > $(ZELDA_INFO))
else
	(LANG=C FOREST_DATA=${FOREST_DATA} FOREST_AUDIO=$(FOREST_AUDIO) FOREST_LIB=$(FOREST_LIB) ROOT=$(ROOT) time $(MAKEROM) -d $(MAKEROMOPT) $(MAKEOPT) -r rom.tmp $(SPECFILE) > $(ZELDA_INFO))
endif
	#$(NRDC) -b -i$(NRDC_INITIAL_CODE) -t$(NRDC_GAME_TITLE) -v$(NRDC_ROM_VERSION) rom.tmp
	mv -f rom.tmp rom
	#-($(NM) -B -v zelda | tee zelda.nm1 | egrep "^8" > zelda.nm)&
ifdef PARTNER
	n64deb zelda		# パートナー用変換
endif
	@echo "- セグメントマップ $(SEGMENT_MAP) の生成（中止しないこと） -"
	../MkSegmentMap.pl  $(ZELDA_INFO) > $(SEGMENT_MAP)
	@echo "	セグメントマップのソートは SegmentMapSort.sh rom_?/$(SEGMENT_MAP) を行う"
	@echo "- ＲＯＭマップ生成シェル $(MAKE_ROMMAP_SHELL) を生成（中止しないこと）  -"
	@touch ../$(MAKE_ROMMAP_SHELL); chmod 777 ../$(MAKE_ROMMAP_SHELL)
#	@cp ../$(ROMMAP_KEYLIST)  $(ROMMAP_KEYLIST)
#	../MkRommapShell.pl $(ROMMAP_KEYLIST) > ../$(MAKE_ROMMAP_SHELL)
#	@rm -rf $(ROMMAP_KEYLIST)
	../MkRommapShell.pl ../$(ROMMAP_KEYLIST) > ../$(MAKE_ROMMAP_SHELL)
	@echo "	ＲＯＭマップの生成は $(MAKE_ROMMAP_SHELL) rom_?/$(SEGMENT_MAP) を行う"
	$(MAKEMASK) rom		# ROM焼き用変換
	@-if [ \( ${USER} = "###yoshida" -o ${USER} = "###hayakawa" \) -a -f /home/iwawaki/AIFC_FILES/capture.mv ]; then \
	    audiopanel -nodisplay -nofork -outlevels 2; \
	    movieplayer -l 0 -N -z 0.5 -b q -v /home/iwawaki/AIFC_FILES/capture.mv > /dev/null; \
	else \
	    if [ -x ../bell.sh ]; then \
		    ../bell.sh; \
	    else \
	        if [ -x ./bell.sh ]; then \
		        ./bell.sh; \
	        fi; \
	    fi; \
	fi

ifdef __GCC__
LDMAPOPT = -M
else
LDMAPOPT = -m
endif

## オーバーレイなオブジェクトから 新しくosなどの関数を呼ぼうとすると
## Undefined text symbol "strcmp" -- 1st referenced by codesegment.o.
## のようにリンクエラーになります。そういう場合はこの下に追加してください。
#OVLSYMS =
#OVLSYMS += -u sprintf
#OVLSYMS += -u vaprintf
ifndef ROM_F
OVLSYMS += -u DisplayArena
endif
##OVLSYMS += -u KillRspRdp
##OVLSYMS += -u LoadFragment2
##OVLSYMS += -u LoadFragmentFix2
##OVLSYMS += -u LoadFragmentFix3
ifdef SEPARATE_REL
OVLSYMS += -u LoadFragmentFix4
else
OVLSYMS += -u LoadFragmentFix2
endif
##OVLSYMS += -u __cmpdi2
##OVLSYMS += -u __fixsfdi
##OVLSYMS += -u __floatdidf
OVLSYMS += -u __osEPiRawStartDma
OVLSYMS += -u __osEepPifRam
OVLSYMS += -u __osGetActiveQueue
OVLSYMS += -u __osGetCurrFaultedThread
OVLSYMS += -u __osGetFpcCsr
##OVLSYMS += -u __osGetHWIntrRoutine
OVLSYMS += -u __osMalloc
##OVLSYMS += -u __osSetFpcCsr
##OVLSYMS += -u __osSetHWIntrRoutine
OVLSYMS += -u __ull_to_d
OVLSYMS += -u _dbg_hungup
OVLSYMS += -u bcmp
OVLSYMS += -u cosf
OVLSYMS += -u coss
OVLSYMS += -u facos
OVLSYMS += -u fatan2
OVLSYMS += -u fmodf
OVLSYMS += -u fqrand
OVLSYMS += -u fround
OVLSYMS += -u ftan
OVLSYMS += -u gfxprint_init
OVLSYMS += -u guLoadMatrixi2f
OVLSYMS += -u guLookAt
OVLSYMS += -u guLookAtHilite
OVLSYMS += -u guMtxIdent
OVLSYMS += -u guOrtho
OVLSYMS += -u guPerspective
OVLSYMS += -u guPosition
OVLSYMS += -u guRotate
OVLSYMS += -u guS2DInitBg
OVLSYMS += -u guScale
OVLSYMS += -u guTranslate
##OVLSYMS += -u malloc_DEBUG
OVLSYMS += -u memset
OVLSYMS += -u msleep
OVLSYMS += -u osAfterPreNMI
OVLSYMS += -u osAiGetLength
OVLSYMS += -u osAiSetFrequency
OVLSYMS += -u osContGetQuery
OVLSYMS += -u osContGetReadData
OVLSYMS += -u osContInitX
OVLSYMS += -u osContSetCh
OVLSYMS += -u osContStartQuery
OVLSYMS += -u osContStartReadData
OVLSYMS += -u osEPiLinkHandle
OVLSYMS += -u osEPiReadIo
OVLSYMS += -u osEPiWriteIo
OVLSYMS += -u osGetIntMask
OVLSYMS += -u osGetMemSize
OVLSYMS += -u osInitializeCPP
OVLSYMS += -u osMotorInit
OVLSYMS += -u osGbpakInit
OVLSYMS += -u osBbRtcInit
OVLSYMS += -u osBbRtcGet
##OVLSYMS += -u osBbFCreate
##OVLSYMS += -u osBbFOpen
##OVLSYMS += -u osBbFWrite
##OVLSYMS += -u osBbFClose
##OVLSYMS += -u osBbFDelete
##OVLSYMS += -u osBbFInit

##OVLSYMS += -u __osMotorAccess

OVLSYMS += -u osPfsAllocateFile
OVLSYMS += -u osPfsDeleteFile
OVLSYMS += -u osPfsFileState
OVLSYMS += -u osPfsFindFile
OVLSYMS += -u osPfsFreeBlocks
OVLSYMS += -u osPfsInitPak
OVLSYMS += -u osPfsNumFiles
OVLSYMS += -u osPfsReadWriteFile
OVLSYMS += -u osPfsRepairId
##OVLSYMS += -u osSetTime
OVLSYMS += -u osSpTaskLoad
OVLSYMS += -u osSpTaskStartGo
OVLSYMS += -u osSpTaskYield
OVLSYMS += -u osSpTaskYielded
OVLSYMS += -u osStopThread
OVLSYMS += -u osStopTimer
##OVLSYMS += -u osViExtendVStart
OVLSYMS += -u osViGetCurrentFramebuffer
OVLSYMS += -u osViGetNextFramebuffer
OVLSYMS += -u osViModeFpalLan1
##OVLSYMS += -u osViModeNtscHpf1
##OVLSYMS += -u osViModeNtscHpn1
OVLSYMS += -u osViSetEvent
OVLSYMS += -u osViSwapBuffer
##OVLSYMS += -u osVoiceCheckWord
##OVLSYMS += -u osVoiceClearDictionary
##OVLSYMS += -u osVoiceControlGain
##OVLSYMS += -u osVoiceGetReadData
##OVLSYMS += -u osVoiceInit
##OVLSYMS += -u osVoiceMaskDictionary
##OVLSYMS += -u osVoiceSetWord
##OVLSYMS += -u osVoiceStartReadData
##OVLSYMS += -u osVoiceStopReadData
OVLSYMS += -u osWritebackDCacheAll
OVLSYMS += -u pad_on_trigger
OVLSYMS += -u utGetTime_ms
OVLSYMS += -u sinf
OVLSYMS += -u sins
OVLSYMS += -u sqrtf
OVLSYMS += -u strcmp
OVLSYMS += -u strcpy
OVLSYMS += -u usleep
ifdef USE_FLASHROM
OVLSYMS += -u osFlashSectorErase
OVLSYMS += -u osFlashInit
OVLSYMS += -u osFlashReadId
OVLSYMS += -u osFlashAllErase
OVLSYMS += -u osFlashWriteBuffer
OVLSYMS += -u osFlashWriteArray
OVLSYMS += -u osFlashReadArray
endif #/* defined(USE_FLASHROM) */

ifdef LEOFILEOUT
OVLSYMS += -u FileInit
OVLSYMS += -u fopen
OVLSYMS += -u fclose
OVLSYMS += -u fread
OVLSYMS += -u fseek
OVLSYMS += -u ftell
endif #/* defined(LEOFILEOUT) */

ifdef USE_THREAD_PROFILE
OVLSYMS += -u osThreadProfileReadTime
OVLSYMS += -u osThreadProfileReadCount
OVLSYMS += -u osThreadProfileClear
OVLSYMS += -u osThreadProfileInit
OVLSYMS += -u osThreadProfileStart
OVLSYMS += -u process_profile_init
endif #/* defined(USE_THREAD_PROFILE) */

## #if 1 /* USE_FAMICOM_EMU */
OVLSYMS += -u osViModeNtscLpn1
OVLSYMS += -u osAiGetStatus
## #endif

$(AUDIOSEGMENT:.o=.map): $(AUDIOSEGMENT)
$(AUDIOSEGMENT): $(AUDIOOBJECTS)
	rm -f $(AUDIOSEGMENT)
	$(LD)  -o $(AUDIOSEGMENT) -r $(AUDIOOBJECTS) $(LDFLAGS_WIDHOUT_LDLIBS) $(LLDLIBS_AUDIO) $(LDMAPOPT) > $(AUDIOSEGMENT:.o=.map)

$(BOOTSEGMENT:.o=.map): $(BOOTSEGMENT)
$(BOOTSEGMENT): $(BOOTOBJECTS) $(MAKEFILE)
	rm -f $(BOOTSEGMENT)
	$(LD)  -o $(BOOTSEGMENT) -r $(BOOTOBJECTS) $(OVLSYMS) $(LDFLAGS_WIDHOUT_LDLIBS) $(LLDLIBS_BOOT) $(LDMAPOPT) > $(BOOTSEGMENT:.o=.map)

$(CODESEGMENT:.o=.map): $(CODESEGMENT)
#$(CODESEGMENT): $(CODEOBJECTS) $(ULTRALIB2) $(NUSLIB2) $(U64LIB2) $(C64LIB2)
$(CODESEGMENT): $(CODEOBJECTS)
	rm -f $(CODESEGMENT)
	$(LD)  -o $(CODESEGMENT) -r $(CODEOBJECTS) $(LDFLAGS_WIDHOUT_LDLIBS) $(LLDLIBS_CODE) $(LDMAPOPT) > $(CODESEGMENT:.o=.map)

$(COBJECT_EN) $(COBJECT_EN:.o=.map): $(COBJECTS_EN)
	$(LD)  -o $(COBJECT_EN) -r $(COBJECTS_EN) $(LDFLAGS) $(LDMAPOPT) > $(COBJECT_EN:.o=.map)

$(COBJECT_EFF) $(COBJECT_EFF:.o=.map): $(COBJECTS_EFF)
	$(LD)  -o $(COBJECT_EFF) -r $(COBJECTS_EFF) $(LDFLAGS) $(LDMAPOPT) > $(COBJECT_EFF:.o=.map)

$(COBJECT_Z) $(COBJECT_Z:.o=.map): $(COBJECTS_Z)
	$(LD)  -o $(COBJECT_Z) -r $(COBJECTS_Z) $(LDFLAGS) $(LDMAPOPT) > $(COBJECT_Z:.o=.map)

$(COBJECT_SYS) $(COBJECT_SYS:.o=.map): $(COBJECTS_SYS)
	$(LD)  -o $(COBJECT_SYS) -r $(COBJECTS_SYS) $(LDFLAGS) $(LDMAPOPT) > $(COBJECT_SYS:.o=.map)

## 第１水準フォント データ
CC_FLAGS  = -Wab,-r4300_mul -mips2 -O -xansi -signed -fullwarn -prototypes -Xcpluscomm -I/usr/include/PR -non_shared -G 0 -c -Dyj
##LASFLAGS = -Wab,-r4300_mul -mips2 -O2 -xansi -signed -prototypes -Xcpluscomm -I/usr/include/PR -non_shared -G 0 -c -Dyj

cfb.o:cfb.c
	$(CC) $(LCOPTS) $(LCINCS) $(MKDEPOPT) $(WOFF) $(LCDEFS) -c cfb.c

##
###    終末リセット関係
####
#####
the_end:
	make -f the_end_data.mk

##
###  ♪カメラ〜〜〜〜〜〜〜〜〜〜〜〜〜
####   カメラ〜〜〜〜〜〜〜〜〜〜〜〜〜
#####  つよいぞカメラッつよいぞカメラッ
###### つよいぞカ〜メ〜ラ〜〜〜〜〜~

camera: $(CAMDATABASE) $(TOOLBIN)/makecamera
	$(TOOLBIN)/makecamera -l -d$(CAMDATINSTALLROOT) $(CAMDATABASE)

camera_params:  $(CAMPARAMH)

$(CAMPARAMH):  $(CAMDATABASE) $(TOOLBIN)/makecamera
	$(TOOLBIN)/makecamera -td -q $(CAMDATABASE)

../$(CAMPARAMH):  ../../data/$(CAMERAZDB)
	$(TOOLBIN)/makecamera -td -q ../../data/$(CAMERAZDB)
	mv $(CAMPARAMH) ..

../../data/$(CAMERAZDB):
	@if [ ! -l ../../data/camera ]; \
	then \
	    if [ `echo ${HOST} | awk '{print substr($$0, 1, 3)}'` = "srd" ]; \
	    then  ln -s /project/ZELDA/data/camera ../../data; \
	    else  echo "please contact to SRD ..."; \
	    fi; \
	fi
	@if [ ! -r ../../data/$(CAMERAZDB) ]; \
	then \
	    cp ../../data/camera/$(CAMERAZDB) ../../data; \
	fi

$(CAMDATABASE):  ${ZELDA_ROOT}/data/camera/${@F}
	if [ -r $@ ] && [ ! -w $@ ]; \
	then  chmod +w $@; \
	fils -l schedule_event.lst m_ev_sche_dat.h m_ev_sche_def.h

	cp ${ZELDA_ROOT}/data/camera/${@F} $@

##
###
schedule: m_ev_sche_dat.h m_ev_sche_def.h
m_ev_sche_dat.h m_ev_sche_def.h: schedule_event.lst $(EVENT_SCHEDULER)
	$(EVENT_SCHEDULER)

###
##

zelda.gdis:				# 逆アセンブルリストの作成
	gdis -S \
$(GDISOPT) \
-I.. \
-I/usr/local/srd/PR/src/libu64 \
-I/usr/local/srd/PR/src/libc64 \
-I/usr/src/PR/libultra/gu zelda > $@

# 逆アセンブルリストの作成
zelda_d.gdis::
	cd rom_d && $(MAKE) $(MAKEFLAGS) zelda.gdis "GDISOPT=$(GDISOPT)"
zelda_x.gdis::
	cd rom_x && $(MAKE) $(MAKEFLAGS) zelda.gdis "GDISOPT=$(GDISOPT)"
zelda_f.gdis::
	cd rom_f && $(MAKE) $(MAKEFLAGS) zelda.gdis "GDISOPT=$(GDISOPT)"
zelda_s.gdis::
	cd rom_s && $(MAKE) $(MAKEFLAGS) zelda.gdis "GDISOPT=$(GDISOPT)"

cleanall:
	rm -rf rom_f 
#	rm -rf rom_d rom_x rom_s rom_f 
#	rm -f rom*/*.o rom*/Makedepend rom*/*.map rom*/*. rom*/*.oo rom*/*.gdis rom*/*.a
cleanboot:				# ptstart()/isPrintfInit()を呼んでいる
	rm -f */boot.o
	rm -f */padmgr.o */main.o

#ifdef CLEAN_ALL) || defined(USE_COUNT) || defined(USE_TIMER
	#rm -f */graph.o
#endif
#ifdef CLEAN_ALL) || defined(USE_ACTOR_NAME_TABLE
	#rm -f */m_actor_dlftbls.o */m_std_dma.o
#endif
#ifdef CLEAN_ALL) || defined(USE_VISCVG
	#rm -f */game.o
#endif
#ifdef CLEAN_ALL) || defined(SHOW_VERSION
	#rm -f */main.o 				# DISABLE_FAULT_DISPLAY	
	#rm -f */padmgr.o			# SHOW_VERSION
#endif
#ifdef CLEAN_ALL) || defined(DEBUG_MODE_NOINPUT
	#rm -f */game.o */graph.o */m_debug.o */m_demo.o */m_play.o */m_player.o	# DEBUG_MODE_NOINPUT
#endif
##if defined(CLEAN_ALL) || defined(DEBUG_MODE_NOINPUT)
##	rm -f */game.o */graph.o */z_debug.o */z_demo.o */z_file_choose.o */z_kaleido.o */z_kaleido_scope.o */z_kankyo.o */z_message.o */z_play.o */z_player.o	# DEBUG_MODE_NOINPUT
##endif
#ifdef CLEAN_ALL) || defined(GATEWAY_VERSION
#	rm -f */graph.o
#endif

cleancode:				# リンクだけをやり直す
	rm -f */$(CODESEGMENT)
cleanbootseg:				# リンクだけをやり直す
	rm -f */$(BOOTSEGMENT)
cleanrom:				# makeromだけをやり直す
	rm -f */rom
cleandepend:				# Makedependだけを消す
	rm -f */Makedepend
data:
	cd $(FOREST_DATA) && coall && ./shape_all -f

data1:
	cd $(FOREST_DATA) && coall && ./shape_all

scene:
	cd $(FOREST_DATA) && $(TOOLBIN)/scene_make

keep:
	cd $(FOREST_DATA) && ./keep

dma_make::
	cd $(FOREST_DATA) && ./dma_make

mes_make::
	cd $(FOREST_DATA) && ./mes_make

SUBDIR_D = rom_d
SUBDIR_X = rom_x
SUBDIR_F = rom_f

#
# 製品ＲＯＭの生成
#
# （全てのオブジェクトを削除した後、全データと全ソースの更新を行い、メイクする
#
final::
	@echo "## 製品版ＲＯＭの生成 ##"
	cd ../data; coall; shape_all
	make cleanall
	coall;
	make audio_update;
	make clobber
	make schedule
	make -k PARALLEL= romPP_f | tee log
	rm -f rom_f/rom
	make -k PARALLEL= romPP_f | tee -a log
	@echo "## デバッグ情報のバックアップを取ること！！（saverom.sh f）##"

# ROM用バージョンの作成
rom_x::
	@echo ": Entering directory \`./$(SUBDIR_X)/'"
	mkdirhier $(SUBDIR_X)
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_X)
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_X)
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_X) rom
	@echo ": Leaving directory \`./$(SUBDIR_X)/'"

# デバッグバージョン
rom_d::
	@echo ": Entering directory \`./$(SUBDIR_D)/'"
	mkdirhier $(SUBDIR_D)
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_D)
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_D)
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_D) rom
	@echo ": Leaving directory \`./$(SUBDIR_D)/'"

# 最終ＲＯＭバージョン
rom_f::
	@echo ": Entering directory \`./$(SUBDIR_F)/'"
	mkdirhier $(SUBDIR_F)
#	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_F)
#	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_F)
	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) rom $(MAKEOPTION_F) -f ../GNUmakefile
	@echo ": Leaving directory \`./$(SUBDIR_F)/'"

# ショウバージョン
rom_s::
	@echo ": Entering directory \`./rom_s/'"
	mkdirhier rom_s
	cd rom_s && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_S)
	cd rom_s && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_S)
	cd rom_s && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_S) rom
	@echo ": Leaving directory \`./rom_s/'"

romPP_d::
	@echo ": Entering directory \`./$(SUBDIR_D)/'"
	mkdirhier $(SUBDIR_D)
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_D)
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_D)
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_D) romPP
	-(cd $(SUBDIR_D) && $(MAKEMASK) romPP)
	@echo ": Leaving directory \`./$(SUBDIR_D)/'"

romPP_x::
	@echo ": Entering directory \`./$(SUBDIR_X)/'"
	mkdirhier $(SUBDIR_X)
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_X)
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_X)
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_X) romPP
	-(cd $(SUBDIR_X) && $(MAKEMASK) romPP)
	@echo ": Leaving directory \`./$(SUBDIR_X)/'"

romPP_f::
	@echo ": Entering directory \`./$(SUBDIR_F)/'"
	mkdirhier $(SUBDIR_F)
##	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_F)
##	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_F)
	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_F) -f ../GNUmakefile romPP
	-(cd $(SUBDIR_F) && $(MAKEMASK) romPP && rommd -f 1024 -c 1 romPP)
	@echo ": Leaving directory \`./$(SUBDIR_F)/'"

romPP_s::
	@echo ": Entering directory \`./rom_s/'"
	mkdirhier rom_s
	cd rom_s && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_S)
	cd rom_s && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_S)
	cd rom_s && $(MAKE) $(MAKEFLAGS) $(MAKEOPTION_S) romPP
	@echo ": Leaving directory \`./rom_s/'"

romPP:rom ../linux_zelda_press
#	$(.ALLSRC:M*zelda_press) -p2
	../linux_zelda_press -p2
	@if [ -x ../bell.sh ]; then \
	    ../bell.sh; \
	else \
	    if [ -x ./bell.sh ]; then \
	        ./bell.sh; \
	    fi; \
	fi

rom_d/rom:rom_d
rom_x/rom:rom_x
rom_f/rom:rom_f
rom_s/rom:rom_s
rom_d/romPP:romPP_d
rom_x/romPP:romPP_x
rom_f/romPP:romPP_f
rom_s/romPP:romPP_s

install::
	-rm /project/ZELDA/ROM/rom
	cp rom_d/rom /project/ZELDA/ROM/rom_d
	cp rom_x/rom /project/ZELDA/ROM/rom_x
	cp rom_f/rom /project/ZELDA/ROM/rom_f
	cp rom_s/rom /project/ZELDA/ROM/rom_s
	ln /project/ZELDA/ROM/rom_d /project/ZELDA/ROM/rom_d_`date '+%y-%m-%d_%H:%M:%S'`
	ln /project/ZELDA/ROM/rom_x /project/ZELDA/ROM/rom_x_`date '+%y-%m-%d_%H:%M:%S'`
	ln /project/ZELDA/ROM/rom_f /project/ZELDA/ROM/rom_f_`date '+%y-%m-%d_%H:%M:%S'`
	ln /project/ZELDA/ROM/rom_s /project/ZELDA/ROM/rom_s_`date '+%y-%m-%d_%H:%M:%S'`

##main.o:sys_heap.h
## m_actor_dlftbls.o:m_actor_dlftbls.decl
## m_actor_profile.o:m_actor_dlftbls.decl
## m_scene.o:m_actor_dlftbls.decl

# 実体のないセグメントは除外する
m_segment.decl:spec.i
	egrep include spec.i | \
egrep -v '(\.|hilite|fifobuffer|yieldbuffer|SystemDynamic|dramstackbuffer|yieldbuffer|zbuffer|rcp_dynamic|rcp_cfb|rcp_zb|SystemHeap)' | \
sed -e 's/[ 	]*include[ 	]*"\(.*\)"[ 	]*/_DECL_(\1)/' \
> m_segment.decl.tmp
	mv m_segment.decl.tmp m_segment.decl

../rom_d/m_segment.decl:m_segment.decl
../rom_x/m_segment.decl:m_segment.decl
../rom_f/m_segment.decl:m_segment.decl
../rom_s/m_segment.decl:m_segment.decl

MAKE_SPEC_SEG_OVL = $(FOREST_TOOL)/make_spec_seg_ovl.sh
MAKE_SPEC_INC_OVL = $(FOREST_TOOL)/make_spec_inc_ovl.sh

spec_seg_ovl.inc:spec_ovl.dat $(MAKE_SPEC_SEG_OVL)
	$(MAKE_SPEC_SEG_OVL) $(SEPARATE_REL) < $(.ALLSRC:M*.dat) > spec_seg_ovl.inc~$$$$~ && chmod 444 spec_seg_ovl.inc~$$$$~ && mv spec_seg_ovl.inc~$$$$~ spec_seg_ovl.inc
spec_inc_ovl.inc:spec_ovl.dat $(MAKE_SPEC_INC_OVL)
	$(MAKE_SPEC_INC_OVL) $(SEPARATE_REL) < $(.ALLSRC:M*.dat) > spec_inc_ovl.inc~$$$$~ && chmod 444 spec_inc_ovl.inc~$$$$~ && mv spec_inc_ovl.inc~$$$$~ spec_inc_ovl.inc

## m_std_dma.o:m_segment_decl.inc m_segment.decl
## m_std_dma_data.o:m_segment_decl.inc m_segment.decl

## 依存ファイル(depend)をつくる
#DEPEND_FILES = $(COBJECTS:.o=.dep)
#.SUFFIXES : .dep
#.c.dep :
#	$(CC) $(CFLAGS) -M $(.IMPSRC) > $(.PREFIX).dep
#.cxx.dep .C.dep .c++.dep :
#	$(CXX) $(CXXFLAGS) -M $(.IMPSRC) > $(.PREFIX).dep
#depend : $(DEPEND_FILES)

#test
test:test.o
	cc -non_shared -o test test.o
touch_m_actor_dlftbls.decl:
	@echo "m_actor_dlftbls.declの順番は大丈夫ですか？"
	touch 01010001 m_actor_dlftbls.decl
	touch 01010000 rom_[dfxs]/m_actor.o rom_[dfxs]/m_actor_dlftbls.o

figure:
	@echo 'Makedependのリフレッシュ'
	@make Makedepend.new
	@echo 'rom_d/Makedependのリフレッシュ'
	@( cd rom_d && make -f ../$(MAKEFILE) Makedepend.new )

FOREST_TAG:
	etags --typedefs-and-c++ \
/usr/local/srd/PR/patch/PR/*.h \
/usr/include/PR/*.h 	
	sed -n -e "s/\(extern .*(.*)\)\;/\1{}/p" /usr/include/PR/*.h > temp_tags_work.h
	etags --typedefs-and-c++ --append temp_tags_work.h
	etags --typedefs-and-c++ --append \
/usr/include/float.h \
/usr/include/limits.h \
/usr/include/sgidefs.h \
/usr/include/standards.h \
/usr/include/stdarg.h \
/usr/include/stddef.h \
${FOREST_LIB}/*.h \
${FOREST_AUDIO}/*.h \
${FOREST_ROOT}/lib/*/*.[ch] \
${FOREST_ROOT}/lib/*.h
	etags --typedefs-and-c++ --append \
/usr/local/srd/PR/src/libu64/*.[ch] \
/usr/local/srd/PR/src/libc64/*.[ch]
	etags --typedefs-and-c++ --append *.h
	etags --typedefs-and-c++ --append a*.c
	etags --typedefs-and-c++ --append [^a]*.c
	etags --typedefs-and-c++ --append *.inc
	etags --typedefs-and-c++ --append *.c_inc
	etags --typedefs-and-c++ --append *.decl

# /* tags-query-replace tags-search 用 */
ZELDA_TAG2:
	find ${PWD} -type f -name "*.h" -print | sort | awk '{ printf("\014\n%s,0\n", $$0); }' - >  TAGS
	find ${PWD} -type f -name "*.c" -print | sort | awk '{ printf("\014\n%s,0\n", $$0); }' - >>  TAGS

ifdef __GCC__XXX
.c.o :
ifdef FORCE_CPP
ifdef __MAKE_VERBOSE__
	@echo "cat $(.IMPSRC)|/home/hayakawa/prj/tool/gccfilter $(.IMPSRC)| $(CXX) -I.. $(CFLAGS) -Dthis=_this -c -x c++ - -o $(.TARGET)"
else
	@echo '$(CXX) -I.. $$(CXXFLAGS) -c $(.IMPSRC)'
endif
	@cat $(.IMPSRC)|/home/hayakawa/prj/tool/gccfilter $(.IMPSRC)| $(CXX) -I.. $(CXXFLAGS) -Dthis=_this -c -x c++ - -o $(.TARGET)
else
ifdef __MAKE_VERBOSE__
	@echo "cat $(.IMPSRC)|/home/hayakawa/prj/tool/gccfilter $(.IMPSRC)| $(CC) -I.. $(CFLAGS) -c -x c - -o $(.TARGET)"
else
	@echo '$(CC) -I.. $$(CFLAGS) -c $(.IMPSRC)'
endif
	@cat $(.IMPSRC)|/home/hayakawa/prj/tool/gccfilter $(.IMPSRC)| $(CC) -I.. $(CFLAGS) -c -x c - -o $(.TARGET)
endif
endif

###
### LEOFILEOUTが影響するファイルを削除
###
##CFILES_LEOFILEOUT = \
##demo_camera.c first_game.c is_debug.c z_demo.c z_kankyo_debug.c z_play.c
##OBJFILES_LEOFILEOUT = $(CFILES_LEOFILEOUT:.c=.o)
##
##RM_LEOFILEOUT:
##	(cd rom_d && rm -f $(OBJFILES_LEOFILEOUT))

#
# m_name_table_declS.[ch]のプリプロセスを行う($(NM_TBL_DECLS).iは単なる中間ファイル)
#
NM_TBL_DECL_FILES =
NM_TBL_DECL_FILES += m_ftr_name.decl
NM_TBL_DECL_FILES += m_item_name.decl
NM_TBL_DECL_FILES += m_name_table0.decl
NM_TBL_DECL_FILES += m_name_table1.decl
NM_TBL_DECL_FILES += m_name_table4.decl
NM_TBL_DECL_FILES += m_name_table5.decl
NM_TBL_DECL_FILES += m_name_table8.decl
NM_TBL_DECL_FILES += m_name_table9.decl
NM_TBL_DECL_FILES += m_name_tableA.decl
NM_TBL_DECL_FILES += m_ev_npc_tables.decl
NM_TBL_DECL_FILES += m_npc_tables.decl


$(NM_TBL_DECLS)_i.h: $(NM_TBL_DECL_FILES)

$(NM_TBL_DECLS)_i.h:$(NM_TBL_DECLS).c EnumToDefine.pl
	@echo "	$(NM_TBL_DECLS).cのプリプロセスを行う"
	/usr/bin/cc -fullwarn -xansi -Xcpluscomm -wlint,-fhp -nostdinc -MDupdate Makedepend -woff 813,828,852 -E $(IMP_NM_TBL_DECLS_C) > $(NM_TBL_DECLS).i
	$(.ALLSRC:M*EnumToDefine.pl) $(NM_TBL_DECLS).i > $(.TARGET)

#
# m_name_table_declS.[ch]関係の変更時に全コンパイルを避けるための touch 
#
decl_touch ::
	@echo "m_name_table_* 関係の touch を行う"
	touch -t 01010000 $(NM_TBL_DECL_FILES) $(NM_TBL_DECLS).h 
	touch -t 01010000 $(NM_TBL_DECLS).c \
			  $(NM_TBL_DECLS).i \
			  rom_[dxf]/$(NM_TBL_DECLS)_i.h
	touch -t 01010000 m_name_table.h EnumToDefine.pl
#
# m_name_table_declS.[ch]のプリプロセスを単独生成する
#
# デバック用
decl_d ::
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_D)
#
# m_name_table_declS.[ch]のプリプロセスを削除する
#
# デバック用
cls_decl_d ::
	rm -f $(SUBDIR_D)/$(NM_TBL_DECLS)_i.h

#
# m_name_table_declS.[ch]のプリプロセスを単独生成する
#
# ＲＯＭ焼きバージョン用
decl_x ::
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_X)
#
# m_name_table_declS.[ch]のプリプロセスを削除する
#
# ＲＯＭ焼きバージョン用
cls_decl_x ::
	rm -f $(SUBDIR_X)/$(NM_TBL_DECLS)_i.h

#
# m_name_table_declS.[ch]のプリプロセスを単独生成する
#
# 最終ＲＯＭバージョン用
decl_f ::
	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) $(NM_TBL_DECLS)_i.h $(MAKEOPTION_F)
#
# m_name_table_declS.[ch]のプリプロセスを削除する
#
# 最終ＲＯＭバージョン用
cls_decl_f ::
	rm -f $(SUBDIR_F)/$(NM_TBL_DECLS)_i.h


#
# ac_furniture_name_decl.cのプリプロセスを行う
# ($(AC_FN_NM_DECL)_i.hは単なる中間ファイル)
#
$(AC_FN_NM_DECL)_i.h:ac_ftr_dlftbls.decl
$(AC_FN_NM_DECL)_i.h:$(AC_FN_NM_DECL).c EnumToDefine.pl
	@echo "	$(AC_FN_NM_DECL).cのプリプロセスを行う"
	/usr/bin/cc -fullwarn -xansi -Xcpluscomm -wlint,-fhp -nostdinc -MDupdate Makedepend -woff 813,828,852 -E $(IMP_AC_FN_NM_DECL_C) > $(AC_FN_NM_DECL).i
	$(.ALLSRC:M*EnumToDefine.pl) $(AC_FN_NM_DECL).i  > $(.TARGET)

#
# ac_furniture_name_decl.cの変更時に全コンパイルを避けるための touch 
#
fn_decl_touch ::
	@echo "ac_furniture_name 関係の touch を行う"
	touch -t 01010000  $(AC_FN_NM_DECL).c
	touch -t 01010000  ac_furniture_name.h ac_ftr_dlftbls.decl
	touch -t 01010000  rom_[dxf]/$(AC_FN_NM_DECL)_i.h $(AC_FN_NM_DECL).i EnumToDefine.pl
#
# ac_furniture_name_decl.cのプリプロセスを単独生成する
#
# デバック用
fn_decl_d ::
	cd $(SUBDIR_D) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_D)
#
# ac_furniture_name_decl.cのプリプロセスを削除する
#
# デバック用
cls_fn_decl_d ::
	rm -f $(SUBDIR_D)/$(AC_FN_NM_DECL)_i.h

#
# ac_furniture_name_decl.cのプリプロセスを単独生成する
#
# ＲＯＭ焼きバージョン用
fn_decl_x ::
	cd $(SUBDIR_X) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_X)
#
# ac_furniture_name_decl.cのプリプロセスを削除する
#
# ＲＯＭ焼きバージョン用
cls_fn_decl_x ::
	rm -f $(SUBDIR_X)/$(AC_FN_NM_DECL)_i.h

#
# ac_furniture_name_decl.cのプリプロセスを単独生成する
#
# 最終ＲＯＭバージョン用
fn_decl_f ::
	cd $(SUBDIR_F) && $(MAKE) $(MAKEFLAGS) $(AC_FN_NM_DECL)_i.h $(MAKEOPTION_F)
#
# ac_furniture_name_decl.cのプリプロセスを削除する
#

# 最終ＲＯＭバージョン用
cls_fn_decl_f ::
	rm -f $(SUBDIR_F)/$(AC_FN_NM_DECL)_i.h


# .inc は なぜか cc では Makedepend に入らないので登録
ks_nes.o:$(FOREST_LIB)/MFC/ks_rfc.inc
famicom_emu.o:$(FOREST_LIB)/MFC/ks_rfc.inc

UndefinedSymbols.o:UndefinedSymbols.s UndefinedSymbols.decl
genfiles:: audio_update
#	@echo "もはや genfiles でするものはありません"

#.c.o :
#	$(CC) $(CFLAGS) -c $(.IMPSRC)

sinclude depend_c_inc
depend_c_inc::
	grep 'include' ac*.c bg*.c|sed -n -e 's/^\([^:]*\)\.c:# *include *"\1\([^"]*\)\.\(h\|c_inc\)".*/\1.o:\1\2.\3/p' > depend_c_inc

audio_update::
	@if [ ! -d $(FOREST_AUDIO) ]; then mkdir $(FOREST_AUDIO); ln -s /project/forest/forest_audio/RCS $(FOREST_AUDIO)/. ; fi
	cd $(FOREST_AUDIO) && coall && make update

clear:
	rm -f rom_f/*.d; \
	rm -f rom_f/*.szs; \
	rm -f rom_f/*.map rom_f/romP rom_f/romPP rom_f/forest.aes rom_f/zelda; \
	rm -f rom_f/codesegment.o; \
	rm -f rom_f/m_std_dma_slid.o; \
	rm -f rom_f/m_font.o; \
	rm -f rom_f/m_moji.o; \
	rm -f rom_f/m_msg.o; \
	rm -f rom_f/ac_animal_logo.o; \
	rm -f rom_f/version.o; \
	rm -f rom_f/bootsegment.o; \
	rm -f rom_f/m_cpak.o; \
	rm -f rom_f/s_flashrom.o; \
	rm -f rom_f/s_cpak.o; \
	rm -f rom_f/m_cpak_lib.o; \
	rm -f rom_f/famicom_check.o; \
	rm -f rom_f/m_flashrom.o; \
	rm -f rom_f/m_time.o; \
	rm -f rom_f/m_timeIn_ovl.o; \
	rm -f rom_f/lb_rtc.o \
	rm -f rom_f/save_menu*
	rm -f rom_f/m_immig.o
