#Detect what kind of system we're on ifeq ($(OS), Windows_NT) UNAME:=Windows else UNAME:=$(shell uname -s) endif ifeq ($(UNAME), Windows) EXE_EXT=.exe STA_LIB_EXT=.lib DYN_LIB_EXT=.dll CMAKE_TYPE="MinGW Makefiles" CMAKE_FLAGS=-G $(CMAKE_TYPE) -DCMAKE_SH="CMAKE_SH-NOTFOUND" endif ifeq ($(UNAME), Linux) EXE_EXT= STA_LIB_EXT=.a DYN_LIB_EXT=.so CMAKE_TYPE="Unix Makefiles" CMAKE_FLAGS= -G $(CMAKE_TYPE) endif #Run with mingw32-make CLIENT_NAME=brokengine CLIENT_EXE=$(CLIENT_NAME)$(EXE_EXT) CLIENT_DIR=bin/client/bin CLIENT_PATH=$(CLIENT_DIR)/$(CLIENT_EXE) CLIENT_SRC=src/client/ CLIENT_BUILD=build/client/ SERVER_NAME=brokeserver SERVER_EXE=$(SERVER_NAME)$(EXE_EXT) SERVER_DIR=bin/server/bin SERVER_PATH=$(SERVER_DIR)/$(SERVER_EXE) SERVER_SRC=src/server/ SERVER_BUILD=build/server/ SHARED_SRC=src/shared/ TEST_PATH=bin/test/ TEST_SRC=src/test/ MASTER_EXE=borkmaster.exe #Change these on linux CC=g++ MKDIR=mkdir RM=rm -f ECHO=printf #Include directories ILUADIR=./lib/luajit/src IIRRDIR=./lib/irrlicht/include IBULDIR=./lib/bullet/src INANDIR=./lib/nanomsg/src ISHADIR=./src INCLUDES=-I$(ILUADIR) -I$(IIRRDIR) -I$(IBULDIR) -I$(INANDIR) -I$(ISHADIR) #library directories LLUADIR=lib/luajit LIRRDIR=lib/irrlicht LBULDIR=lib/bullet LNANDIR=lib/nanomsg LIBRARIES=-Llib #Libraries LIBLUA=lib/libluajit.a LIBIRR=lib/libIrrlicht.a LIBBCO=lib/libBulletCollision.a LIBBDY=lib/libBulletDynamics.a LIBBLM=lib/libLinearMath.a LIBNAN=lib/libnanomsg.a DLLIRR=$(LIRRDIR)/Irrlicht.dll DYNAMIC_LIBS = #-lnanomsg.dll #-lIrrlicht #order matters! STATIC_LIBS = -lBulletDynamics -lBulletCollision -lLinearMath -lIrrlicht -lluajit -lOpenGL32 -lnanomsg LIBS=-Bstatic $(STATIC_LIBS) -Bdynamic $(DYNAMIC_LIBS) SLIBS=$(LIBLUA) $(LIBIRR) $(LIBBDY) $(LIBBCO) $(LIBBLM) $(LIBNAN) #can't compile with -std=c++11 because irrlicht will complain CFLAGS=-Wall -static $(INCLUDES) -D_IRR_STATIC_LIB_ -DNN_STATIC_LIB LDFLAGS= ifeq ($(UNAME),Windows) LDFLAGS+=-mwindows -lwinmm #-Wl,-subsystem,windows STATIC_LIBS+=-lws2_32 -lmswsock -ladvapi32 endif ifeq ($(UNAME),true) ifeq ($(UNAME),Windows) LDFLAGS+=-Wl,-subsystem,console endif endif ifeq ($(DEBUG),true) CFLAGS+=-g else CFLAGS+=-O3 #LDFLAGS+=--strip-all endif all : $(CLIENT_PATH) $(SERVER_PATH) client : $(CLIENT_PATH) server : $(SERVER_PATH) #Compile the client $(CLIENT_PATH) : $(CLIENT_BUILD)main.o $(CLIENT_BUILD)initdevice.o $(CLIENT_BUILD)menuhandeler.o $(CLIENT_BUILD)load_gui.o $(CLIENT_BUILD)callbackhandeler.o $(CLIENT_BUILD)load_game.o $(CLIENT_BUILD)load_scene.o $(CLIENT_BUILD)load_phys.o $(CLIENT_BUILD)common.o $(CLIENT_BUILD)load_net.o $(CLIENT_BUILD)physcommon.o $(SLIBS) $(CLIENT_BUILD)load_video.o $(CC) $(CFLAGS) -o $(CLIENT_PATH) $(CLIENT_BUILD)*.o $(LIBRARIES) $(DYNAMIC_LIBS) $(STATIC_LIBS) $(SLIBS) $(LDFLAGS) $(CLIENT_BUILD)main.o : $(CLIENT_SRC)main.cpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)main.o $(CLIENT_SRC)main.cpp $(CLIENT_BUILD)physcommon.o : $(SHARED_SRC)phys/physcommon.cpp $(SHARED_SRC)phys/physcommon.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)physcommon.o $(SHARED_SRC)phys/physcommon.cpp $(CLIENT_BUILD)load_net.o : $(SHARED_SRC)lua_api/load_net.cpp $(SHARED_SRC)lua_api/load_net.hpp $(CLIENT_BUILD)stream.o $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_net.o $(SHARED_SRC)lua_api/load_net.cpp $(CLIENT_BUILD)stream.o : $(SHARED_SRC)lua_api/stream.cpp $(SHARED_SRC)lua_api/stream.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)stream.o $(SHARED_SRC)lua_api/stream.cpp $(CLIENT_BUILD)common.o : $(SHARED_SRC)lua_api/common.c $(SHARED_SRC)lua_api/common.h $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)common.o $(SHARED_SRC)lua_api/common.c $(CLIENT_BUILD)initdevice.o : $(CLIENT_SRC)initdevice.cpp $(CLIENT_SRC)initdevice.hpp $(CC) $(CFLAGS) -c -static -o $(CLIENT_BUILD)initdevice.o $(CLIENT_SRC)initdevice.cpp $(CLIENT_BUILD)menuhandeler.o : $(CLIENT_SRC)menuhandeler.cpp $(CLIENT_SRC)menuhandeler.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)menuhandeler.o $(CLIENT_SRC)menuhandeler.cpp $(CLIENT_BUILD)load_game.o : $(CLIENT_SRC)lua_api/load_game.cpp $(CLIENT_SRC)lua_api/load_game.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_game.o $(CLIENT_SRC)lua_api/load_game.cpp $(CLIENT_BUILD)load_gui.o : $(CLIENT_BUILD)iguibutton.o $(CLIENT_BUILD)iguilabel.o $(CLIENT_BUILD)iguielement.o $(CLIENT_BUILD)iguiwindow.o $(CLIENT_BUILD)iguiskin.o $(CLIENT_BUILD)iguicheckbox.o $(CLIENT_BUILD)common.o $(CLIENT_BUILD)iguiimage.o $(CLIENT_SRC)lua_api/load_gui.cpp $(CLIENT_SRC)lua_api/load_gui.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_gui.o $(CLIENT_SRC)lua_api/load_gui.cpp $(CLIENT_BUILD)iguiimage.o : $(CLIENT_SRC)lua_api/gui/iguiimage.cpp $(CLIENT_SRC)lua_api/gui/iguiimage.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiimage.o $(CLIENT_SRC)lua_api/gui/iguiimage.cpp $(CLIENT_BUILD)iguiwindow.o : $(CLIENT_BUILD)iguiutil.o $(CLIENT_SRC)lua_api/gui/iguiwindow.cpp $(CLIENT_SRC)lua_api/gui/iguiwindow.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiwindow.o $(CLIENT_SRC)lua_api/gui/iguiwindow.cpp $(CLIENT_BUILD)iguiutil.o : $(CLIENT_SRC)lua_api/gui/iguiutil.cpp $(CLIENT_SRC)lua_api/gui/iguiutil.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiutil.o $(CLIENT_SRC)lua_api/gui/iguiutil.cpp $(CLIENT_BUILD)load_video.o : $(CLIENT_SRC)lua_api/load_video.cpp $(CLIENT_SRC)lua_api/load_video.hpp $(CLIENT_BUILD)smaterial.o $(CLIENT_BUILD)itexture.o $(CLIENT_BUILD)iimage.o $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_video.o $(CLIENT_SRC)lua_api/load_video.cpp $(CLIENT_BUILD)smaterial.o : $(CLIENT_SRC)lua_api/video/smaterial.cpp $(CLIENT_SRC)lua_api/video/smaterial.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)smaterial.o $(CLIENT_SRC)lua_api/video/smaterial.cpp $(CLIENT_BUILD)itexture.o : $(CLIENT_SRC)lua_api/video/itexture.cpp $(CLIENT_SRC)lua_api/video/itexture.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)itexture.o $(CLIENT_SRC)lua_api/video/itexture.cpp $(CLIENT_BUILD)iimage.o : $(CLIENT_SRC)lua_api/video/iimage.cpp $(CLIENT_SRC)lua_api/video/iimage.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iimage.o $(CLIENT_SRC)lua_api/video/iimage.cpp $(CLIENT_BUILD)load_phys.o : $(CLIENT_BUILD)cbphysbox.o $(CLIENT_BUILD)bphysmodel.o $(CLIENT_SRC)lua_api/load_phys.cpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_phys.o $(CLIENT_SRC)lua_api/load_phys.cpp $(CLIENT_BUILD)load_scene.o : $(CLIENT_BUILD)icamera.o $(CLIENT_BUILD)ilight.o $(CLIENT_BUILD)imesh.o $(CLIENT_BUILD)cbphysbox.o $(CLIENT_SRC)/lua_api/load_scene.cpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)load_scene.o $(CLIENT_SRC)lua_api/load_scene.cpp $(CLIENT_BUILD)ilight.o : $(CLIENT_SRC)lua_api/scene/ilight.cpp $(CLIENT_SRC)lua_api/scene/ilight.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)ilight.o $(CLIENT_SRC)lua_api/scene/ilight.cpp $(CLIENT_BUILD)iguibutton.o : $(CLIENT_SRC)lua_api/gui/iguibutton.cpp $(CLIENT_SRC)lua_api/gui/iguibutton.hpp $(CLIENT_SRC)lua_api/guiparts.hpp $(CLIENT_SRC)callbackhandeler.hpp $(CLIENT_SRC)util/hashmap.h $(SHARED_SRC)lua_api/common.c $(SHARED_SRC)lua_api/common.h $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguibutton.o $(CLIENT_SRC)lua_api/gui/iguibutton.cpp $(CLIENT_BUILD)iguilabel.o : $(CLIENT_SRC)lua_api/gui/iguilabel.cpp $(CLIENT_SRC)lua_api/gui/iguilabel.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguilabel.o $(CLIENT_SRC)lua_api/gui/iguilabel.cpp $(CLIENT_BUILD)iguicheckbox.o : $(CLIENT_SRC)lua_api/gui/iguicheckbox.cpp $(CLIENT_SRC)lua_api/gui/iguicheckbox.hpp $(SHARED_SRC)lua_api/common.h $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguicheckbox.o $(CLIENT_SRC)lua_api/gui/iguicheckbox.cpp $(CLIENT_BUILD)iguielement.o : $(CLIENT_BUILD)hashmap.o $(CLIENT_SRC)lua_api/gui/iguielement.cpp $(CLIENT_SRC)lua_api/gui/iguielement.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguielement.o $(CLIENT_SRC)lua_api/gui/iguielement.cpp $(CLIENT_BUILD)iguiskin.o : $(CLIENT_SRC)lua_api/gui/iguiskin.cpp $(CLIENT_SRC)lua_api/gui/iguiskin.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)iguiskin.o $(CLIENT_SRC)lua_api/gui/iguiskin.cpp $(CLIENT_BUILD)icamera.o : $(CLIENT_BUILD)igeneric.o $(CLIENT_SRC)lua_api/scene/icamera.cpp $(CLIENT_SRC)lua_api/scene/icamera.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)icamera.o $(CLIENT_SRC)lua_api/scene/icamera.cpp $(CLIENT_BUILD)imesh.o : $(CLIENT_SRC)lua_api/scene/imesh.cpp $(CLIENT_SRC)lua_api/scene/imesh.hpp $(CLIENT_SRC)lua_api/scene/igeneric.cpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)imesh.o $(CLIENT_SRC)lua_api/scene/imesh.cpp $(CLIENT_BUILD)igeneric.o: $(CLIENT_SRC)lua_api/scene/igeneric.cpp $(CLIENT_SRC)lua_api/scene/igeneric.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)igeneric.o $(CLIENT_SRC)lua_api/scene/igeneric.cpp $(CLIENT_BUILD)cbphysbox.o: $(CLIENT_SRC)lua_api/phys/cbphysbox.cpp $(CLIENT_SRC)lua_api/phys/cbphysbox.hpp $(CLIENT_SRC)lua_api/scene/igeneric.cpp $(CLIENT_BUILD)bphysbox.o $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)cbphysbox.o $(CLIENT_SRC)lua_api/phys/cbphysbox.cpp $(CLIENT_BUILD)bphysbox.o: $(SHARED_SRC)lua_api/phys/bphysbox.cpp $(SHARED_SRC)lua_api/phys/bphysbox.hpp $(CLIENT_BUILD)common.o $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)bphysbox.o $(SHARED_SRC)lua_api/phys/bphysbox.cpp $(CLIENT_BUILD)bphysmodel.o: $(CLIENT_SRC)lua_api/phys/bphysmodel.cpp $(CLIENT_SRC)lua_api/phys/bphysmodel.hpp $(CLIENT_SRC)lua_api/scene/igeneric.cpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)bphysmodel.o $(CLIENT_SRC)lua_api/phys/bphysmodel.cpp $(CLIENT_BUILD)callbackhandeler.o : $(CLIENT_SRC)callbackhandeler.cpp $(CLIENT_SRC)callbackhandeler.hpp $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)callbackhandeler.o $(CLIENT_SRC)callbackhandeler.cpp $(CLIENT_BUILD)hashmap.o : $(CLIENT_SRC)util/hashmap.c $(CLIENT_SRC)util/hashmap.h $(CC) $(CFLAGS) -c -o $(CLIENT_BUILD)hashmap.o $(CLIENT_SRC)util/hashmap.c #end compile client #compile server $(SERVER_PATH) : $(SERVER_BUILD)main.o $(SERVER_BUILD)hashmap.o $(SERVER_BUILD)common.o $(SERVER_BUILD)physcommon.o $(SERVER_BUILD)load_net.o $(SERVER_BUILD)load_phys.o $(CC) $(CFLAGS) -o $(SERVER_PATH) $(SERVER_BUILD)*.o $(LIBRARIES) $(STATIC_LIBS) $(SLIBS) $(LDFLAGS) $(SERVER_BUILD)main.o : $(SERVER_SRC)main.cpp $(SERVER_SRC)testclient.cpp $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)main.o $(SERVER_SRC)main.cpp $(SERVER_BUILD)physcommon.o : $(SHARED_SRC)phys/physcommon.cpp $(SHARED_SRC)phys/physcommon.hpp $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)physcommon.o $(SHARED_SRC)phys/physcommon.cpp $(SERVER_BUILD)hashmap.o : $(SHARED_SRC)util/hashmap.c $(SHARED_SRC)util/hashmap.h $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)hashmap.o $(SHARED_SRC)util/hashmap.c $(SERVER_BUILD)common.o : $(SHARED_SRC)lua_api/common.c $(SHARED_SRC)lua_api/common.h $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)common.o $(SHARED_SRC)lua_api/common.c # Net $(SERVER_BUILD)load_net.o : $(SHARED_SRC)lua_api/load_net.cpp $(SHARED_SRC)lua_api/load_net.hpp $(SERVER_BUILD)stream.o $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)load_net.o $(SHARED_SRC)lua_api/load_net.cpp $(SERVER_BUILD)stream.o : $(SHARED_SRC)lua_api/stream.cpp $(SHARED_SRC)lua_api/stream.hpp $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)stream.o $(SHARED_SRC)lua_api/stream.cpp # Phys $(SERVER_BUILD)load_phys.o: $(SHARED_SRC)lua_api/load_phys.cpp $(SHARED_SRC)lua_api/load_phys.hpp $(SERVER_BUILD)bphysbox.o $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)load_phys.o $(SHARED_SRC)lua_api/load_phys.cpp $(SERVER_BUILD)bphysbox.o : $(SHARED_SRC)lua_api/phys/bphysbox.cpp $(SHARED_SRC)lua_api/phys/bphysbox.hpp $(CC) $(CFLAGS) -c -o $(SERVER_BUILD)bphysbox.o $(SHARED_SRC)lua_api/phys/bphysbox.cpp #end compile server #compile libraries $(LIBLUA) : $(ILUADIR)/Makefile sed -i "s/BUILDMODE= mixed/BUILDMODE= static/" $(ILUADIR)/Makefile cd $(ILUADIR) && $(MAKE) cp $(ILUADIR)/libluajit.a lib IRRMAKEFLAGS= IRRMADELIB= ifeq ($(DEBUG),true) IRRMAKEFLAGS+=NDEBUG=1 endif ifeq ($(UNAME), Windows) IRRMAKEFLAGS=staticlib_win32 IRRMADELIB=$(LIRRDIR)/lib/Win32-gcc else IRRMAKEFLAGS=NDEBUG=1 IRRMADELIB=$(LIRRDIR)/lib/Linux endif $(LIBIRR) : $(LIRRDIR)/source/Irrlicht/Makefile cd $(LIRRDIR)/source/Irrlicht && $(MAKE) $(IRRMAKEFLAGS) cp $(IRRMADELIB)/libIrrlicht.a lib $(LIBBCO) : $(LBULDIR)/Makefile cd $(LBULDIR) && make BulletCollision cp $(LBULDIR)/src/BulletCollision/libBulletCollision.a lib $(LIBBDY) : $(LBULDIR)/Makefile cd $(LBULDIR) && make BulletDynamics cp $(LBULDIR)/src/BulletDynamics/libBulletDynamics.a lib $(LIBBLM) : $(LBULDIR)/Makefile cd $(LBULDIR) && make LinearMath cp $(LBULDIR)/src/LinearMath/libLinearMath.a lib $(LBULDIR)/Makefile : $(LBULDIR)/CMakeLists.txt cd $(LBULDIR) && cmake $(CMAKE_FLAGS) -DBUILD_EXTRAS=off -DBUILD_DEMOS=off $(LIBNAN) : $(LNANDIR)/Makefile cd $(LNANDIR) && make cp $(LNANDIR)/libnanomsg.a lib # cp $(LNANDIR)/libnanomsg.dll $(CLIENT_DIR) # cp $(LNANDIR)/libnanomsg.dll $(SERVER_DIR) $(LNANDIR)/Makefile : $(LNANDIR)/CMakeLists.txt cd $(LNANDIR) && cmake -DNN_STATIC_LIB=ON $(CMAKE_FLAGS) #compile & run tests test: $(TEST_PATH)test_stream $(TEST_PATH)test_phys @$(ECHO) "Testing stream : " @./$(TEST_PATH)test_stream @$(ECHO) "Testing physics: " @./$(TEST_PATH)test_phys $(TEST_PATH)test_stream : $(TEST_SRC)test_streams.cpp $(SHARED_SRC)/lua_api/stream.cpp $(SHARED_SRC)/lua_api/stream.hpp @$(CC) $(CFLAGS) -o $(TEST_PATH)test_stream $(TEST_SRC)test_streams.cpp $(SHARED_SRC)/lua_api/stream.cpp $(SHARED_SRC)/lua_api/stream.hpp $(TEST_PATH)test_phys : $(TEST_SRC)test_phys.cpp $(CC) $(CFLAGS) -o $(TEST_PATH)test_phys $(TEST_SRC)test_phys.cpp $(SLIBS) #end tests clean : $(RM) $(SERVER_PATH) $(RM) $(CLIENT_PATH) $(RM) $(CLIENT_BUILD)*.o $(RM) $(SERVER_BUILD)*.o