# %Z% File name: %M%   Ver: %I%   Cntl date: %G% %U% 
TOOLDIR=${TOOLDIR:-/usr/MC88000/sgs2.0};

TARGET = $(SGS)
SHELL = /bin/sh
CTLDIR = ../ctl
INTDIR = ../integer
FLTDIR = ../float
CMMUDIR = ../cmmu
INCDIR = ../include

RELEASE =
DESFILE =

SGS=m88k
BASE= ../..
OWN = bin
GRP = bin

#     For sgs2.0 tools and if the simulator is not part of the tool 
#     directory then COMINC should equal $(TOOLDIR)/inc/common

INCBASE= ../..
COMINC= $(INCBASE)/inc/common
#COMINC= $(INCBASE)/inc/m88k

FILEHDRS = $(COMINC)/aouthdr.h $(COMINC)/filehdr.h \
		$(COMINC)/scnhdr.h $(COMINC)/syms.h

CC = $(PFX)cc
# OFLAG	= -O
GFLAG =
SYSTYPE = -DSYSV -UBSD 
OCSFLAG= OCS_BCS
CFLAGS =  -c
DEFLIST = -D$(TARGET) -D$(OCSFLAG)
LINT=lint
INCLIST = -I$(INCDIR) -I$(COMINC)
CC_CMD  = $(CC) $(CFLAGS) $(DEFLIST) $(INCLIST) $(SYSTYPE)
SOURCES = $(CTLSRCS) $(SIMSRCS) $(FLTSRCS) $(CMMUSRCS)
OBJECTS = $(CTLOBJS) $(SIMOBJS) $(FLTOBJS) $(CMMUOBJS)

CTLSRCS = \
$(CTLDIR)/main.c	$(CTLDIR)/mem.c		$(CTLDIR)/lo.c		\
$(CTLDIR)/rd.c		$(CTLDIR)/rm.c		$(CTLDIR)/go.c		\
$(CTLDIR)/br.c		$(CTLDIR)/map.c		$(CTLDIR)/sdsr.c	\
$(CTLDIR)/signals.c	$(CTLDIR)/interface.c	$(CTLDIR)/cmdstruct.c	\
$(CTLDIR)/mm.c		$(CTLDIR)/md.c		$(CTLDIR)/bf.c		\
$(CTLDIR)/bs.c		$(CTLDIR)/bm.c		$(CTLDIR)/dis.c		\
$(CTLDIR)/cmdparser.c	$(CTLDIR)/asm.c		$(CTLDIR)/asmcmdstr.c	\
$(CTLDIR)/dc.c		$(CTLDIR)/he.c		$(CTLDIR)/converters.c	\
$(CTLDIR)/run.c		$(CTLDIR)/symbols.c	$(CTLDIR)/sysface.c	\
$(CTLDIR)/id.c		$(CTLDIR)/show.c

CTLOBJS = \
$(CTLDIR)/main.o	$(CTLDIR)/mem.o		$(CTLDIR)/lo.o		\
$(CTLDIR)/rd.o		$(CTLDIR)/rm.o		$(CTLDIR)/go.o		\
$(CTLDIR)/br.o		$(CTLDIR)/map.o		$(CTLDIR)/sdsr.o	\
$(CTLDIR)/signals.o	$(CTLDIR)/interface.o	$(CTLDIR)/cmdstruct.o	\
$(CTLDIR)/mm.o		$(CTLDIR)/md.o		$(CTLDIR)/bf.o		\
$(CTLDIR)/bs.o		$(CTLDIR)/bm.o		$(CTLDIR)/dis.o		\
$(CTLDIR)/cmdparser.o	$(CTLDIR)/asm.o		$(CTLDIR)/asmcmdstr.o	\
$(CTLDIR)/dc.o		$(CTLDIR)/he.o		$(CTLDIR)/converters.o	\
$(CTLDIR)/run.o		$(CTLDIR)/symbols.o	$(CTLDIR)/sysface.o	\
$(CTLDIR)/id.o		$(CTLDIR)/show.o

