#
# invoke "make BUILD=DEBUG" or "make BUILD=RELEASE"
# 
# You can override this from the command line,
# e.g. make BUILD=DEBUG
BUILD=DEBUG
#BUILD=RELEASE
#BUILD=STATIC

TWIST_HOME=twist5

CXX = g++
LD = g++
CFLAGS = -std=c++11 -Iinclude -I$(TWIST_HOME)/include -W -Wall -Wno-unused
LFLAGS = 
LIBS = 
NAME = xmas16_for_eric

ifeq ($(BUILD),RELEASE)
	CFLAGS += -O3
	LFLAGS += -s
	BUILDDIR = build/release
endif
ifeq ($(BUILD),DEBUG)
	CFLAGS += -g -DDEBUG
	BUILDDIR = build/debug
endif

OBJDIR=$(BUILDDIR)/obj

ifdef WINDOWS
	CFLAGS += -D__GTHREAD_HIDE_WIN32API
	LFLAGS += -Wl,--subsystem,windows
	ifeq ($(BUILD),RELEASE)
		LIBS += -lallegro_monolith
	endif
	ifeq ($(BUILD),DEBUG)
		LIBS += -lallegro_monolith-debug
	endif
	BINSUF = .exe
	ICONOBJ = $(OBJDIR)/icon.o	
else
	ALLEGRO_MODULES=allegro allegro_primitives allegro_font allegro_main allegro_dialog allegro_image allegro_audio allegro_acodec allegro_ttf	
	ifeq ($(BUILD),RELEASE)
		ALLEGRO_LIBS = $(addsuffix -5, $(ALLEGRO_MODULES))
	endif
	ifeq ($(BUILD),DEBUG)
		ALLEGRO_LIBS = $(addsuffix -debug-5, $(ALLEGRO_MODULES))
	endif
	LIBS += `pkg-config --libs $(ALLEGRO_LIBS)`
	BINSUF =
endif

BIN = $(BUILDDIR)/$(NAME)$(BINSUF)

$(shell mkdir -p $(OBJDIR) >/dev/null)

vpath %.cpp $(TWIST_HOME)/src:src

SRC = $(wildcard src/*.cpp) $(wildcard $(TWIST_HOME)/src/*.cpp)
OBJ = $(patsubst %.cpp, $(OBJDIR)/%.o, $(notdir $(SRC)))

.PHONY: game
game: $(BIN)

$(BIN) : $(OBJ) $(ICONOBJ)
	$(LD) -o $(BIN) $^ $(LIBS) $(LFLAGS)
	@echo
	@echo "Build complete. Run $(BIN)"

# automatic dependency generation,
# as recommended by http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
DEPFLAGS = -MT $@ -MMD -MP -MF $(OBJDIR)/$*.Td

# Use temporary dep file & rename to avoid messing up deps when compilation fails.
$(OBJDIR)/%.o : %.cpp $(OBJDIR)/%.d
	$(CXX) $(CFLAGS) $(DEPFLAGS) -o $@ -c $<
	@mv -f $(OBJDIR)/$*.Td $(OBJDIR)/$*.d

$(ICONOBJ) : icon.rc icon.ico
	windres -I rc -O coff -i icon.rc -o $(ICONOBJ)

$(OBJDIR)/%.d: ;
.PRECIOUS: $(OBJDIR)/%.d

-include $(OBJDIR)/*.d

.PHONY: clean
clean:
	-$(RM) $(OBJDIR)/*.o $(OBJDIR)/*.d

.PHONY:distclean
distclean: clean
	-$(RM) $(BIN)
