#DEBUG_FLAGS=-g 
DEBUG_FLAGS=-O2 
#DEBUG_FLAGS=-g -pg

#USE_EFENCE=1
#USE_CCMALLOC=1

ifdef USE_EFENCE
	EFENCE_FLAGS=-umalloc -ufree -ucalloc -urealloc -uvalloc -umemalign -lefence
	EF_PROTECT_BELOW=1
endif

ifdef USE_CCMALLOC
	CCMALLOC_FLAGS=-lccmalloc -ldl
endif

LIBS=$(CCMALLOC_FLAGS) $(EFENCE_FLAGS) -lm
CC_FLAGS=-Wall $(DEBUG_FLAGS)
#CC_FLAGS=-ansi -Wall -pedantic $(DEBUG_FLAGS)
#CC_FLAGS=-ansi -Wall -pedantic -Wstrict-prototypes -Wmissing-prototypes $(DEBUG_FLAGS)
CC=gcc $(CC_FLAGS) 

DLMDIR=SAT_DLM_2000/SRC

all: gsat hsat wsat sa wnovel sdfflt readcnf.o satfront.o

ob: dlm2k sdfflt-noisy25 sdfflt-noisy5 dlm2k-noisy25 dlm2k-noisy5 mrsat arsat

readcnf.o: readcnf.c readcnf.h
	$(CC) -c readcnf.c

satfront.o: satfront.c satfront.h readcnf.h
	$(CC) -c satfront.c

wsat.o: wsat.c readcnf.h satfront.h
	$(CC) -c wsat.c

wsat: wsat.o satfront.o readcnf.o
	$(CC) -o wsat satfront.o readcnf.o wsat.o $(LIBS)

gsat.o: gsat.c readcnf.h satfront.h
	$(CC) -c gsat.c

gsat: gsat.o satfront.o readcnf.o
	$(CC) -o gsat satfront.o readcnf.o gsat.o $(LIBS)

hsat.o: hsat.c readcnf.h satfront.h
	$(CC) -c hsat.c

hsat: hsat.o satfront.o readcnf.o
	$(CC) -o hsat satfront.o readcnf.o hsat.o $(LIBS)

sa.o: sa.c readcnf.h satfront.h
	$(CC) -c sa.c

sa: sa.o satfront.o readcnf.o
	$(CC) -o sa satfront.o readcnf.o sa.o $(LIBS)

wnovel.o: wnovel.c
	$(CC) -c wnovel.c

wnovel: wnovel.o satfront.o readcnf.o
	$(CC) -o wnovel satfront.o readcnf.o wnovel.o $(LIBS)

sdfflt.o: sdfflt.c satfront.h readcnf.h
	$(CC) -c sdfflt.c

sdfflt: sdfflt.o satfront.o readcnf.o
	$(CC) satfront.o readcnf.o sdfflt.o -o sdfflt $(LIBS)

sdfflt-noisy25.o: sdfflt.c satfront.h readcnf.h
	$(CC) -c sdfflt.c -o sdfflt-noisy25.o -DADD_NOISE -DADDED_NOISE=0.25

sdfflt-noisy25: sdfflt-noisy25.o satfront.o readcnf.o
	$(CC) satfront.o readcnf.o sdfflt-noisy25.o -o sdfflt-noisy25 $(LIBS)

sdfflt-noisy5.o: sdfflt.c satfront.h readcnf.h
	$(CC) -c sdfflt.c -o sdfflt-noisy5.o -DADD_NOISE -DADDED_NOISE=0.5

sdfflt-noisy5: sdfflt-noisy5.o satfront.o readcnf.o
	$(CC) satfront.o readcnf.o sdfflt-noisy5.o -o sdfflt-noisy5 $(LIBS)

sdfint.o: sdfint.c satfront.h readcnf.h
	$(CC) -c sdfint.c

sdfint: sdfint.o satfront.o readcnf.o
	$(CC) satfront.o readcnf.o sdfint.o -o sdfint $(LIBS)

dlm2k.o: dlm2k.c satfront.h readcnf.h
	$(CC) -c dlm2k.c

DLMSAT.o:	$(DLMDIR)/DLMSAT.c dlmparams/assigndump-dlm.c dlmparams/mobility1-dlm.c dlmparams/mobility2-dlm.c dlmparams/mobility3-dlm.c
	$(CC) -c $(DLMDIR)/utility.c $(DLMDIR)/DLMSAT.c $(DLMDIR)/ran2.c $(DLMDIR)/cputime.c

dlm2k: dlm2k.o satfront.o DLMSAT.o
	$(CC) satfront.o dlm2k.o DLMSAT.o cputime.o ran2.o utility.o -o dlm2k $(LIBS)

DLMSAT-noisy25.o:	$(DLMDIR)/DLMSAT.c dlmparams/assigndump-dlm.c dlmparams/mobility1-dlm.c dlmparams/mobility2-dlm.c dlmparams/mobility3-dlm.c
	$(CC) -o DLMSAT-noisy25.o -c $(DLMDIR)/DLMSAT.c -DADD_NOISE -DADDED_NOISE=0.25

dlm2k-noisy25: dlm2k.o satfront.o DLMSAT.o DLMSAT-noisy25.o
	$(CC) satfront.o dlm2k.o DLMSAT-noisy25.o cputime.o ran2.o utility.o -o dlm2k-noisy25 $(LIBS)

DLMSAT-noisy5.o:	$(DLMDIR)/DLMSAT.c dlmparams/assigndump-dlm.c dlmparams/mobility1-dlm.c dlmparams/mobility2-dlm.c dlmparams/mobility3-dlm.c
	$(CC) -o DLMSAT-noisy5.o -c $(DLMDIR)/DLMSAT.c -DADD_NOISE -DADDED_NOISE=0.5

dlm2k-noisy5: dlm2k.o satfront.o DLMSAT.o DLMSAT-noisy5.o
	$(CC) satfront.o dlm2k.o DLMSAT-noisy5.o cputime.o ran2.o utility.o -o dlm2k-noisy5 $(LIBS)


churn: churn.c
	$(CC) -o churn churn.c $(LIBS)


archive:
	mkdir falesat
	cp *.h falesat
	cp *.c falesat
	cp Makefile falesat
	tar zcvf falesat.tar.gz falesat
	rm -rf falesat

clean:
	rm -f *.o gsat gsat.exe wsat wsat.exe sa sa.exe wnovel wnovel.exe 
	rm -f hsat hsat.exe churn churn.exe mrsat mrsat.exe
	rm -f sdfint sdfint.exe sdfflt sdfflt.exe dlm2k dlm2k.exe
	rm -f sdfflt-noisy25 sdfflt-noisy5
	rm -f dlm2k-noisy25 dlm2k-noisy5