SIMSRCS = \
$(INTDIR)/dpath.c	$(INTDIR)/pc.c		$(INTDIR)/simload.c 	\
$(INTDIR)/trap.c	$(INTDIR)/stats.c	$(INTDIR)/simtime.c	\
$(INTDIR)/sim_io.c	$(INTDIR)/more_io.c	$(INTDIR)/sim_printf.c	\
$(INTDIR)/ckiob.c	$(INTDIR)/sysV.c	$(INTDIR)/table.c	\
$(INTDIR)/classify.c	$(INTDIR)/instab.c	$(INTDIR)/ctlregs.c	\
$(INTDIR)/dmem.c	$(INTDIR)/issue.c

SIMOBJS = \
$(INTDIR)/dpath.o	$(INTDIR)/pc.o		$(INTDIR)/simload.o 	\
$(INTDIR)/trap.o	$(INTDIR)/stats.o	$(INTDIR)/simtime.o	\
$(INTDIR)/sim_io.o	$(INTDIR)/more_io.o	$(INTDIR)/sim_printf.o	\
$(INTDIR)/ckiob.o	$(INTDIR)/sysV.o	$(INTDIR)/table.o	\
$(INTDIR)/classify.o	$(INTDIR)/instab.o	$(INTDIR)/ctlregs.o	\
$(INTDIR)/dmem.o	$(INTDIR)/issue.o

FLTSRCS = \
$(FLTDIR)/fadd.c	$(FLTDIR)/fpunimp.c	\
$(FLTDIR)/fdiv.c	$(FLTDIR)/divs.c	$(FLTDIR)/divd.c	\
$(FLTDIR)/fdivs.c	$(FLTDIR)/fdiv64.c	$(FLTDIR)/int.c		\
$(FLTDIR)/fcsi.c	$(FLTDIR)/fcdi.c	$(FLTDIR)/flt.c		\
$(FLTDIR)/fcid.c	$(FLTDIR)/fcis.c	$(FLTDIR)/fadds.c	\
$(FLTDIR)/fadd64.c	$(FLTDIR)/fmul.c	$(FLTDIR)/fmuls.c	\
$(FLTDIR)/fmul64.c	$(FLTDIR)/mults.c	$(FLTDIR)/multd.c	\
$(FLTDIR)/fsub.c	$(FLTDIR)/fcmp.c	$(FLTDIR)/fcmps.c	\
$(FLTDIR)/fcmp64.c	$(FLTDIR)/fcsd.c	$(FLTDIR)/fcds.c	\
$(FLTDIR)/updstat.c	$(FLTDIR)/reserves.c	$(FLTDIR)/aligns.c	\
$(FLTDIR)/adds.c	$(FLTDIR)/normalizes.c	$(FLTDIR)/rounds.c	\
$(FLTDIR)/returns.c	$(FLTDIR)/round.c	$(FLTDIR)/reserved.c	\
$(FLTDIR)/alignd.c	$(FLTDIR)/addd.c	$(FLTDIR)/normalized.c	\
$(FLTDIR)/roundd.c	$(FLTDIR)/returnd.c	$(FLTDIR)/floaterr.c    \
$(FLTDIR)/fsubs.c	$(FLTDIR)/fsub64.c	

