#!smake -k
# $Id: Makefile,v 1.2 2000-11-20 10:53:18+09 hayakawa Exp hayakawa $
#---------------------------------------------------------------------------
#  Makefile for MFC (doubutsu no Mori - FamiCom emulator)
#---------------------------------------------------------------------------

include $(ROOT)/usr/include/make/PRdefs

PROJ = MFC

#OPTIMIZER = -O2 -Olimit 3000
OPTIMIZER=

MAKEMASK =	/usr/sbin/makemask
MAKEROM =	/usr/sbin/makerom
#if !defined(NLOAD)
NLOAD =		/usr/sbin/nload
#endif

CODEFILES   =	main.c sequence.c ni_debug.c ks_nes.c
ASMCODEFILES=	asmrfc.s

APP =
TARGET =	rom
ORIGROM =	rom.nomask

TEXHFILES =
HFILES =
EXTHFILE =	extern.h

CODEAUDIO   =	audio/audio.o

# CODEOBJECTS= の $(CODEAUDIO) の場所によって、オーディオスレッドの処理時間が倍以上かかることがある! ホンマ。
# CODEOBJECTS =	$(CODEFILES:.c=.o) $(ASMCODEFILES:.s=.o) $(CODEAUDIO) じゃないと、dracula2 の処理落ちがひどい (これでも、落ちるけど...)
# CODEOBJECTS = $(CODEFILES:.c=.o) $(ASMCODEFILES:.s=.o) $(CODEAUDIO) では、exbike が落ちる ...
CODEOBJECTS = $(CODEAUDIO) $(CODEFILES:.c=.o) $(ASMCODEFILES:.s=.o)
CODESEGMENT =	codesegment.o
DATAOBJECTS =	$(DATAFILES:.c=.o)
OBJECTS =	$(CODESEGMENT) $(DATAOBJECTS)

LDFLAGS =	$(MKDEPOPT) -L/usr/lib -lultra_d


GPOPTS = -G0
MKDEPFILE =	.smakedepend
#MKDEPOPT = -MDupdate $(MKDEPFILE)
MKDEPOPT =

LCDEFS = -DEAD_KAWASEDO
LCINCS =	-I. -I$(ROOT)/usr/include
LCOPTS =	-float -xansi -fullwarn -non_shared $(GPOPTS) -prototypes -signed -Xcpluscomm -wlint,-fhp -G 0 -woff 828,813,827
LASDEFS =	$(LCDEFS)
LASINCS =	$(LCINCS)
LASOPTS =	-non_shared $(GPOPTS)
CSTYLE_32_M2 =	-mips2 -o32
LD =		/usr/lib/PR/nld


LDIRT  =	$(APP) $(TEXHFILES) $(TARGET) $(ORIGROM) wave wave.dd disk *.so log *~ rom.nopad \
		linkmap rommap ptn64.dat nes.bin nes.title nes_disk.bin

# ----------------------------------------------------------------
default:	$(TARGET)
		$(NLOAD) $(NLOADOPT) $(TARGET)

include 	$(COMMONRULES)

.c.o:
	$(CC) $(CFLAGS) -c $(.IMPSRC) -o $(.TARGET)

$(CODESEGMENT):	$(CODEOBJECTS) Makefile $(CODEAUDIO) librfc.a
		$(LD) $(GPOPTS) -gpinfo -elsmap -o32 -m -mips2 -o $(CODESEGMENT) -r $(CODEOBJECTS) -L. -lrfc $(LDFLAGS) > linkmap

$(TARGET):	$(ORIGROM)
	cat $(ORIGROM) > rom.nopad
	tools/binpad 9 rom.nopad $(TARGET)
	$(MAKEMASK) $(TARGET)

$(ORIGROM):	spec $(OBJECTS) Makefile
	$(MAKEROM) -m -r $(ORIGROM) spec > rommap

xtn: $(CODEFILES) $(DATAFILES)
		echo > $(EXTHFILE)
		echo $> | xargs -t -n1 /usr/local/bin/perl extern.pl $(CFLAGS) > $(EXTHFILE).tmp
		mv -f $(EXTHFILE).tmp $(EXTHFILE)

