# DO NOT USE MAKE TO COMPILE, please use createsim.
ACC=
CC = $(ACC) gcc 
LD = gcc
REMCFLAGS=	-Wall -Wshadow \
		-ITRAFFIC -IALGORITHMS -IINPUTACTIONS -IOUTPUTACTIONS \
		-IFABRICS \
		-DLIST_STATS -DLIST_HISTOGRAM -DFREELIST $(SIMGRAPH)


DEST	      = .

HDRS	      = bitmap.h \
		circBuffer.h \
		histogram.h \
		latencyStats.h \
		lists.h \
		sim.h \
		stat.h \
		switchStats.h\
		types.h\
		$(AUXHEAD) \
		$(GRAPHHEAD)

INSTALL	      = /etc/install

LDFLAGS	      = -lm 

LIBS	      = ALGORITHMS/algorithms.o \
		INPUTACTIONS/inputActions.o \
		OUTPUTACTIONS/outputActions.o \
		FABRICS/fabrics.o \
		TRAFFIC/traffic.o 

OBJS	      = ${SRCS:.c=.o}

OTHERGRAPHOBJS   =  aux.o \
					graph.o


PRINT	      = pr

PROGRAM       = sim

SHELL	      = /bin/sh

SRCS	      = bitmap.c \
		cell.c \
		circBuffer.c \
		config.c \
		create.c \
		debug.c \
		functionTable.c \
		histogram.c \
		latencyStats.c \
		lists.c \
		sim.c \
		stat.c \
		switchStats.c \
		$(AUXSRC) \
	    $(GRAPHSRC)

SYSHDRS	      =

all:	
			$(MAKE) optall

this:
			$(MAKE) thisoptall

optall:        trafficopt algorithmsopt fabricsopt inputActionsopt outputActionsopt thisoptall

debugall:     trafficdbg algorithmsdbg fabricsdbg inputActionsdbg outputActionsdbg thisdebugall

thisoptall:
			$(MAKE) $(PROGRAM) CFLAGS="-O3 $(REMCFLAGS)" 
			
thisdebugall:
			$(MAKE) $(PROGRAM) CFLAGS="-g $(REMCFLAGS)"
		
trafficopt:;	@cd TRAFFIC; $(MAKE) optall; cd ..

algorithmsopt:;	@cd ALGORITHMS; $(MAKE) optall; cd ..

fabricsopt:;	@cd FABRICS; $(MAKE) optall; cd ..

inputActionsopt:;	@cd INPUTACTIONS; $(MAKE) optall; cd ..

outputActionsopt:;	@cd OUTPUTACTIONS; $(MAKE) optall; cd ..

##NOW THE DEBUG ONES
trafficdbg:;	@cd TRAFFIC; $(MAKE) debugall; cd ..

algorithmsdbg:;	@cd ALGORITHMS; $(MAKE) debugall; cd ..

fabricsdbg:;	@cd FABRICS; $(MAKE) debugall; cd ..

inputActionsdbg:;	@cd INPUTACTIONS; $(MAKE) debugall; cd ..

outputActionsdbg:;	@cd OUTPUTACTIONS; $(MAKE) debugall; cd ..

##Now this directory's files
$(PROGRAM)::     $(OBJS) $(LIBS)
		@echo "Linking clean sim: $(PROGRAM) ..."
		$(LD) $(OBJS) $(LIBS) -o $(PROGRAM) $(LDFLAGS)
		@echo "done"

clean:;		rm -f $(OBJS) core $(OTHERGRAPHOBJS) core  $(PROGRAM)

cleanall:	cleantraffic cleanalgorithms cleanfabrics cleaninput cleanoutput clean

cleantraffic:;		cd TRAFFIC; $(MAKE) clean; cd ..

cleanalgorithms:;	cd ALGORITHMS; $(MAKE) clean; cd ..

cleanfabrics:;		cd FABRICS; $(MAKE) clean; cd ..

cleaninput:;		cd INPUTACTIONS; $(MAKE) clean; cd ..

cleanoutput:;		cd OUTPUTACTIONS; $(MAKE) clean; cd ..


clobber:;		rm -f $(OBJS) $(PROGRAM) core tags


clobberall:	clobbertraffic clobberalgorithms clobberfabrics clobberinput clobberoutput clobber

clobbertraffic:;	cd TRAFFIC; $(MAKE) clobber; cd ..

clobberalgorithms:;	cd ALGORITHMS; $(MAKE) clobber; cd ..

clobberfabrics:;	cd FABRICS; $(MAKE) clobber; cd ..

clobberinput:;	cd INPUTACTIONS; $(MAKE) clobber; cd ..

clobberoutput:;	cd OUTPUTACTIONS; $(MAKE) clobber; cd ..

##depend:;	@mkmf -f $(MAKEFILE) ROOT=$(ROOT)

