diff options
| author | Alexander Pickering <alex@cogarr.net> | 2019-07-08 20:19:52 -0400 |
|---|---|---|
| committer | Alexander Pickering <alex@cogarr.net> | 2019-07-08 20:19:52 -0400 |
| commit | 6539fbff3d4ecd686676f7c0de6672de38023764 (patch) | |
| tree | e62c8fd147e21cdd50b2793484bc5a4b874e40c8 /Makefile.win | |
| parent | f5f0ff5635c52775665fd99b994521f90fe12d95 (diff) | |
| download | brokengine-6539fbff3d4ecd686676f7c0de6672de38023764.tar.gz brokengine-6539fbff3d4ecd686676f7c0de6672de38023764.tar.bz2 brokengine-6539fbff3d4ecd686676f7c0de6672de38023764.zip | |
Updating make system
Splitting up makefiles into several to make things more manageable
Diffstat (limited to 'Makefile.win')
| -rw-r--r-- | Makefile.win | 394 |
1 files changed, 394 insertions, 0 deletions
diff --git a/Makefile.win b/Makefile.win new file mode 100644 index 0000000..b4e8162 --- /dev/null +++ b/Makefile.win @@ -0,0 +1,394 @@ + +#Detect what kind of system we're on +ifeq ($(OS), Windows_NT) + UNAME:=Windows +else + UNAME:=$(shell uname -s) +endif + +CP=cp +CXX?=g++ +MKDIR?=mkdir +RM?=rm -f +ECHO?=echo + +ifeq ($(UNAME), Windows) + EXE_EXT=.exe + STA_LIB_EXT=.a + 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 + +BIN_DIR=bin +BUILD_DIR=build +SRC_DIR=src +LIB_DIR=lib +DOC_DIR=doc + +CLIENTNAME=client +SERVERNAME=server +MASTERNAME=#masterserver +BINS= + +EX_PRE = brokengine_ +EX_PARTS = $(CLIENTNAME) $(SERVERNAME) $(MASTERNAME) + +NAMES = $(EX_PARTS:%=$(EX_PRE)%) +BINS+= $(foreach part,$(EX_PARTS),$(BIN_DIR)/$(part)/bin/$(EX_PRE)$(part)$(EXE_EXT)) +BUILDS = $(EX_PARTS:%=$(BUILD_DIR)/%) +SRC_DIRS = $(EX_PARTS:%=$(SRC_DIR)/%) + + +LLUADIR=$(LIB_DIR)/luajit +LIRRDIR=$(LIB_DIR)/irrlicht +LBULDIR=$(LIB_DIR)/bullet +LNNGDIR=$(LIB_DIR)/nng +LOBJDIR=$(LIB_DIR)/tinyobjloader-c + +#Include directories +ILUADIR=$(LLUADIR)/src +IIRRDIR=$(LIRRDIR)/include +IBULDIR=$(LBULDIR)/src +INNGDIR=$(LNNGDIR)/include +IOBJDIR=$(LOBJDIR)/ +ISHADIR=src +INCLUDE_PATHS=-I$(ILUADIR) -I$(IIRRDIR) -I$(IBULDIR) -I$(INNGDIR) -I$(ISHADIR) -I$(IOBJDIR) +#library directories + +CXXFLAGS+=$(INCLUDE_PATHS) + +CXXFLAGS+=-Llib + +#Library binary names +ifeq ($(UNAME),Windows) + LIB_N_LUA=lua51 + LIB_N_IRR=Irrlicht$(DYN_LIB_EXT) +endif +ifeq ($(UNAME),Linux) + LIB_N_LUA=libluajit + LIB_N_IRR=libIrrlicht$(DYN_LIB_EXT).1.8.4 #TODO: Automatically detect version +endif + +#Libraries +#static libs +LIB_S_LUA=$(LIB_DIR)/libluajit.a +LIB_S_IRR=$(LIB_DIR)/libIrrlicht.a +LIB_S_BCO=$(LIB_DIR)/libBulletCollision.a +LIB_S_BDY=$(LIB_DIR)/libBulletDynamics.a +LIB_S_BLM=$(LIB_DIR)/libLinearMath.a +LIB_S_NNG=$(LIB_DIR)/libnng.a + +#dynamic libraries +LIB_D_LUA=$(LIB_DIR)/$(LIB_N_LUA)$(DYN_LIB_EXT) +LIB_D_IRR=lib/$(LIB_N_IRR) +# Bullet cannot be built dynamically +LIB_D_BCO=$(LIB_S_BCO) +LIB_D_BDY=$(LIB_S_BDY) +LIB_D_BLM=$(LIB_S_BLM) +LIB_D_NNG=lib/libnng$(DYN_LIB_EXT) + +ifeq ($(UNAME),Windows) + CLIENT_DLLS=Irrlicht libnng lua51 + SERVER_DLLS=libnng lua51 +endif +ifeq ($(UNAME),Linux) + CLIENT_DLLS=Irrlicht libnng luajit + SERVER_DLLS=libnng luajit +endif +ifeq ($(DEBUG),true) + LIB_OBJS = $(LIB_D_LUA) $(LIB_D_IRR) $(LIB_D_BCO) $(LIB_D_BDY) $(LIB_D_BLM) $(LIB_D_NNG) + BINS+=$(CLIENT_DLLS:%=$(BIN_DIR)/$(CLIENTNAME)/bin/%$(DYN_LIB_EXT)) $(SERVER_DLLS:%=$(BIN_DIR)/$(SERVERNAME)/bin/%$(DYN_LIB_EXT)) +else + LIB_OBJS = $(LIB_S_LUA) $(LIB_S_IRR) $(LIB_S_BCO) $(LIB_S_BDY) $(LIB_S_BLM) $(LIB_S_NNG) +endif + +# Libraries +#order matters! +CLIENT_LIBS=-lBulletDynamics -lBulletCollision -lLinearMath -lIrrlicht -lnng +SERVER_LIBS=-lBulletDynamics -lBulletCollision -lLinearMath -lnng +#LIBS=-lBulletDynamics -lBulletCollision -lLinearMath -lIrrlicht -lnng +ifeq ($(UNAME),Windows) + CLIENT_LIBS+=-lOpenGL32 +else + CLIENT_LIBS+=-lGL +endif +ifeq ($(DEBUG),true) +ifeq ($(UNAME),Windows) + CLIENT_LIBS+=-llua51 + SERVER_LIBS+=-llua51 +endif +ifeq ($(UNAME),Linux) + CLIENT_LIBS+=-lluajit + SERVER_LIBS+=-lluajit +endif +else + CLIENT_LIBS+=-lluajit + SERVER_LIBS+=-lluajit +endif + +#can't compile with -std=c++11 because irrlicht will complain +#LDFLAGS+=$(LIBS) +ifeq ($(DEBUG), true) + +else + CXXFLAGS += -static $(INCLUDE_PATHS) -D_IRR_STATIC_LIB_ -DNNG_STATIC_LIB +endif +S_LDFLAGS= $(SERVER_LIBS) +C_LDFLAGS= $(CLIENT_LIBS) +ifeq ($(UNAME),Windows) + C_LDFLAGS += -mwindows -lwinmm -lstdc++ + ifeq ($(DEBUG),true) + + else + C_LDFLAGS += -lws2_32 -lmswsock -ladvapi32 + S_LDFLAGS += -lws2_32 -lmswsock -ladvapi32 + endif +endif + +ifeq ($(DEBUG),true) + ifeq ($(UNAME),Windows) + C_LDFLAGS+=-Wl,-subsystem,console + endif +endif + +ifeq ($(DEBUG),true) + CXXFLAGS+=-O0 -g -Wall -Werror +else + CXXFLAGS+=-O3 +endif + +FSYSTEM_FOLDERS = lua_api phys util lua_api/irr lua_api/phys lua_api/gui lua_api/scene lua_api/video +CLIENT_BUILD_FOLDERS = $(FSYSTEM_FOLDERS:%=$(BUILD_DIR)/$(CLIENTNAME)/%) + +all : $(BINS) + @echo "Done" + +# The shared stuff +LAPI_S_PHYS = bhingeconstraint bphysbox bphysmodel bphysgeneric bcharactercontroller bghostobject bcollider +LAPI_S_LOAD = load_phys load_net common stream load_common +LAPI_PATHS_T = $(LAPI_S_PHYS:%=lua_api/phys/%) $(LAPI_S_LOAD:%=lua_api/%) +SHARED_CLIENT_FILES = $(LAPI_PATHS_T) phys/physcommon util/hashmap util/tinyobj +SHARED_CLIENT_OBJS = $(SHARED_CLIENT_FILES:%=$(BUILD_DIR)/$(CLIENTNAME)/%.o) + +# The client-side only stuff +LAPI_C_GUI = iguibutton iguicheckbox iguielement iguiimage iguilabel iguiwindow iguieditbox iguicolorselector iguifiledialog iguispinbox iguitreeview iguicombobox +LAPI_C_PHYS = cbphysbox cbphysmodel cbcharactercontroller +LAPI_C_SCENE = icamera igeneric ilight imesh +LAPI_C_VIDEO = iimage itexture smaterial +LAPI_C_IO = ifilesystem +LAPI_LOAD = load_gui load_scene load_game load_cphys load_video load_io +LAPI_OBJS_T = $(LAPI_C_GUI:%=gui/%.o) $(LAPI_C_PHYS:%=phys/%.o) $(LAPI_C_SCENE:%=scene/%.o) $(LAPI_C_VIDEO:%=video/%.o) $(LAPI_C_IO:%=io/%.o) +LAPI_OBJS = $(LAPI_OBJS_T:%=$(BUILD_DIR)/$(CLIENTNAME)/lua_api/%) $(LAPI_LOAD:%=$(BUILD_DIR)/$(CLIENTNAME)/lua_api/%.o) +CLIENT_FILES = initdevice menuhandeler callbackhandeler +CLIENT_SRCS = $(CLIENT_FILES:%=$(BUILD_DIR)/$(CLIENTNAME)/%.o) $(LAPI_OBJS) +CLIENT_OBJS = $(BUILD_DIR)/$(CLIENTNAME)/main.o $(CLIENT_SRCS) $(SHARED_CLIENT_OBJS) + +#Compile the client +$(BIN_DIR)/$(CLIENTNAME)/bin/$(EX_PRE)$(CLIENTNAME)$(EXE_EXT) : $(CLIENT_OBJS) $(LIB_OBJS) + @echo "[CLIENT] Building binary $@" + $(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(C_LDFLAGS) $(LIB_OBJS) # -Wl,--verbose + +# does not have .hpp associated +$(BUILD_DIR)/$(CLIENTNAME)/main.o : $(SRC_DIR)/client/main.cpp + @$(CXX) $(CXXFLAGS) -c -o $@ $^ + +# does have the .hpp associated in src/client +$(CLIENT_SRCS) : $(BUILD_DIR)/$(CLIENTNAME)/%.o : src/client/%.cpp $(SRC_DIR)/client/%.hpp $(LIB_OBJS) + @echo "[CLIENT] CXX $<" + @$(CXX) $(CXXFLAGS) -c -o $@ $< + +# does have the .hpp associated in src/shared +$(SHARED_CLIENT_OBJS) : $(BUILD_DIR)/$(CLIENTNAME)/%.o : src/shared/%.cpp $(SRC_DIR)/shared/%.hpp + @echo "[CLIENT] CXX $<" + @$(CXX) $(CXXFLAGS) -c -o $@ $< + +#compile server +SERVER_FILES = lua_api/load_game lua_api/load_io +SERVER_OBJ=$(SERVER_FILES:%=$(BUILD_DIR)/$(SERVERNAME)/%.o) +SHARED_SERVER_FILES= $(LAPI_PATHS_T) util/hashmap phys/physcommon util/tinyobj +SHARED_SERVER_OBJS=$(SHARED_SERVER_FILES:%=$(BUILD_DIR)/$(SERVERNAME)/%.o) +SERVER_OBJS = $(SERVER_OBJ) $(SHARED_SERVER_OBJS) $(BUILD_DIR)/$(SERVERNAME)/main.o + +$(BIN_DIR)/$(SERVERNAME)/bin/$(EX_PRE)$(SERVERNAME)$(EXE_EXT) : $(SERVER_OBJS) $(LIB_OBJS) + @echo "[SERVER] Building binary $@" + @$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(S_LDFLAGS) + +# Special, main does not have a .hpp associated with it +$(BUILD_DIR)/$(SERVERNAME)/main.o : $(SRC_DIR)/server/main.cpp + @echo "[SERVER] CXX $<" + @$(CXX) $(CXXFLAGS) -c -o $@ $^ + +$(SHARED_SERVER_OBJS) : $(BUILD_DIR)/$(SERVERNAME)/%.o : $(SRC_DIR)/shared/%.cpp $(SRC_DIR)/shared/%.hpp + @echo "[SERVER] CXX $<" + @$(CXX) $(CXXFLAGS) -c -o $@ $< + +$(SERVER_OBJ) : $(BUILD_DIR)/$(SERVERNAME)/%.o : $(SRC_DIR)/server/%.cpp $(SRC_DIR)/server/%.hpp + @echo "[SERVER] CXX $<" + @$(CXX) $(CXXFLAGS) -c -o $@ $< + +#compile libraries +$(LIBLUA) : $(ILUADIR)/Makefile + @echo "Could not find $(LIBLUA), rebuilding" + cd $(ILUADIR) && $(MAKE) "BUILDMODE= static" + $(CP) $(ILUADIR)/libluajit.a lib + +IRRMAKEFLAGS= +IRRMADELIB= +ifeq ($(UNAME), Windows) + ifeq ($(DEBUG),true) + IRRMAKEFLAGS=sharedlib_win32 + IRRMADELIB=$(LIRRDIR)/bin/Win32-gcc + else + IRRMAKEFLAGS=staticlib_win32 + IRRMADELIB=$(LIRRDIR)/lib/Win32-gcc + endif +else + IRRMADELIB=$(LIRRDIR)/lib/Linux +endif + +ifeq ($(DEBUG),true) +else + IRRMAKEFLAGS+=NDEBUG=1 +endif + +# Library - Irrlicht +$(LIB_S_IRR) : $(IRRMADELIB)/libIrrlicht.a + $(CP) $^ $@ + +$(IRRMADELIB)/libIrrlicht.a : $(LIRRDIR)/source/Irrlicht/Makefile + sed --in-place=OLD 's/ -ld3dx9d//' lib/irrlicht/source/Irrlicht/Makefile + cd $(LIRRDIR)/source/Irrlicht && $(MAKE) $(IRRMAKEFLAGS) + +$(LIB_D_IRR) : $(IRRMADELIB)/$(LIB_N_IRR) + @echo "Could not find $@, remaking..." + $(CP) $^ $@ + +$(BIN_DIR)/$(CLIENTNAME)/bin/Irrlicht$(DYN_LIB_EXT) : $(IRRMADELIB)/$(LIB_N_IRR) + $(CP) $^ $@* + +$(IRRMADELIB)/$(LIB_N_IRR) : $(LIRRDIR)/source/Irrlicht/Makefile + sed --in-place=OLD 's/ -ld3dx9d//' lib/irrlicht/source/Irrlicht/Makefile + cd $(LIRRDIR)/source/Irrlicht && $(MAKE) $(IRRMAKEFLAGS) + +ifeq ($(UNAME),Windows) + LUAJIT_ARGS:= TARGET_SYS=Windows +else + #LUAJIT_ARGS= +endif + +# Library - Lua +$(BIN_DIR)/$(CLIENTNAME)/bin/$(LIB_N_LUA)$(DYN_LIB_EXT) : $(LIB_D_LUA) + $(CP) $^ $@ + +$(BIN_DIR)/$(SERVERNAME)/bin/$(LIB_N_LUA)$(DYN_LIB_EXT) : $(LIB_D_LUA) + $(CP) $^ $@ + +$(LLUADIR)/src/libluajit$(STA_LIB_EXT) : $(LLUADIR)/src/Makefile + cd $(LLUADIR)/src && $(MAKE) $(LUAJIT_ARGS) "BUILDMODE= static" + +$(LIB_S_LUA) : $(LLUADIR)/src/libluajit$(STA_LIB_EXT) + $(CP) $^ $@ + +$(LLUADIR)/src/lua51$(DYN_LIB_EXT) : $(LLUADIR)/src/Makefile + cd $(LLUADIR)/src && $(MAKE) $(LUAJIT_ARGS) "BUILDMODE= dynamic" + +$(LIB_D_LUA) : $(LLUADIR)/src/$(LIB_N_LUA)$(DYN_LIB_EXT) + $(CP) $^ $@ + +# Library - Bullet +$(LBULDIR)/lib/libBulletCollision.a : $(LBULDIR)/Makefile + cd $(LBULDIR) && $(MAKE) BulletCollision + +$(LBULDIR)/lib/libBulletDynamics.a : $(LBULDIR)/Makefile + cd $(LBULDIR) && $(MAKE) BulletDynamics + +$(LBULDIR)/lib/libLinearMath.a : $(LBULDIR)/Makefile + cd $(LBULDIR) && $(MAKE) LinearMath + +ifeq ($(UNAME),Windows) +$(LIB_D_BCO) : $(LBULDIR)/lib/libBulletCollision.a + $(CP) $^ $@ + +$(LIB_D_BDY) : $(LBULDIR)/lib/libBulletDynamics.a + $(CP) $^ $@ + +$(LIB_D_BLM) : $(LBULDIR)/lib/libLinearMath.a + $(CP) $^ $@ +endif +ifeq ($(UNAME),Linux) +$(LIB_D_BCO) : $(LBULDIR)/src/BulletCollision/libBulletCollision.a + $(CP) $^ $@ + +$(LIB_D_BDY) : $(LBULDIR)/src/BulletDynamics/libBulletDynamics.a + $(CP) $^ $@ + +$(LIB_D_BLM) : $(LBULDIR)/src/LinearMath/libLinearMath.a + $(CP) $^ $@ +endif + +$(LBULDIR)/Makefile : $(LBULDIR)/CMakeLists.txt + cd $(LBULDIR) && cmake $(CMAKE_FLAGS) -DBUILD_EXTRAS=off -DBUILD_DEMOS=off + +# Library - NNG +NNGFLAGS= +$(BIN_DIR)/$(CLIENTNAME)/bin/libnng$(DYN_LIB_EXT) : $(LIB_D_NNG) + $(CP) $^ $@ + +$(BIN_DIR)/$(SERVERNAME)/bin/libnng$(DYN_LIB_EXT) : $(LIB_D_NNG) + $(CP) $^ $@ + +$(LNNGDIR)/dynamic/Makefile : $(LNNGDIR)/CMakeLists.txt + cd $(LNNGDIR)/dynamic && cmake $(CMAKE_FLAGS) -DBUILD_SHARED_LIBS="TRUE" ../ + +$(LIB_S_NNG) : $(LNNGDIR)/static/libnng$(STA_LIB_EXT) + $(CP) $< $@ + +$(LIB_D_NNG) : $(LNNGDIR)/dynamic/libnng$(DYN_LIB_EXT) + $(CP) $< $@ + +$(LNNGDIR)/static/libnng$(STA_LIB_EXT) : $(LNNGDIR)/static/Makefile + cd $(LNNGDIR)/static && $(MAKE) nng + ln -s $(LNNGDIR)/src $(LNNGDIR)/include/nng + +$(LNNGDIR)/dynamic/libnng$(DYN_LIB_EXT) : $(LNNGDIR)/dynamic/Makefile + cd $(LNNGDIR)/dynamic && $(MAKE) nng + ln -s $(LNNGDIR)/src $(LNNGDIR)/include/nng + +$(LNNGDIR)/Makefile : $(LNNGDIR)/CMakeLists.txt + @echo "LIB_OBJS were $(LIB_OBJS)" + cd $(LNNGDIR) && cmake $(CMAKE_FLAGS) $(NNGCMAKEFLAGS) + +TEST_BIN_NAMES=brokengine_client.exe Irrlicht.dll libnanomsg.dll libnng.dll lua51.dll +TEST_BINS=$(TEST_BIN_NAMES:%=test/bin/%) + +#compile & run tests +test: $(TEST_BINS) + @$(ECHO) "Running busted tests" + @./busted busted.spec + +$(TEST_BINS) : test/bin/% : bin/client/bin/% + $(CP) $^ $@ + +$(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 + +cleantest : + echo $(BUILDS:%=%/*.o) + +clean : + $(RM) $(CLIENT_OBJS) + $(RM) $(SERVER_OBJS) + $(RM) $(BINS) |
