summaryrefslogtreecommitdiffstats
path: root/Tools/BlockZapper/GNUmakefile
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/BlockZapper/GNUmakefile')
-rw-r--r--Tools/BlockZapper/GNUmakefile185
1 files changed, 185 insertions, 0 deletions
diff --git a/Tools/BlockZapper/GNUmakefile b/Tools/BlockZapper/GNUmakefile
new file mode 100644
index 000000000..edd5f9009
--- /dev/null
+++ b/Tools/BlockZapper/GNUmakefile
@@ -0,0 +1,185 @@
+###################################################
+#
+# Makefile for BlockZapper
+# Creator: xoft
+#
+###################################################
+#
+# Info:
+# This makefile is gnu-make spacific, other make systems needn't understand it
+# This makefile generates include-file dependencies into *.d files in each build and then reuses these dependencies in the following builds
+#
+# Usage:
+# To make a release build, call "make"
+# To make a debug build, call "make debug=1"
+#
+###################################################
+
+#
+# Macros
+#
+
+CC = /usr/bin/g++
+
+
+all: BlockZapper
+
+
+
+
+
+###################################################
+# Set the variables used for compiling, based on the build mode requested:
+# CC_OPTIONS ... options for the C code compiler
+# CXX_OPTIONS ... options for the C++ code compiler
+# LNK_OPTIONS ... options for the linker
+# LNK_LIBS ... libraries to link in
+# -- according to http://stackoverflow.com/questions/6183899/undefined-reference-to-dlopen, libs must come after all sources
+# BUILDDIR ... folder where the intermediate object files are built
+
+LNK_LIBS = -lstdc++ -ldl -lz
+
+ifeq ($(debug),1)
+################
+# debug build - fully traceable by gdb in C++ code, slowest
+# Since C code is used only for supporting libraries (zlib, lua), it is still O3-optimized
+################
+CC_OPTIONS = -s -ggdb -g -D_DEBUG -O3
+CXX_OPTIONS = -s -ggdb -g -D_DEBUG
+LNK_OPTIONS = -pthread -g -ggdb
+BUILDDIR = build/debug/
+
+else
+ifeq ($(profile),1)
+################
+# profile build - a release build with symbols and profiling engine built in
+################
+CC_OPTIONS = -s -g -ggdb -O3 -pg -DNDEBUG
+CXX_OPTIONS = -s -g -ggdb -O3 -pg -DNDEBUG
+LNK_OPTIONS = -pthread -ggdb -O3 -pg
+BUILDDIR = build/profile/
+
+else
+ifeq ($(pedantic),1)
+################
+# pedantic build - basically a debug build with lots of warnings
+################
+CC_OPTIONS = -s -g -ggdb -D_DEBUG -Wall -Wextra -pedantic -ansi -Wno-long-long
+CXX_OPTIONS = -s -g -ggdb -D_DEBUG -Wall -Wextra -pedantic -ansi -Wno-long-long
+LNK_OPTIONS = -pthread -ggdb
+BUILDDIR = build/pedantic/
+
+else
+################
+# release build - fastest run-time, no detailed gdb support
+################
+CC_OPTIONS = -s -g -O3 -DNDEBUG
+CXX_OPTIONS = -s -g -O3 -DNDEBUG
+LNK_OPTIONS = -pthread -O3
+BUILDDIR = build/release/
+endif
+endif
+endif
+
+
+
+################
+# 32-bit build override in 64-bit build environments
+# - so that BearBin doesn't need to modify his makefile after each makefile change :)
+################
+ifeq ($(addm32),1)
+CC_OPTIONS += -m32
+CXX_OPTIONS += -m32
+LNK_OPTIONS += -m32
+endif
+
+
+
+###################################################
+# INCLUDE directories
+#
+
+INCLUDE = -I.\
+ -I../../source\
+ -I../../zlib-1.2.7\
+
+
+
+
+
+###################################################
+# Build BlockZapper
+#
+
+SOURCES := $(shell find . '(' -name '*.cpp' -o -name '*.c' ')')
+
+SHAREDSOURCES := \
+ source/Log.cpp \
+ source/MCLogger.cpp \
+ source/Noise.cpp \
+ source/StringCompression.cpp \
+ source/StringUtils.cpp \
+ source/OSSupport/CriticalSection.cpp \
+ source/OSSupport/File.cpp \
+ source/OSSupport/IsThread.cpp \
+ source/OSSupport/MakeDir.cpp \
+ source/WorldStorage/FastNBT.cpp
+
+SHAREDSOURCES := $(filter-out %minigzip.c,$(SHAREDSOURCES))
+
+OBJECTS := $(patsubst %.c,$(BUILDDIR)%.o,$(SOURCES))
+OBJECTS := $(patsubst %.cpp,$(BUILDDIR)%.o,$(OBJECTS))
+
+SHAREDOBJECTS := $(patsubst %.c,$(BUILDDIR)%.o,$(SHAREDSOURCES))
+SHAREDOBJECTS := $(patsubst %.cpp,$(BUILDDIR)%.o,$(SHAREDOBJECTS))
+
+-include $(patsubst %.o,%.d,$(OBJECTS))
+-include $(patsubst %.o,%.d,$(SHAREDOBJECTS))
+
+BlockZapper : $(OBJECTS) $(SHAREDOBJECTS)
+ $(CC) $(LNK_OPTIONS) $(OBJECTS) $(SHAREDOBJECTS) $(LNK_LIBS) -o BlockZapper
+
+clean :
+ rm -rf $(BUILDDIR) BlockZapper
+
+install : MCServer
+ cp MCServer MCServer
+
+
+
+
+
+###################################################
+# Build the parts of BlockZapper
+#
+# options used:
+# -x c ... compile as C code
+# -c ... compile but do not link
+# -MM ... generate a list of includes
+
+$(BUILDDIR)%.o: %.c
+ @mkdir -p $(dir $@)
+ $(CC) $(CC_OPTIONS) -x c -c $(INCLUDE) $< -o $@
+ @$(CC) $(CC_OPTIONS) -x c -MM $(INCLUDE) $< > $(patsubst %.o,%.d,$@)
+ @mv -f $(patsubst %.o,%.d,$@) $(patsubst %.o,%.d,$@).tmp
+ @sed -e "s|.*:|$(BUILDDIR)$*.o:|" < $(patsubst %.o,%.d,$@).tmp > $(patsubst %.o,%.d,$@)
+ @sed -e 's/.*://' -e 's/\\$$//' < $(patsubst %.o,%.d,$@).tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $(patsubst %.o,%.d,$@)
+ @rm -f $(patsubst %.o,%.d,$@).tmp
+
+$(BUILDDIR)%.o: %.cpp
+ @mkdir -p $(dir $@)
+ $(CC) $(CXX_OPTIONS) -c $(INCLUDE) $< -o $@
+ @$(CC) $(CXX_OPTIONS) -MM $(INCLUDE) $< > $(patsubst %.o,%.d,$@)
+ @mv -f $(patsubst %.o,%.d,$@) $(patsubst %.o,%.d,$@).tmp
+ @sed -e "s|.*:|$(BUILDDIR)$*.o:|" < $(patsubst %.o,%.d,$@).tmp > $(patsubst %.o,%.d,$@)
+ @sed -e 's/.*://' -e 's/\\$$//' < $(patsubst %.o,%.d,$@).tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $(patsubst %.o,%.d,$@)
+ @rm -f $(patsubst %.o,%.d,$@).tmp
+
+$(BUILDDIR)source/%.o: ../../source/%.cpp
+ @mkdir -p $(dir $@)
+ $(CC) $(CXX_OPTIONS) -c $(INCLUDE) $< -o $@
+ @$(CC) $(CXX_OPTIONS) -MM $(INCLUDE) $< > $(patsubst %.o,%.d,$@)
+ @mv -f $(patsubst %.o,%.d,$@) $(patsubst %.o,%.d,$@).tmp
+ @sed -e "s|.*:|$(BUILDDIR)$*.o:|" < $(patsubst %.o,%.d,$@).tmp > $(patsubst %.o,%.d,$@)
+ @sed -e 's/.*://' -e 's/\\$$//' < $(patsubst %.o,%.d,$@).tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $(patsubst %.o,%.d,$@)
+ @rm -f $(patsubst %.o,%.d,$@).tmp