184 lines
5.2 KiB
Makefile
184 lines
5.2 KiB
Makefile
###################################################
|
|
#
|
|
# 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 https://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../../src\
|
|
-I../../lib\
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# Build BlockZapper
|
|
#
|
|
|
|
SOURCES := $(shell find . '(' -name '*.cpp' -o -name '*.c' ')')
|
|
|
|
SHAREDSOURCES := \
|
|
src/Log.cpp \
|
|
src/MCLogger.cpp \
|
|
src/Noise.cpp \
|
|
src/StringCompression.cpp \
|
|
src/StringUtils.cpp \
|
|
src/OSSupport/CriticalSection.cpp \
|
|
src/OSSupport/File.cpp \
|
|
src/OSSupport/IsThread.cpp \
|
|
src/OSSupport/MakeDir.cpp \
|
|
src/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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# 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)src/%.o: ../../src/%.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
|