BIN := GodModeOn

DIRSRC := src
DIROBJ := obj
DIRHEA := include
DIRLIB := lib/

DIROGRE := lib/OGRE
DIRBOOST := lib/OGRE/boost
DIROIS := lib/OIS
DIRCEGUI := lib/CEGUI
DIRBULLET := lib/BULLET
DIROGREBULLET := lib/OGREBULLET

CXX := g++

CXXFLAGS := -I $(DIRHEA) -I $(DIROGRE) -I $(DIRBOOST) -I $(DIROIS) -I $(DIRCEGUI) -I $(DIRBULLET) -I $(DIROGREBULLET) -Wall -std=c++11

LDFLAGS := -I$(DIRLIB)
LDLIBS := -Wl,-rpath $(DIRLIB) '$(DIRLIB)libOgreMain.so' '$(DIRLIB)libpthread.so' '$(DIRLIB)libOIS.so' '$(DIRLIB)libCEGUIOgreRenderer.so' '$(DIRLIB)libCEGUIBase.so' '$(DIRLIB)libOgreBulletCol.so' '$(DIRLIB)libOgreBulletDyn.so' '$(DIRLIB)libBulletSoftBody.so' '$(DIRLIB)libBulletDynamics.so' '$(DIRLIB)libBulletCollision.so' '$(DIRLIB)libLinearMath.so'

ifeq ($(mode), debug)
	CXXFLAGS += -O2
else
	CXXFLAGS += -g
	mode := release
endif

OBJS := $(subst $(DIRSRC), $(DIROBJ), \
	$(patsubst %.cpp, %.o, $(wildcard $(DIRSRC)/*.cpp)))

.PHONY: all clean prepare info build

Debug: all
Release: all

all: info prepare build

prepare:
	@mkdir -p $(DIROBJ)

info:
	@echo '------------------------------------------------------'
	@echo '>>> Using mode $(mode)'
	@echo '    (Please, call "make" with [mode=debug|release])  '
	@echo '------------------------------------------------------'

build: $(BIN)

clean: clean_build

# Clean specific targets

clean_build:
	@echo 'Cleaning build...'
	@rm -rf *.log *.cfg $(BIN) *~ $(DIROBJ) $(DIRSRC)/*~ $(DIRHEA)/*~
	@echo 'Done!'

# Build specific rules

$(BIN): $(OBJS)
	$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS)

$(DIROBJ)/%.o: $(DIRSRC)/%.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@
