8cb3fb5893
This works by exporting all the symbols for the dynamic loader so that LuaRocks' shared libraries may bind to them on load. Also allowed lua's dlopen().
195 lines
5.0 KiB
Makefile
195 lines
5.0 KiB
Makefile
###################################################
|
|
#
|
|
# Makefile for MCServer
|
|
# Creator: tedik
|
|
#
|
|
###################################################
|
|
#
|
|
# 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 release=1"
|
|
# To make a debug build, call "make"
|
|
# To make a 32-bit build on 64-bit OS, pass the addm32=1 flag
|
|
# To build with clang, you need to add disableasm=1 flag
|
|
#
|
|
###################################################
|
|
|
|
#
|
|
# Macros
|
|
#
|
|
|
|
# allow user to override compiler
|
|
# if no compiler is specified make specifies cc
|
|
ifeq ($(CC),cc)
|
|
CC = /usr/bin/g++
|
|
endif
|
|
|
|
all: MCServer/MCServer
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# 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
|
|
|
|
ifeq ($(release),1)
|
|
################
|
|
# release build - fastest run-time, no gdb support
|
|
################
|
|
|
|
CC_OPTIONS = -O3 -DNDEBUG -DLUA_USE_DLOPEN
|
|
CXX_OPTIONS = -O3 -DNDEBUG -DLUA_USE_DLOPEN
|
|
LNK_OPTIONS = -pthread -O3
|
|
|
|
BUILDDIR = build/release/
|
|
|
|
else
|
|
ifeq ($(profile),1)
|
|
################
|
|
# profile build - a release build with symbols and profiling engine built in
|
|
################
|
|
|
|
CC_OPTIONS = -g -ggdb -O3 -pg -DNDEBUG -DLUA_USE_DLOPEN
|
|
CXX_OPTIONS = -g -ggdb -O3 -pg -DNDEBUG -DLUA_USE_DLOPEN
|
|
LNK_OPTIONS = -pthread -ggdb -O3 -pg
|
|
|
|
BUILDDIR = build/profile/
|
|
|
|
else
|
|
################
|
|
# debug build - fully traceable by gdb in C++ code, slowest
|
|
# Since C code is used only for supporting libraries (zlib, lua), it is still Ofast-optimized
|
|
################
|
|
|
|
CC_OPTIONS = -ggdb -g -D_DEBUG -O3 -DLUA_USE_DLOPEN
|
|
CXX_OPTIONS = -ggdb -g -D_DEBUG -O1 -DLUA_USE_DLOPEN
|
|
LNK_OPTIONS = -pthread -g -ggdb -O1
|
|
|
|
BUILDDIR = build/debug/
|
|
|
|
endif
|
|
endif
|
|
|
|
##################################################
|
|
# Always be warning.
|
|
|
|
CXX_OPTIONS += -Wall
|
|
|
|
###################################################
|
|
# Fix Crypto++ warnings in clang
|
|
|
|
ifeq ($(shell $(CXX) --version 2>&1 | grep -i -c "clang version"),1)
|
|
CC_OPTIONS += -DCRYPTOPP_DISABLE_ASM
|
|
CXX_OPTIONS += -DCRYPTOPP_DISABLE_ASM
|
|
endif
|
|
|
|
|
|
###################################################
|
|
# Set the link libraries based on the OS
|
|
# Linux uses libdl
|
|
# FreeBSD uses libltdl
|
|
# TODO: other OSs?
|
|
|
|
UNAME := $(shell uname -s)
|
|
ifeq ($(UNAME),Linux)
|
|
LNK_LIBS = -lstdc++ -ldl -lm
|
|
else
|
|
LNK_LIBS = -lstdc++ -lltdl
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# Export all symbols from the executable, so that LuaRocks may bind to Lua routines:
|
|
LNK_OPTIONS += -rdynamic
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# 32-bit build override in 64-bit build environments
|
|
|
|
ifeq ($(addm32),1)
|
|
CC_OPTIONS += -m32
|
|
CXX_OPTIONS += -m32
|
|
LNK_OPTIONS += -m32
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# INCLUDE directories for MCServer
|
|
|
|
INCLUDE = -Isrc\
|
|
-Ilib\
|
|
-Ilib/jsoncpp/include
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# Build MCServer
|
|
|
|
SOURCES := $(shell find src lib '(' -name '*.cpp' -o -name '*.c' ')')
|
|
SOURCES := $(filter-out %minigzip.c %lua.c %tolua.c %toluabind.c %LeakFinder.cpp %StackWalker.cpp %example.c,$(SOURCES))
|
|
OBJECTS := $(patsubst %.c,$(BUILDDIR)%.o,$(SOURCES))
|
|
OBJECTS := $(patsubst %.cpp,$(BUILDDIR)%.o,$(OBJECTS))
|
|
|
|
-include $(patsubst %.o,%.d,$(OBJECTS))
|
|
|
|
MCServer/MCServer : $(OBJECTS)
|
|
$(CC) $(LNK_OPTIONS) $(OBJECTS) $(LNK_LIBS) -o MCServer/MCServer
|
|
|
|
clean :
|
|
rm -rf $(BUILDDIR) MCServer/MCServer
|
|
|
|
install : MCServer
|
|
cp MCServer MCServer
|
|
|
|
|
|
|
|
|
|
|
|
###################################################
|
|
# Build the parts of MCServer
|
|
#
|
|
# 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
|