FLTOBJS = \
$(FLTDIR)/fadd.o	$(FLTDIR)/fpunimp.o	\
$(FLTDIR)/fdiv.o	$(FLTDIR)/divs.o	$(FLTDIR)/divd.o	\
$(FLTDIR)/fdivs.o	$(FLTDIR)/fdiv64.o	$(FLTDIR)/int.o		\
$(FLTDIR)/fcsi.o	$(FLTDIR)/fcdi.o	$(FLTDIR)/flt.o		\
$(FLTDIR)/fcid.o	$(FLTDIR)/fcis.o	$(FLTDIR)/fadds.o	\
$(FLTDIR)/fadd64.o	$(FLTDIR)/fmul.o	$(FLTDIR)/fmuls.o	\
$(FLTDIR)/fmul64.o	$(FLTDIR)/mults.o	$(FLTDIR)/multd.o	\
$(FLTDIR)/fsub.o	$(FLTDIR)/fcmp.o	$(FLTDIR)/fcmps.o	\
$(FLTDIR)/fcmp64.o	$(FLTDIR)/fcsd.o	$(FLTDIR)/fcds.o	\
$(FLTDIR)/updstat.o	$(FLTDIR)/reserves.o	$(FLTDIR)/aligns.o	\
$(FLTDIR)/adds.o	$(FLTDIR)/normalizes.o	$(FLTDIR)/rounds.o	\
$(FLTDIR)/returns.o	$(FLTDIR)/round.o	$(FLTDIR)/reserved.o	\
$(FLTDIR)/alignd.o	$(FLTDIR)/addd.o	$(FLTDIR)/normalized.o	\
$(FLTDIR)/roundd.o	$(FLTDIR)/returnd.o	$(FLTDIR)/floaterr.o    \
$(FLTDIR)/fsubs.o	$(FLTDIR)/fsub64.o	

CMMUSRCS = \
$(CMMUDIR)/cmmu.c	$(CMMUDIR)/cmmu_atc.c	$(CMMUDIR)/cmmu_cache.c	\
$(CMMUDIR)/cmmu_func.c	$(CMMUDIR)/cmmu_init.c	$(CMMUDIR)/cmmu_debug.c	\
$(CMMUDIR)/cmmu_ctl.c	$(CMMUDIR)/opn_output.c	$(CMMUDIR)/cm.c

CMMUOBJS = \
$(CMMUDIR)/cmmu.o	$(CMMUDIR)/cmmu_atc.o	$(CMMUDIR)/cmmu_cache.o	\
$(CMMUDIR)/cmmu_func.o	$(CMMUDIR)/cmmu_init.o	$(CMMUDIR)/cmmu_debug.o	\
$(CMMUDIR)/cmmu_ctl.o	$(CMMUDIR)/opn_output.o $(CMMUDIR)/cm.o

$(SGS)sim:	$(OBJECTS) vers.o
		$(CC) -o $@ $(OBJECTS) vers.o -lm

ctl:		$(CTLOBJS)

integer:	$(SIMOBJS)

float:		$(FLTOBJS)

cmmu:		$(CMMUOBJS)

vers.o:		$(OBJECTS)
		-rm -f vers.c
		$(SHELL) stamp
		$(CC_CMD)  vers.c

$(FLTDIR)/fadd.o	$(FLTDIR)/fsub.o	\
$(FLTDIR)/flt.o		$(FLTDIR)/int.o		\
$(FLTDIR)/fdiv.o	$(FLTDIR)/updstat.o	\
$(FLTDIR)/fcmp.o	$(FLTDIR)/fmul.o	\
$(FLTDIR)/fpunimp.o	$(FLTDIR)/floaterr.o	\
$(FLTDIR)/rounds.o	$(FLTDIR)/roundd.o	\
	: $(INCDIR)/sim.h $(INCDIR)/float.h 

