# This is a template makefile.  It shows how everything goes together.
# In reality this will not work well.  The KB and CA and KA should all
# be compiled separately into separate directories.

ICC = ic960 ${ICCOPTS} -I${IPATH}
GCC = gcc960 ${GCCOPTS} -I${IPATH}
XCC = gcc960 ${XCCOPTS} -I${IPATH}

ICCOPTS =-R -O2 -AKB -DGDB -S
GCCOPTS =-O3 -AKB -DGDB -S -mintel-asm 
XCCOPTS =-AKB -DGDB -S -mintel-asm
IPATH = ../../include

AS = asm960 -ACA_A
TARGET_ARCH =

FPOPTS	= float.o fp.o fp_flt.o
NOFPOPTS= no_fp.o nofp_flt.o

BASEOPTS1 = main.o gdb.o disp_mod.o int_rout.o
BASEOPTS2 = i_table.o i_handle.o fault.o monitor.o eat_time.o
BASEOPTS3 = parse.o download.o io.o loadstore.o convert.o trace.o dis.o

ASVOPTS = hwasv.o asv_io.o copymem.o
QTOPTS = hwqt.o qt_io.o flash.o copymem.o
TSTOPTS = call_tes.o int_test.o test_asm.o tests.o time_tes.o

CXOPTS = f_table_ca.o break_cx.o cx.o
KXOPTS = f_table.o kx.o break_kx.o

fpsys:	 ${BASEOPTS1} ${BASEOPTS2} ${BASEOPTS3} ${FPOPTS}
nofpsys: ${BASEOPTS1} ${BASEOPTS2} ${BASEOPTS3} ${NOFPOPTS}

###########
# TARGETS #
###########
all:	testfl test asv	

asv: asv_boot.o sys_init_ca.o nofpsys ${CXOPTS} ${ASVOPTS}
	gcc960 -O3 -DGDB -mintel-asm -S download.c 
	asm960 -ACA_A download.s
#	ic960 -R -c -O2 -DGDB download.c
	lnk960 -ACA -o asv ../../lib/libasv/common/asvrom.ld \
		asv_boot.o sys_init_ca.o ${BASEOPTS1} ${BASEOPTS2} \
		${BASEOPTS3} ${NOFPOPTS} ${CXOPTS} ${ASVOPTS} \
		-lcca
	rom960 ../../lib/libasv/common/asvrom asv
	/bin/rm -f download.o download.s

testfl: sys_init.o fpsys ${QTOPTS} ${TSTOPTS}
	lnk960 -o testfl ../../lib/libqt/common/flrom.ld \
		sys_init.o ${BASEOPTS1} ${BASEOPTS2} \
		${BASEOPTS3} ${FPOPTS} ${KXOPTS} ${QTOPTS} \
		${TSTOPTS} -lckb
	rom960 ../../lib/libqt/common/flrom testfl
	str960 testfl

test: sys_init.o fpsys ${QTOPTS} ${TSTOPTS}
	lnk960 -o test ../../lib/libqt/common/qtrom.ld \
		sys_init.o ${BASEOPTS1} ${BASEOPTS2} \
		${BASEOPTS3} ${FPOPTS} ${KXOPTS} ${QTOPTS} \
		${TSTOPTS} -lckb
	rom960 ../../lib/libqt/common/qtrom test

#################
# SPECIAL CASES #
#################
download.o: download.c
#	ic960 -R -c -O2 -DGDB -DQT960 download.c
	gcc960 -O3 -DGDB -DQT960 -S -mintel-asm download.c
	asm960 -o download.o download.s
	/bin/rm -f download.s

fp.o: fp.c  
	ic960 -R -O2 -DGDB -S fp.c
	asm960 -o fp.o fp.s
	/bin/rm -f fp.s

i_handle.o: i_handle.s
	cp i_handle.s i_handle.c
#	ic960 -E i_handle.c | asm960 -o i_handle.o
	gcc960 -E i_handle.c | asm960 -o i_handle.o
	/bin/rm -f i_handle.c

asv_boot.o: asv_boot.s bus.h
	cp asv_boot.s asv_boot.c
	ic960 -E asv_boot.c | asm960 -ACA_A -o asv_boot.o
	/bin/rm -f asv_boot.c

flash.o: flash.c
	${XCC} flash.c
	${AS} flash.s -o flash.o
	/bin/rm flash.s

#################
# GENERIC CASES #
#################
.c.o: ; ${GCC} $*.c
	${AS} $*.s -o $@
	/bin/rm $*.s

##########
# CLEANS #
##########
clean::
	/bin/rm *.o
	@/bin/ls -aF
vclean::
	/bin/rm -f *.o *.s *.c *.h
	@/bin/ls -aF

################
# DEPENDENCIES #
################
# BASE FILES #
convert.o:	defines.h globals.h
dis.o:		defines.h globals.h regs.h lookup.h
disp_mod.o:	defines.h globals.h
download.o:	defines.h globals.h regs.h
fault.o:	defines.h globals.h regs.h
fp.o:		defines.h globals.h regs.h
gdb.o:		defines.h globals.h regs.h version.h
int_rout.o:	defines.h
io.o:		defines.h globals.h ${IPATH}/block_io.h
main.o:		defines.h globals.h regs.h
monitor.o:	defines.h globals.h regs.h version.h
no_fp.o:	defines.h globals.h regs.h
parse.o:	defines.h globals.h regs.h
trace.o:	defines.h globals.h regs.h

# ASV BOARD FILES #
asv_io.o:	defines.h globals.h asv510.h
hwasv.o:	defines.h
asv_boot.o:	bus.h

# QT960 BOARD FILES #
call_tes.o:	defines.h ${IPATH}/qtcommon.h test_def.h
flash.o:	defines.h ${IPATH}/qtcommon.h
hwqt.o:		defines.h ${IPATH}/qtcommon.h 
int_test.o:	defines.h ${IPATH}/qtcommon.h iac.h
qt_io.o:	defines.h qt510.h 
tests.o:	defines.h test_def.h
time_tes.o:	defines.h ${IPATH}/qtcommon.h test_def.h

# CX SPECIFIC FILES #
break_cx.o:	defines.h globals.h regs.h

# KX SPECIFIC FILES #
break_kx.o:	defines.h globals.h regs.h iac.h

