BIN-DIR := bin
SRC-DIR := src
RM := rm -rf
EXECUTABLE := simulator
RELEASE-OPT := -O3 -Wall
DEBUG-OPT := -g3 -Wall
OPT := $(RELEASE-OPT)

OBJS := \
./$(BIN-DIR)/Main.o \
./$(BIN-DIR)/Boundary/Factory.o \
./$(BIN-DIR)/Boundary/Loader.o \
./$(BIN-DIR)/Boundary/OutCommand.o \
./$(BIN-DIR)/Control/Simulator.o \
./$(BIN-DIR)/Model/Data/Cell.o \
./$(BIN-DIR)/Model/Data/Law.o \
./$(BIN-DIR)/Model/Data/Link.o \
./$(BIN-DIR)/Model/Data/Molecule.o \
./$(BIN-DIR)/Model/Data/Solution.o \
./$(BIN-DIR)/Model/Data/State.o \
./$(BIN-DIR)/Model/Gillespie/ChemicalAction.o \
./$(BIN-DIR)/Model/Gillespie/Label.o \
./$(BIN-DIR)/Model/Gillespie/MechanicalAction.o \
./$(BIN-DIR)/Model/Gillespie/SimState.o \
./$(BIN-DIR)/Model/Gillespie/Tree.o  \

CPP-DEPS:= \
./$(BIN-DIR)/Main.d \
./$(BIN-DIR)/Boundary/Factory.d \
./$(BIN-DIR)/Boundary/Loader.d \
./$(BIN-DIR)/Boundary/OutCommand.d \
./$(BIN-DIR)/Control/Simulator.d \
./$(BIN-DIR)/Model/Data/Cell.d \
./$(BIN-DIR)/Model/Data/Law.d \
./$(BIN-DIR)/Model/Data/Link.d \
./$(BIN-DIR)/Model/Data/Molecule.d \
./$(BIN-DIR)/Model/Data/Solution.d \
./$(BIN-DIR)/Model/Data/State.d \
./$(BIN-DIR)/Model/Gillespie/ChemicalAction.d \
./$(BIN-DIR)/Model/Gillespie/Label.d \
./$(BIN-DIR)/Model/Gillespie/MechanicalAction.d \
./$(BIN-DIR)/Model/Gillespie/SimState.d \
./$(BIN-DIR)/Model/Gillespie/Tree.d  \

SUBDIR := Model/Data Model/Gillespie Control Boundary

all: make-subdir $(EXECUTABLE)
make-subdir: 
	for dir in $(SUBDIR); do \
	mkdir -p $(BIN-DIR)/$$dir ; \
	done
	
$(BIN-DIR)/Main.o: $(SRC-DIR)/Main.cpp 
	g++ $(OPT) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"


$(BIN-DIR)/Control/%.o: $(SRC-DIR)/Control/%.cpp 
	g++ $(OPT) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"

$(BIN-DIR)/Boundary/%.o: $(SRC-DIR)/Boundary/%.cpp 
	g++ $(OPT) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"

$(BIN-DIR)/Model/Gillespie/%.o: $(SRC-DIR)/Model/Gillespie/%.cpp 
	g++ $(OPT) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"

$(BIN-DIR)/Model/Data/%.o: $(SRC-DIR)/Model/Data/%.cpp 
	g++ $(OPT) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"

$(EXECUTABLE): $(OBJS)
	g++  -o "$(EXECUTABLE)" $(OBJS)

clean:
	-$(RM) $(CPP-DEPS) $(OBJS) $(EXECUTABLE)

.PHONY : clean