$(FLTDIR)/fadds.o	$(FLTDIR)/fadd64.o	\
$(FLTDIR)/fdiv64.o	$(FLTDIR)/fmuls.o	\
$(FLTDIR)/fmul64.o	$(FLTDIR)/fcsi.o	\
$(FLTDIR)/fcdi.o	$(FLTDIR)/fcid.o	\
$(FLTDIR)/mults.o	$(FLTDIR)/multd.o	\
$(FLTDIR)/divs.o	$(FLTDIR)/divd.o	\
$(FLTDIR)/fcds.o	$(FLTDIR)/fcis.o	\
$(FLTDIR)/fcsd.o	$(FLTDIR)/returns.o	\
$(FLTDIR)/returnd.o	$(FLTDIR)/round.o	\
$(FLTDIR)/normalizes.o	$(FLTDIR)/normalized.o	\
$(FLTDIR)/fcmps.o	$(FLTDIR)/fcmp64.o	\
$(FLTDIR)/adds.o	$(FLTDIR)/addd.o	\
$(FLTDIR)/aligns.o	$(FLTDIR)/alignd.o	\
$(FLTDIR)/reserves.o	$(FLTDIR)/reserved.o	\
$(FLTDIR)/fsubs.o	$(FLTDIR)/fsub64.o	\
$(FLTDIR)/fdivs.o				\
	: $(INCDIR)/float.h

$(CMMUDIR)/cmmu.o	$(CMMUDIR)/cmmu_atc.o	\
$(CMMUDIR)/cmmu_func.o	$(CMMUDIR)/cmmu_init.o	\
$(CMMUDIR)/cmmu_cache.o	$(CMMUDIR)/cmmu_ctl.o	\
	: $(INCDIR)/sim.h $(INCDIR)/cmmu.h

$(CMMUDIR)/cmmu_debug.o	$(CMMUDIR)/cm.o		\
	: $(INCDIR)/cmmu.h

$(INTDIR)/trap.o				\
	: $(INCDIR)/sim.h $(INCDIR)/cmmu.h

$(INTDIR)/dpath.o				\
	: $(INCDIR)/sim.h $(INCDIR)/float.h 	\
	  $(INCDIR)/trans.h $(INCDIR)/cmmu.h

$(INTDIR)/dmem.o				\
	: $(INCDIR)/sim.h $(INCDIR)/trans.h $(INCDIR)/cmmu.h

$(INTDIR)/sim_io.o				\
	: $(INCDIR)/sim.h $(INCDIR)/sim_io.h $(INCDIR)/trans.h

$(INTDIR)/ckiob.o				\
	: $(INCDIR)/targstdio.h

$(INTDIR)/pc.o		$(INTDIR)/sim_printf.o	\
$(INTDIR)/simtime.o	$(INTDIR)/classify.o	\
$(INTDIR)/simload.o	$(INTDIR)/stats.o	\
$(INTDIR)/table.o	$(INTDIR)/instab.o	\
$(INTDIR)/ctlregs.o	$(INTDIR)/sysV.o	\
	: $(INCDIR)/sim.h

$(CTLDIR)/sdsr.o	$(CTLDIR)/mem.o		\
	: $(INCDIR)/sim.h

$(CTLDIR)/main.o				\
$(INTDIR)/issue.o				\
	: $(INCDIR)/defines.h $(INCDIR)/cmds.h $(INCDIR)/sim.h

$(CTLDIR)/go.o		$(CTLDIR)/interface.o	\
	: $(INCDIR)/sim.h $(INCDIR)/trans.h

$(CTLDIR)/dis.o					\
	: $(INCDIR)/sim.h $(INCDIR)/instab.h

$(CTLDIR)/asm.o		$(CTLDIR)/asmcmdstr.o	\
	: $(INCDIR)/instab.h

$(CTLDIR)/symbols.o				\
	: $(INCDIR)/sim.h $(INCDIR)/symbols.h $(FILEHDRS)	\
	  $(INCDIR)/ld_coff.h

$(CTLDIR)/run.o					\
	: $(INCDIR)/sim.h $(INCDIR)/cmmu.h $(INCDIR)/trans.h	\
	  $(INCDIR)/cmds.h $(INCDIR)/defines.h $(INCDIR)/symbols.h \
	  $(INCDIR)/br.h $(INCDIR)/core88.h

$(CTLDIR)/br.o					\
	: $(INCDIR)/sim.h $(INCDIR)/cmds.h $(INCDIR)/trans.h	\
	  $(INCDIR)/br.h

