Files
taverne-server-source/server/libthecore/src/Makefile
T

87 lines
2.9 KiB
Makefile
Executable File

BIN_DIR = ../lib
BIN = $(BIN_DIR)/libthecore.a
INCLUDE = ../include
# ---------------------------------------------------------------------------
# ### LINUX-BLOCK-BEGIN (Makefile platform detection)
#
# The FreeBSD build is the production build and must keep working exactly as
# before: on FreeBSD "uname -s" reports "FreeBSD", the ifeq below is false and
# every variable is assigned by the else branch, which is verbatim the original
# Makefile (same CC, same GCC_VERSION probe, same CFLAGS in both arms of the
# original ifeq, same "ar cru"). Only the Linux branch is new.
# ---------------------------------------------------------------------------
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
# clang++-devel is the FreeBSD ports name for the development clang; it does
# not exist on Linux. g++ with gcc-multilib is the Linux equivalent and, like
# clang++, compiles these .c files as C++ - which they rely on (they are
# declared "extern C" through the headers, so the emitted symbols are the same
# either way). Override on the command line with "make CC=clang++" if wanted.
CC = g++
# -m32: the whole server is a 32-bit build. Do NOT add -D_TIME_BITS=64 here or
# anywhere else - sizeof(time_t) must stay 4 under -m32 because several
# packed wire/DB structures embed it.
# -fno-strict-aliasing: tea.c, des.c, gost.c and buffer.c type-pun through
# char*/DWORD* casts. That is undefined behaviour under the strict
# aliasing rules GCC applies at -O2, and it is exactly the kind of code
# GCC 13 miscompiles silently. clang has historically been laxer here,
# which is why the FreeBSD build never needed the flag.
# -std=c++23: matches game/src/Makefile and db/src/Makefile so the whole link
# is built against one set of libstdc++ headers.
CFLAGS = -Wall -O2 -pipe -mtune=i686 -g -m32 -std=c++23 -fno-strict-aliasing -I$(INCLUDE)
# GNU ar warns "`u' modifier ignored since `D' is the default" on every
# invocation; the archive is created from scratch anyway.
ARFLAGS_THECORE = cr
else
CC = clang++-devel
GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3 | cut -d'.' -f1)
ifeq ($(GCC_VERSION), 4)
CFLAGS = -Wall -O2 -pipe -mtune=i686 -g -I$(INCLUDE)
else
CFLAGS = -Wall -O2 -pipe -mtune=i686 -g -I$(INCLUDE)
endif
ARFLAGS_THECORE = cru
endif
# ### LINUX-BLOCK-END (Makefile platform detection)
LIBS =
OBJFILES = socket.o fdwatch.o buffer.o signal.o log.o utils.o \
kstbl.o hangul.o heart.o main.o tea.o des.o gost.o memcpy.o
default:
$(MAKE) $(BIN)
$(BIN): $(OBJFILES)
if [ ! -d $(BIN_DIR) ]; then mkdir $(BIN_DIR); fi
ar $(ARFLAGS_THECORE) $(BIN) $(OBJFILES) $(LIBS)
ranlib $(BIN)
chmod 700 $(BIN)
clean:
rm -f *.o
rm -f $(BIN)
dep:
$(CC) $(CFLAGS) -MM *.c > Depend
$(OBJFILES):
$(CC) $(CFLAGS) -c $<
memcpy: memcpy.o utils.o log.o
$(CC) $(CFLAGS) -c -D__MAIN__ memcpy.c
$(CC) $(CFLAGS) -o memcpy memcpy.o utils.o log.o
include Depend