TARFILE = $(HOME)/$(PROJ)-`date +%y%m%d.%H`
tar:
	tar zcvCf $(HOME) $(TARFILE).tar.gz --exclude='*.o' \
	--exclude='*~' --exclude='*.out' --exclude='*.rel' \
	--exclude=linkmap --exclude=rommap --exclude=diskmap \
	--exclude=log --exclude='log.*' --exclude=core --exclude=$(TARGET) --exclude=rom.nopad --exclude=wave --exclude=wave.dd \
	--exclude=$(ORIGROM) --exclude=disk --exclude='.yada_comm' --exclude=gwrite \
	--exclude=my_ipl.nomask --exclude=my_ipl.rom \
	--exclude=nes.bin --exclude=nes.title --exclude=disk_nes.hed --exclude=disk_nes.szp --exclude=disk_nes.bin \
	-g $(HOME)/$(PROJ)-tar.log $(PROJ)
	echo Created: $(TARFILE).tar.gz

# Audio の *.o は exclude したくない
full:
	rm -f $(HOME)/$(PROJ)-tar.log
	rm -f *.o
	tar zcvCf $(HOME) $(TARFILE).full.tar.gz \
	--exclude='*~' --exclude='*.out' --exclude='*.rel' --exclude=core \
	--exclude=linkmap --exclude=rommap \
	--exclude=$(TARGET) --exclude=rom.nopad \
	--exclude=my_ipl.rom \
	--exclude=log --exclude=core --exclude=wave --exclude=wave.dd --exclude=disk --exclude='.yada_comm' \
	--exclude=nes.bin --exclude=nes.title --exclude=disk_nes.hed --exclude=disk_nes.szp --exclude=disk_nes.bin \
	-g $(HOME)/$(PROJ)-tar.log $(PROJ)
	echo Created: $(TARFILE).full.tar.gz

#audioup:
#	cd audio; /usr/local/bin/lha xfi /hosts/souid1/disk2/hideaki/Tmp/dmg_audio.lzh
#	rm -f $(CODESEGMENT)
#	make NLOADOPT=-n
#	cp rom /hosts/souid1/disk2/hideaki/Tmp

struct-rfc.inc offset-rfc.inc: ks_rfc.inc offset.pl
	rm -f $@ $@.tmp struct-rfc.inc
	sed -e '/typedef struct rfcstate_object/,/rfcstate_object/!d' ks_rfc.inc > struct-rfc.inc
	/usr/local/bin/perl offset.pl < struct-rfc.inc > $@.tmp
	mv $@.tmp $@

main.o sequence.o ks_nes.o: common.h ks_nes.h ks_rfc.inc struct-rfc.inc

# ${@F:.a=}Text は librfcText のように置換される
# いきなり ar clq はダメ。 code の直後に data があるって決め打ちしてるから。
# ちゃんと ld -r してからじゃないと。
#	ar clq $@ /tmp/${@:.a=}.code.o /tmp/${@:.a=}.data.o
# /tmp/code/librfc.sym とかになってしまうので ${@:.a=} はやめた。
librfc.a: ksprfc.asm offset-rfc.inc
	/project/ZELDA2/lib/ucode/src/F3DZEX2-2.06src/rspasm/rspasm             -l ${LCINCS}                 -o /tmp/librfc ksprfc.asm
	/project/ZELDA2/lib/ucode/src/F3DZEX2-2.06src/rspasm/rspasm        -DPASS2 ${LCINCS} -S /tmp/librfc  -o /tmp/librfc ksprfc.asm
	d2elf -t kspRFCText  -o /tmp/librfc.code.o  /tmp/librfc      > /dev/null
	d2elf -t kspRFCData  -o /tmp/librfc.data.o  /tmp/librfc.dat  > /dev/null
	ld -o /tmp/librfc.tmp.o  -r /tmp/librfc.code.o  /tmp/librfc.data.o
	rm -f $@
	ar clq $@ /tmp/librfc.tmp.o

# -DKS_DEBUG -DKS_DEBUG_VERBOSE: デバッグ用に PRINTF などを使う
asmrfc.o: asmrfc.s offset-rfc.inc Makefile
	$(AS) $(LASDEFS) $(LASINCS) $(ASMDEF) -DKS_TRACE -DKS_HISTORY -DKS_TRAP_STORE_INVALID \
	-non_shared -G 0 -mips3 -32 -Wab,-r4300_mul -nostdinc -I. -I/usr/include -o $@ asmrfc.s

# export files: とりあえず 全部 (make full)

rom_d:asmrfc.o librfc.a

no9over:/tmp/librfc.lst
	grep obj_index_line_loop_no9over /tmp/librfc.lst
