SHELL = /bin/sh OBJDIR = obj BINDIR = bin MKDIR = mkdir -p CC = mingw32-g++ LD = mingw32-g++ # Russell - choose your destiny SERVER_TARGET = server CLIENT_TARGET = client MASTER_TARGET = master # Russell - binary output SERVER_BIN = odasrv CLIENT_BIN = odamex MASTER_BIN = odamast # Russell - global compiler/linker flags # to add debug symbols, remove -Os and add -ggdb CFLAGS = -Os -D_WIN32 -DNOASM -Icommon LFLAGS = -lwsock32 -lwinmm # Russell - local flags specific to build type SERVER_CFLAGS = -I../server/win32 -Iserver/win32 -I../server/src -Iserver/src -D_CONSOLE SERVER_LFLAGS = CLIENT_CFLAGS = -I../client/sdl -Iclient/sdl -I../client/src -Iclient/src CLIENT_LFLAGS = $(shell sdl-config --libs) -lSDL_mixer MASTER_CFLAGS = # Russell - directory for each project COMMON_DIR = common SERVER_DIR = server/src CLIENT_DIR = client/src MASTER_DIR = master COMMON_HEADERS = $(wildcard $(COMMON_DIR)/*.h) COMMON_SOURCES = $(wildcard $(COMMON_DIR)/*.cpp) COMMON_OBJS = $(patsubst $(COMMON_DIR)/%.cpp,$(OBJDIR)/$(COMMON_DIR)/%.o,$(COMMON_SOURCES)) COMMON_OBJS_SERVER = $(patsubst $(COMMON_DIR)/%.cpp,$(OBJDIR)/$(COMMON_DIR)/server_%.o,$(COMMON_SOURCES)) COMMON_OBJS_CLIENT = $(patsubst $(COMMON_DIR)/%.cpp,$(OBJDIR)/$(COMMON_DIR)/client_%.o,$(COMMON_SOURCES)) SERVER_HEADERS_WIN32 = $(wildcard $(SERVER_DIR)/../win32/*.h) SERVER_SOURCES_WIN32 = $(wildcard $(SERVER_DIR)/../win32/*.cpp) SERVER_HEADERS = $(wildcard $(SERVER_DIR)/*.h) $(SERVER_HEADERS_WIN32) SERVER_SOURCES = $(wildcard $(SERVER_DIR)/*.cpp) $(SERVER_SOURCES_WIN32) SERVER_OBJS = $(patsubst $(SERVER_DIR)/%.cpp,$(OBJDIR)/$(SERVER_DIR)/%.o,$(SERVER_SOURCES)) CLIENT_HEADERS_WIN32 = $(wildcard $(CLIENT_DIR)/../sdl/*.h) CLIENT_SOURCES_WIN32 = $(wildcard $(CLIENT_DIR)/../sdl/*.cpp) CLIENT_HEADERS = $(wildcard $(CLIENT_DIR)/*.h) $(CLIENT_HEADERS_WIN32) CLIENT_SOURCES = $(wildcard $(CLIENT_DIR)/*.cpp) $(CLIENT_SOURCES_WIN32) CLIENT_OBJS = $(patsubst $(CLIENT_DIR)/%.cpp,$(OBJDIR)/$(CLIENT_DIR)/%.o,$(CLIENT_SOURCES)) MASTER_HEADERS = master/i_net.h MASTER_SOURCES = master/i_net.cpp master/main.cpp MASTER_OBJS = $(patsubst $(MASTER_DIR)/%.cpp,$(OBJDIR)/$(MASTER_DIR)/%.o,$(MASTER_SOURCES)) all: $(SERVER_TARGET) $(CLIENT_TARGET) $(MASTER_TARGET) # common for server $(OBJDIR)/$(COMMON_DIR)/server_%.o: $(COMMON_DIR)/%.cpp $(COMMON_HEADERS) $(SERVER_HEADERS) @$(MKDIR) $(dir $@) $(CC) $(CFLAGS) $(SERVER_CFLAGS) -c $< -o $@ # common for client $(OBJDIR)/$(COMMON_DIR)/client_%.o: $(COMMON_DIR)/%.cpp $(COMMON_HEADERS) $(CLIENT_HEADERS) @$(MKDIR) $(dir $@) $(CC) $(CFLAGS) $(CLIENT_CFLAGS) -c $< -o $@ # client $(CLIENT_TARGET): $(COMMON_OBJS_CLIENT) $(CLIENT_OBJS) @$(MKDIR) $(BINDIR) $(LD) $(CLIENT_OBJS) $(COMMON_OBJS_CLIENT) $(CLIENT_LFLAGS) $(LFLAGS) -o $(BINDIR)/$(CLIENT_BIN) $(OBJDIR)/$(CLIENT_DIR)/%.o: $(CLIENT_DIR)/%.cpp $(CLIENT_HEADERS) $(COMMON_HEADERS) @$(MKDIR) $(dir $@) $(CC) $(CLIENT_CFLAGS) $(CFLAGS) -c $< -o $@ # server $(SERVER_TARGET): $(COMMON_OBJS_SERVER) $(SERVER_OBJS) @$(MKDIR) $(BINDIR) $(LD) $(SERVER_OBJS) $(COMMON_OBJS_SERVER) $(SERVER_LFLAGS) $(LFLAGS) -o $(BINDIR)/$(SERVER_BIN) $(OBJDIR)/$(SERVER_DIR)/%.o: $(SERVER_DIR)/%.cpp $(SERVER_HEADERS) $(COMMON_HEADERS) @$(MKDIR) $(dir $@) $(CC) $(SERVER_CFLAGS) $(CFLAGS) -c $< -o $@ # master $(MASTER_TARGET): $(MASTER_OBJS) @$(MKDIR) $(BINDIR) $(LD) $(MASTER_OBJS) $(LFLAGS) -o $(BINDIR)/$(MASTER_BIN) $(OBJDIR)/$(MASTER_DIR)/%.o: $(MASTER_DIR)/%.cpp @$(MKDIR) $(dir $@) $(CC) $(MASTER_CFLAGS) $(CFLAGS) -c $< -o $@ #install: client server # cp $(TARGET) $(INSTALLDIR) # @echo "Installed odamex to $(BINDIR)" # #uninstall: # rm $(INSTALLDIR)/odamex # @echo "Removed odamex from $(BINDIR)" clean: @rm -rf $(OBJDIR)/* @rm -rf $(BINDIR)/* help: @echo ============================ @echo Odamex Windows Makefile help @echo ============================ @echo To compile EVERYTHING: make all @echo To compile the SERVER: make $(SERVER_TARGET) @echo To compile the CLIENT: make $(CLIENT_TARGET) @echo To compile the MASTER: make $(MASTER_TARGET) @echo ---------------------------- @echo Note: the directory in which the binary(s) will be located is: $(BINDIR) @echo SERVER binary file has the prefix: $(SERVER_BIN) @echo CLIENT binary file has the prefix: $(CLIENT_BIN) @echo MASTER binary file has the prefix: $(MASTER_BIN)