#
# Sander van Veen (UvA ID: 6167969)
#

PROG=ass1

MKDIR=mkdir
PACK=tar -jcvf
CC=gcc
LFLAGS=-lm
CP=cp
RM=rm -rf

CFLAGS = -std=c99 -pedantic -Wall -Werror -lm

ifdef DEBUG
CFLAGS += -g -ggdb -DDEBUG 
else
CFLAGS += -g0 -O3
endif

ifdef PROFILE
CFLAGS += -pg
endif

all: interval meten

interval: interval.o main.o
	$(CC) $(CFLAGS) $(LFLAGS) -o $@ $^

meten: meten.o testcache.o interval.o
	$(RM) $^
	
	$(CC) -c $(CFLAGS) -O0 -o meten.o meten.c;
	$(CC) -c $(CFLAGS) -O0 -o testcache.o testcache.c;
	$(CC) -c $(CFLAGS) -O0 -o interval.o interval.c;
	
	$(CC) -Wall $(LFLAGS) -o $@-no-opt $^
	
	$(RM) $^
	
	$(CC) -c $(CFLAGS) -O2 -o meten.o meten.c;
	$(CC) -c $(CFLAGS) -O2 -o testcache.o testcache.c;
	$(CC) -c $(CFLAGS) -O2 -o interval.o interval.c;
	
	$(CC) -O2 -Wall $(LFLAGS) -o $@-opt-2 $^
	
	$(RM) $^
	
	$(CC) -c $(CFLAGS) -o meten.o meten.c;
	$(CC) -c $(CFLAGS) -o testcache.o testcache.c;
	$(CC) -c $(CFLAGS) -o interval.o interval.c;
	
	$(CC) $(CFLAGS) $(LFLAGS) -o $@ $^
	
	ln -sf meten meten-opt-3

clean:
	rm -f *.o interval meten meten-* $(PROG).tbz
	rm -Rf $(PROG)/

tarball:
	$(MAKE) clean
	$(MKDIR) $(PROG)
	$(CP) * $(PROG) || true
	$(PACK) $(PROG).tbz $(PROG)/*
	$(RM) $(PROG)

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

interval.o: interval.h
meten.o: meten.h
testcache.o: testcache.h