depend:;	makedepend -o.o -- $(REMCFLAGS) -- $(SRCS)
			cd TRAFFIC; $(MAKE) depend; cd ..
			cd ALGORITHMS; $(MAKE) depend; cd ..
			cd FABRICS; $(MAKE) depend; cd ..
			cd INPUTACTIONS; $(MAKE) depend; cd ..
			cd OUTPUTACTIONS; $(MAKE) depend; cd ..

echo:;		@echo $(HDRS) $(SRCS)

index:;		ctags -wx $(HDRS) $(SRCS)

install::	$(PROGRAM)
		@echo Installing $(PROGRAM) in $(DEST)
#		@-strip $(PROGRAM)
		if [ $(DEST) != . ]; then \
		(rm -f $(DEST)/$(PROGRAM); $(INSTALL) -f $(DEST) $(PROGRAM)); fi

print:;		@$(PRINT) $(HDRS) $(SRCS)

tags:           $(HDRS) $(SRCS); ctags $(HDRS) $(SRCS)

update:		$(DEST)/$(PROGRAM)

#$(DEST)/$(PROGRAM):: $(SRCS) $(LIBS) $(HDRS) $(EXTHDRS)
#		@$(MAKE) -f $(MAKEFILE) ROOT=$(ROOT) DEST=$(DEST) install
###
# DO NOT DELETE THIS LINE -- make depend depends on it.

