##############################################################################
##
##  GNU Makefile for 
##  Lab assignment 4 (CS213, Fall 2001)
##
##############################################################################

ASSTDIR=/afs/cs.cmu.edu/academic/class/15213-f01/L4

# Uncomment only one of the following two:
DEFINES=-DLINUX 
#DEFINES=
DEFS_CPROF=-DLINUX -DCACHEPROF

CC=gcc 

CACHEPROF=$(ASSTDIR)/cprof/cacheprof
CACHEPROFFLAGS=--cacheprofdir=$(ASSTDIR)/cprof

#
# uncomment one of the two lines below
#
CFLAGS=-Wall -O2 $(DEFINES) 
#CFLAGS=-Wall -O2 -g $(DEFINES)
CFLAGS_CPROF=-Wall -O2 $(DEFS_CPROF) 

CPP=gcc -E

INCDIR=
LIBDIR=

LIBS=

OBJS=driver.o smooth.o rotate.o fcyc.o clock.o
OBJS_CPROF=cdriver.o rotate_cache.o
DEL_OBJS=smooth.o rotate.o rotate_cache.o driver cdriver cacheprof.out*

TESTS = 

##############################################################################

all: all-target

ifeq (Makefile.depend, $(wildcard Makefile.depend))
include Makefile.depend
all-target: driver
else
all-target: depend
	@echo Please run make once again!
endif

##############################################################################

driver: $(OBJS)
	$(CC) $(CFLAGS) $^ $(TESTS) $(LIBDIR) $(LIBS) -o $@

cdriver: $(OBJS_CPROF)
	$(CACHEPROF) $(CACHEPROFFLAGS) $(CC) $(CFLAGS_CPROF) $^ $(TESTS) $(LIBDIR) $(LIBS) -o $@

rotate_cache.o: rotate_cache.c
	$(CACHEPROF) $(CACHEPROFFLAGS) $(CC) $(CFLAGS_CPROF) $(INCDIR) -c -o $*.o $<

%.s: %.c
	$(CC) $(CFLAGS) $(INCDIR) -S -o $*.s $<

%.o: %.c
	$(CC) $(CFLAGS) $(INCDIR) -c -o $*.o $<

depend dep:
	@echo Generating dependencies...
	$(CPP) -M $(CPPFLAGS) $(INCDIR) *.c >Makefile.depend

edclean:
	-rm *~

clean: edclean
	-rm -f $(DEL_OBJS) core
	-rm -f Makefile.depend

nuke: clean
	-rm -f driver

##############################################################################

