#directories
phisical-sampler = .

#local directories
SRC = $(phisical-sampler)/src
OBJ = $(phisical-sampler)/obj
BIN = $(phisical-sampler)/bin

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

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

#macros
OBJECTS = $(OBJ)/main.o \
          $(OBJ)/CmdLineParser.o \
          $(OBJ)/VonMisesCircular.o \
          $(OBJ)/FileHandler.o \
          $(OBJ)/JointVonMisesCircular.o \
          $(OBJ)/AminoAcidMapper.o \
          $(OBJ)/Sampler.o \
          $(OBJ)/Util.o

ALL = $(BIN)/phisical-sampler

#targets
all: $(ALL)

#------------------------------------------------------------------------------
$(BIN)/phisical-sampler: $(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)/main.o: $(SRC)/main.cpp
		$(CPP) $(CPPFLAGS) -c $(DEBUGFLAG) $(SRC)/main.cpp -o $(OBJ)/main.o

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

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

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

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

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

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

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