CC = gcc
CXX = g++
LD = g++

YUIDOC = -yuidoc -e .cpp,.hpp,.js .

include user_makefile

ifndef BOOST_VERSION
BOOST_VERSION = 1_49
endif

DEBUGFLAGS = -g -ggdb -Wall
RELEASEFLAGS = -DNODEBUG -O3 -mwindows
export PARENT_DEFINES = -DBOOST_THREAD_USE_LIB $(DEBUGFLAGS)

DEFINES = $(USER_DEFINES) $(PARENT_DEFINES) -DDX_GCC_COMPILE -DDX_NON_INLINE_ASM -DDX_LIB_NOT_DEFAULTPATH -DLIBARCHIVE_STATIC -DSTATICLIB \
          -D_WIN32_WINNT=0x0501 --exec-charset=cp932
INCDIR = $(USER_INCDIR)

CPPFLAGS = $(USER_CPPFLAGS) $(DEFINES) $(INCDIR)
CFLAGS = $(USER_CFLAGS) -fno-strict-aliasing 
CXXFLAGS = $(USER_CXXFLAGS) $(CFLAGS) -std=gnu++0x -static-libgcc -static
LDFLAGS = $(USER_LDFLAGS) -L../common/network -L../common/database -lmmo-network -lmmo-database -lDxLib -lDxUseCLib -lDxDrawFunc -ljpeg -lpng -lzlib \
       -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lsnappy -lsqlite3 \
       -lbulletdynamics -lbulletcollision -lbulletmath \
       -lboost_system-mgw46-mt-s-$(BOOST_VERSION) -lboost_thread-mgw46-mt-s-$(BOOST_VERSION) \
       -lboost_filesystem-mgw46-mt-s-$(BOOST_VERSION) -lboost_date_time-mgw46-mt-s-$(BOOST_VERSION) \
       -lv8 -lminiupnpc -lwsock32 -lws2_32 -liphlpapi -lcrypto -lgdi32 -lwinmm -lpsapi

BINDIR = bin/

TARGET = $(BINDIR)mmo_debug
TARGET_RELEASE = $(BINDIR)mmo
OBJS := $(patsubst %.cpp,%.o,$(wildcard *.cpp))
OBJS += $(patsubst %.cpp,%.o,$(wildcard scene/*.cpp))
OBJS += $(patsubst %.cpp,%.o,$(wildcard network/*.cpp))
OBJS += $(patsubst %.cpp,%.o,$(wildcard ui/*.cpp))
OBJS += $(patsubst %.cpp,%.o,$(wildcard 3d/*.cpp))
OBJS += resource.o

TARGET_SERVER = $(BINDIR)server/mmoserver
OBJS_SERVER := $(patsubst %.cpp,%.o,$(wildcard ../server/*.cpp))

DEPENDS=$(patsubst %.o,%.d,$(OBJS))

all: $(OBJS) $(OBJS_SERVER) libmmo-network.a libmmo-database.a
	$(LD) $(CXXFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
	$(LD) $(CXXFLAGS) -o $(TARGET_SERVER) $(OBJS_SERVER) $(LDFLAGS)
	
release: $(OBJS) $(OBJS_SERVER) libmmo-network.a libmmo-database.a
	$(LD) $(CXXFLAGS) -o $(TARGET_RELEASE) $(OBJS) $(LDFLAGS)
	$(LD) $(CXXFLAGS) -o $(TARGET_SERVER) $(OBJS_SERVER) $(LDFLAGS)
	strip $(TARGET_RELEASE).exe
	$(YUIDOC)

#.PHONY : clean depend
cleanall:
	rm -f $(OBJS) $(TARGET).exe $(DEPENDS)
	rm -f $(OBJS) $(TARGET_RELEASE).exe $(DEPENDS)
	rm -f $(OBJS_SERVER) $(TARGET_SERVER).exe $(DEPENDS)
	$(MAKE) -C ../common/network clean
	$(MAKE) -C ../common/database clean
	
clean:
	rm -f $(OBJS) $(TARGET).exe $(DEPENDS)
	rm -f $(OBJS) $(TARGET_RELEASE).exe $(DEPENDS)
	rm -f $(OBJS_SERVER) $(TARGET_SERVER).exe $(DEPENDS)
	
cleanclient:
	rm -f $(OBJS) $(TARGET).exe $(DEPENDS)
	rm -f $(OBJS) $(TARGET_RELEASE).exe $(DEPENDS)
	
cleanserver:
	rm -f $(OBJS_SERVER) $(TARGET_SERVER).exe $(DEPENDS)

libmmo-network.a:
	$(MAKE) -C ../common/network
	
libmmo-database.a:
	$(MAKE) -C ../common/database

resource.o:
	windres resource.rc -o resource.o
	

#%.d: %.cpp
#	@set -e; $(CC) -MM $(CPPFLAGS) $(CXXFLAGS) $< | sed -e 's#\($*\)\.o[ :]*#\1.o $@ : #g' > $@; [ -s $@ ] || rm -f $@
#-include $(DEPENDS)
