#directories
seqmmligner = .

#local directories
SRC = $(seqmmligner)/src
OBJ = $(seqmmligner)/obj
BIN = $(seqmmligner)/bin

#compiler options
CPP = g++
CPPFLAGS = -std=c++11 -O3

DEBUGFLAG =
.cpp.o:
	$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) -o $@ $<

#macros
OBJECTS = $(OBJ)/main.o \
          $(OBJ)/cmdLineParser.o \
          $(OBJ)/misc.o \
		  $(OBJ)/SubmatClass.o \
		  $(OBJ)/DirichletClass.o \
		  $(OBJ)/FSAClass.o \
		  $(OBJ)/nullModelClass.o \
		  $(OBJ)/threeStateDPAClass.o \
		  $(OBJ)/expectedAlignmentDistance.o
ALL = $(BIN)/seqmmligner

#targets
all: $(ALL)

#------------------------------------------------------------------------------
$(BIN)/seqmmligner: $(OBJECTS) 
	$(CPP) $(CPPFLAGS)  $(LDFLAGS) -o $@ $(OBJECTS)

$(OBJ)/cmdLineParser.o: $(SRC)/cmdLineParser.h $(SRC)/cmdLineParser.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/cmdLineParser.cpp -o $(OBJ)/cmdLineParser.o

$(OBJ)/misc.o: $(SRC)/misc.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/misc.cpp -o $(OBJ)/misc.o

$(OBJ)/SubmatClass.o: $(SRC)/SubmatClass.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/SubmatClass.cpp -o $(OBJ)/SubmatClass.o

$(OBJ)/DirichletClass.o: $(SRC)/DirichletClass.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/DirichletClass.cpp -o $(OBJ)/DirichletClass.o

$(OBJ)/FSAClass.o: $(SRC)/FSAClass.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/FSAClass.cpp -o $(OBJ)/FSAClass.o

$(OBJ)/nullModelClass.o: $(SRC)/nullModelClass.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/nullModelClass.cpp -o $(OBJ)/nullModelClass.o

$(OBJ)/threeStateDPAClass.o: $(SRC)/threeStateDPAClass.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/threeStateDPAClass.cpp -o $(OBJ)/threeStateDPAClass.o

$(OBJ)/expectedAlignmentDistance.o: $(SRC)/expectedAlignmentDistance.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/expectedAlignmentDistance.cpp -o $(OBJ)/expectedAlignmentDistance.o

$(OBJ)/main.o: $(SRC)/main.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/main.cpp -o $(OBJ)/main.o
#------------------------------------------------------------------------------
clean:
	rm $(OBJ)/*.o

remove: clean
	rm  $(BIN)/*
#------------------------------------------------------------------------------

#******************************************************************************