bitmap.o: /usr/include/stdio.h /usr/include/_types.h
bitmap.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
bitmap.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
bitmap.o: /usr/include/string.h /usr/include/stdlib.h /usr/include/sys/wait.h
bitmap.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
bitmap.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
bitmap.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
bitmap.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
bitmap.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
bitmap.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
bitmap.o: /usr/include/machine/types.h /usr/include/i386/types.h
bitmap.o: /usr/include/assert.h bitmap.h
cell.o: /usr/include/string.h /usr/include/_types.h /usr/include/sys/_types.h
cell.o: /usr/include/sys/cdefs.h /usr/include/machine/_types.h
cell.o: /usr/include/i386/_types.h sim.h /usr/include/stdio.h
cell.o: /usr/include/stdlib.h /usr/include/sys/wait.h
cell.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
cell.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
cell.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
cell.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
cell.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
cell.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
cell.o: /usr/include/machine/types.h /usr/include/i386/types.h
cell.o: /usr/include/sys/types.h /usr/include/math.h
cell.o: /usr/include/architecture/i386/math.h bitmap.h stat.h histogram.h
cell.o: lists.h switchStats.h types.h latencyStats.h functionTable.h
cell.o: circBuffer.h
circBuffer.o: /usr/include/stdio.h /usr/include/_types.h
circBuffer.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
circBuffer.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
circBuffer.o: /usr/include/stdlib.h /usr/include/sys/wait.h
circBuffer.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
circBuffer.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
circBuffer.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
circBuffer.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
circBuffer.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
circBuffer.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
circBuffer.o: /usr/include/machine/types.h /usr/include/i386/types.h
circBuffer.o: /usr/include/sys/malloc.h circBuffer.h
config.o: /usr/include/string.h /usr/include/_types.h
config.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
config.o: /usr/include/machine/_types.h /usr/include/i386/_types.h sim.h
config.o: /usr/include/stdio.h /usr/include/stdlib.h /usr/include/sys/wait.h
config.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
config.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
config.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
config.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
config.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
config.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
config.o: /usr/include/machine/types.h /usr/include/i386/types.h
config.o: /usr/include/sys/types.h /usr/include/math.h
config.o: /usr/include/architecture/i386/math.h bitmap.h stat.h histogram.h
config.o: lists.h switchStats.h types.h latencyStats.h functionTable.h
config.o: ALGORITHMS/algorithm.h FABRICS/fabric.h TRAFFIC/traffic.h
config.o: INPUTACTIONS/inputAction.h OUTPUTACTIONS/outputAction.h
config.o: ALGORITHMS/algorithmTable.h FABRICS/fabricTable.h
config.o: TRAFFIC/trafficTable.h INPUTACTIONS/inputActionTable.h
config.o: OUTPUTACTIONS/outputActionTable.h
create.o: sim.h /usr/include/stdio.h /usr/include/_types.h
create.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
create.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
create.o: /usr/include/stdlib.h /usr/include/sys/wait.h
create.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
create.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
create.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
create.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
create.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
create.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
create.o: /usr/include/machine/types.h /usr/include/i386/types.h
create.o: /usr/include/sys/types.h /usr/include/math.h
create.o: /usr/include/architecture/i386/math.h bitmap.h stat.h histogram.h
create.o: lists.h switchStats.h types.h latencyStats.h functionTable.h
create.o: /usr/include/string.h
debug.o: sim.h /usr/include/stdio.h /usr/include/_types.h
debug.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
debug.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
debug.o: /usr/include/stdlib.h /usr/include/sys/wait.h
debug.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
debug.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
debug.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
debug.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
debug.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
debug.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
debug.o: /usr/include/machine/types.h /usr/include/i386/types.h
debug.o: /usr/include/sys/types.h /usr/include/math.h
debug.o: /usr/include/architecture/i386/math.h bitmap.h stat.h histogram.h
debug.o: lists.h switchStats.h types.h latencyStats.h functionTable.h
functionTable.o: /usr/include/stdio.h /usr/include/_types.h
functionTable.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
functionTable.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
functionTable.o: functionTable.h
histogram.o: /usr/include/stdio.h /usr/include/_types.h
histogram.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
histogram.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
histogram.o: /usr/include/sys/malloc.h /usr/include/sys/appleapiopts.h
histogram.o: histogram.h
latencyStats.o: sim.h /usr/include/stdio.h /usr/include/_types.h
latencyStats.o: /usr/include/sys/_types.h /usr/include/sys/cdefs.h
latencyStats.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
latencyStats.o: /usr/include/stdlib.h /usr/include/sys/wait.h
latencyStats.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
latencyStats.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
latencyStats.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
latencyStats.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
latencyStats.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
latencyStats.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
latencyStats.o: /usr/include/machine/types.h /usr/include/i386/types.h
latencyStats.o: /usr/include/sys/types.h /usr/include/math.h
latencyStats.o: /usr/include/architecture/i386/math.h bitmap.h stat.h
latencyStats.o: histogram.h lists.h switchStats.h types.h latencyStats.h
latencyStats.o: functionTable.h
lists.o: /usr/include/stdio.h /usr/include/_types.h /usr/include/sys/_types.h
lists.o: /usr/include/sys/cdefs.h /usr/include/machine/_types.h
lists.o: /usr/include/i386/_types.h /usr/include/sys/malloc.h
lists.o: /usr/include/sys/appleapiopts.h /usr/include/stdlib.h
lists.o: /usr/include/sys/wait.h /usr/include/sys/signal.h
lists.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
lists.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
lists.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
lists.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
lists.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
lists.o: /usr/include/machine/types.h /usr/include/i386/types.h lists.h
lists.o: histogram.h /usr/include/string.h circBuffer.h
sim.o: /usr/include/sys/time.h /usr/include/sys/cdefs.h
sim.o: /usr/include/sys/_types.h /usr/include/machine/_types.h
sim.o: /usr/include/i386/_types.h /usr/include/time.h /usr/include/_types.h
sim.o: /usr/include/machine/_limits.h /usr/include/i386/_limits.h
sim.o: /usr/include/math.h /usr/include/architecture/i386/math.h sim.h
sim.o: /usr/include/stdio.h /usr/include/stdlib.h /usr/include/sys/wait.h
sim.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
sim.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
sim.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
sim.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
sim.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
sim.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
sim.o: /usr/include/machine/types.h /usr/include/i386/types.h
sim.o: /usr/include/sys/types.h bitmap.h stat.h histogram.h lists.h
sim.o: switchStats.h types.h latencyStats.h functionTable.h
sim.o: ALGORITHMS/algorithm.h FABRICS/fabric.h TRAFFIC/traffic.h
sim.o: INPUTACTIONS/inputAction.h OUTPUTACTIONS/outputAction.h
stat.o: /usr/include/stdio.h /usr/include/_types.h /usr/include/sys/_types.h
stat.o: /usr/include/sys/cdefs.h /usr/include/machine/_types.h
stat.o: /usr/include/i386/_types.h /usr/include/math.h
stat.o: /usr/include/architecture/i386/math.h stat.h
switchStats.o: /usr/include/math.h /usr/include/architecture/i386/math.h
switchStats.o: /usr/include/sys/cdefs.h sim.h /usr/include/stdio.h
switchStats.o: /usr/include/_types.h /usr/include/sys/_types.h
switchStats.o: /usr/include/machine/_types.h /usr/include/i386/_types.h
switchStats.o: /usr/include/stdlib.h /usr/include/sys/wait.h
switchStats.o: /usr/include/sys/signal.h /usr/include/sys/appleapiopts.h
switchStats.o: /usr/include/machine/signal.h /usr/include/i386/signal.h
switchStats.o: /usr/include/sys/resource.h /usr/include/machine/endian.h
switchStats.o: /usr/include/i386/endian.h /usr/include/sys/_endian.h
switchStats.o: /usr/include/stdint.h /usr/include/libkern/OSByteOrder.h
switchStats.o: /usr/include/libkern/i386/OSByteOrder.h /usr/include/alloca.h
switchStats.o: /usr/include/machine/types.h /usr/include/i386/types.h
switchStats.o: /usr/include/sys/types.h bitmap.h stat.h histogram.h lists.h
switchStats.o: switchStats.h types.h latencyStats.h functionTable.h
