INC_DIR := headers
SRC_DIR := src
OBJ_DIR := object

CC := g++
CPPFLAGS := -I$(INC_DIR) -MMD -MP
CXXFLAGS := -Wall
LDLIBS := -lSDL2

ALL_SOURCES := $(wildcard $(SRC_DIR)/*.cpp)
CORE_SOURCES := $(filter-out $(SRC_DIR)/main.cpp $(SRC_DIR)/controller_helper.cpp,$(ALL_SOURCES))

CORE_OBJECTS := $(CORE_SOURCES:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
MAIN_OBJECTS := $(OBJ_DIR)/main.o
HELPER_OBJECTS := $(OBJ_DIR)/controller_helper.o

DEPRS := $(wildcard $(OBJ_DIR)/*.d)

.PHONY: clean

main: $(CORE_OBJECTS) $(MAIN_OBJECTS)
	$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

controller_helper: $(CORE_OBJECTS) $(HELPER_OBJECTS)
	$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
    
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $(OUTPUT_OPTION) $<
   
clean: ; $(RM) $(DEPS) $(CORE_OBJECTS) $(MAIN_OBJECTS) $(HELPER_OBJECTS)

include: $(DEPS)

$(MAKEFILE_LIST): ;
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