$(CTLDIR)/lo.o					\
	: $(INCDIR)/sim.h $(INCDIR)/trans.h $(INCDIR)/defines.h	\
	  $(INCDIR)/exec.h $(INCDIR)/ld_coff.h $(FILEHDRS)

$(CTLDIR)/bf.o		$(CTLDIR)/bm.o		\
$(CTLDIR)/bs.o		$(CTLDIR)/id.o		\
$(CTLDIR)/map.o		$(CTLDIR)/md.o		\
$(CTLDIR)/mm.o		$(CTLDIR)/rd.o		\
$(CTLDIR)/rm.o					\
	: $(INCDIR)/cmds.h $(INCDIR)/sim.h $(INCDIR)/trans.h

$(CTLDIR)/cmdparser.o	$(CTLDIR)/converters.o	\
	: $(INCDIR)/defines.h $(INCDIR)/cmds.h $(INCDIR)/trans.h

$(CTLDIR)/dc.o					\
	: $(INCDIR)/trans.h

$(CTLDIR)/he.o					\
	: $(INCDIR)/cmds.h

.h~.h:
	$(GET) -G$*.h $<

.c.o:
	cd $(*D);$(CC_CMD) -c $(*F).c

.c~.o:
	$(GET) -G$*.c $<
	$(CC_CMD) -c $(*F).c

lint:
	$(LINT) $(LINTFLAGS) $(CTLDIR)/*.c $(INTDIR)/*.c $(CMMUDIR)/*.c $(FLTDIR)/*.c > lint.out 2>&1 

dbx:
	dbx -I$(CTLDIR) -I$(INTDIR) -I$(FLTDIR) -I$(CMMUDIR) -I$(INCDIR) $(SGS)sim

dbxtool:
	dbxtool -I$(CTLDIR) -I$(INTDIR) -I$(FLTDIR) -I$(CMMUDIR) -I$(INCDIR) $(SGS)sim &

sdb:
	sdb $(SGS)sim - $(CTLDIR):$(INTDIR):$(FLTDIR):$(CMMUDIR):$(INCDIR)

install : $(BINDIR)/$(SGS)sim

$(BINDIR)/$(SGS)sim: $(SGS)sim
		sh $(BASE)/sgs.install 775 $(OWN) $(GRP) $@ $?

#rmsources:
#		rm -f $(SOURCES)

getsccs:
		cd $(CTLDIR);  cat srcs.txt | get -
		cd $(INTDIR);  cat srcs.txt | get -
		cd $(FLTDIR);  cat srcs.txt | get -
		cd $(CMMUDIR); cat srcs.txt | get -
		cd $(INCDIR);  cat srcs.txt | get -

newrelease:
	echo "This will not update the release of the makefile"
	echo "New release number: $(RELEASE), Description file: $(DESFILE)"
	cd $(CTLDIR);  cat srcs.txt | get -e -r$(RELEASE) -
	cd $(CTLDIR);  cat srcs.txt | delta - < $(DESFILE)
	cd $(INTDIR);  cat srcs.txt | get -e -r$(RELEASE) -
	cd $(INTDIR);  cat srcs.txt | delta - < $(DESFILE)
	cd $(FLTDIR);  cat srcs.txt | get -e -r$(RELEASE) -
	cd $(FLTDIR);  cat srcs.txt | delta - < $(DESFILE)
	cd $(CMMUDIR); cat srcs.txt | get -e -r$(RELEASE) -
	cd $(CMMUDIR); cat srcs.txt | delta - < $(DESFILE)
	cd $(INCDIR);  cat srcs.txt | get -e -r$(RELEASE) -
	cd $(INCDIR);  cat srcs.txt | delta SCCS < $(DESFILE)

clean :
		rm -f $(OBJECTS) *.o ../*/core ../*/nohup.out ../*/*~

clobber:	clean
		rm -f $(SGS)sim 
