CC = g++
OPT = -O3 #-g -pg

#CC = insure
#OPT = -g -DINSURE

INCLUDE =
CFLAGS = $(INCLUDE) -Wall -pedantic

UTILS_SRCS = DataSource.cpp asvrTrain.cpp Utilities.cpp StandAlone.cpp
TEST_SRCS =  DataSource.cpp Utilities.cpp StandAlone.cpp
HEADERS = DataSource.H Utilities.H StandAlone.H Version.H

LDINC = -L.
LDLIBS =  -llapack -lblas -lF77 -lm -lc
#LDLIBS =  -llapack -lblas -lF77 -lm -lc -lpthread
LDFLAGS = $(LDINC) $(LDLIBS)

OOBJDIR = binarydir

UTILS_OOBJS = $(UTILS_SRCS:%.cpp=$(OOBJDIR)/%.o)
TEST_OOBJS = $(TEST_SRCS:%.cpp=$(OOBJDIR)/%.o)

.SUFFIXES: .o .cpp .f

%.dir:
	@if [ ! -d $* ]; then \
	  mkdir $*; \
	fi

$(OOBJDIR)/%.o: %.cpp $(HEADERS)
	$(CC) $(OPT) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

all: libs asvr test predict

libs:
	cd libF77; $(MAKE)
	cd BLAS; $(MAKE)
	cd CLAPACK; $(MAKE)

asvr: $(UTILS_OOBJS) $(HEADERS)
	$(CC) -o $@ $(OPT) $(UTILS_OOBJS) $(LDFLAGS) 

test: asvr asvrTest.cpp
	$(CC) -o asvr_test asvrTest.cpp $(OPT) $(TEST_OOBJS) $(CFLAGS) \
		$(LDFLAGS)

predict: asvr asvrPredict.cpp
	$(CC) -o asvr_predict asvrPredict.cpp $(OPT) $(TEST_OOBJS) $(CFLAGS) \
		$(LDFLAGS)

testcode: asvr testcode.cpp
	$(CC) -o testcode testcode.cpp $(OPT) $(TEST_OOBJS) $(CFLAGS) \
		$(LDFLAGS)

mex: asvr
	ar cr libtempl.a binarydir/asvrTrain.o binarydir/DataSource.o \
		binarydir/Utilities.o
	mex -DMEXFILE $(INCLUDE) $(LDINC) -ltempl $(LDLIBS) asvrmex.cpp

clean:
	rm $(OOBJDIR)/*.o libF77/*.o BLAS/*.o CLAPACK/*.o \
	  asvr asvr_test asvrmex.mexglx libF77.a \
	  libblas.a liblapack.a libtempl.a

cleanbin:
	rm $(OOBJDIR)/*.o
