mirror of https://github.com/FWGS/xash3d-fwgs
207 lines
5.2 KiB
Makefile
207 lines
5.2 KiB
Makefile
#############################################
|
|
# Makefile.linux - linux makefile
|
|
# Copyright (C) 2017 mittorn
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
##############################################
|
|
|
|
# Default options - optimized to debug on local machine
|
|
CC ?= gcc
|
|
CXX ?= g++
|
|
CFLAGS ?= -g -O1 -fsigned-char -Wall -Wextra -Wsign-compare -Wno-unknown-pragmas -Wno-missing-field-initializers -Wno-unused-parameter -Wno-unused-but-set-variable
|
|
LDFLAGS =
|
|
LBITS := $(shell getconf LONG_BIT)
|
|
DEPS :=
|
|
|
|
XASH_COMMIT := $(firstword $(shell git rev-parse --short=6 HEAD) unknown)
|
|
|
|
ifeq ($(XASH_COMMIT),unknown)
|
|
$(warning You seems to build xash3d without git)
|
|
$(warning Please use git if you are going to publish your build)
|
|
endif
|
|
|
|
# Pass 64BIT=1 to make arguments to allow amd64 builds
|
|
ifneq ($(64BIT),1)
|
|
ifeq ($(LBITS),64)
|
|
LDFLAGS += -m32
|
|
CFLAGS += -m32
|
|
endif
|
|
endif
|
|
|
|
TOPDIR = $(PWD)/..
|
|
INCLUDES :=
|
|
XASH_SINGLE_BINARY ?= 1
|
|
INSTALL_DIR ?= ./install/
|
|
ifeq ($(NANOGL),1)
|
|
INCLUDES += -Inanogl -Inanogl/GL
|
|
endif
|
|
INCLUDES += -I/usr/include/SDL2 -Icommon -I../common -I. -I../pm_shared -Iclient -Iserver -Iclient/vgui -Icommon/sdl
|
|
|
|
#############################
|
|
# Preprocessor defines:
|
|
#############################
|
|
DEFINES =
|
|
|
|
# Specify commit hash in version string
|
|
DEFINES += -DXASH_BUILD_COMMIT=\"$(XASH_COMMIT)\"
|
|
|
|
|
|
# Only SDL backend exists on linux
|
|
ifeq ($(XASH_DEDICATED),1)
|
|
DEFINES += -DXASH_DEDICATED
|
|
else
|
|
DEFINES += -DXASH_SDL
|
|
LIBS += -lSDL2
|
|
endif
|
|
|
|
#############################################
|
|
# GL/GLES translators.
|
|
# You need clone it to engine folder to use
|
|
# Only one translator should be enabled
|
|
#############################################
|
|
ifeq ($(NANOGL),1)
|
|
DEFINES += -DXASH_NANOGL -D__MULTITEXTURE_SUPPORT__ -DEGL_LIB=\"libEGL.so\"
|
|
endif
|
|
|
|
ifeq ($(WES),1)
|
|
DEFINES += -DXASH_WES -D__MULTITEXTURE_SUPPORT__ -DEGL_LIB=\"libEGL.so\"
|
|
endif
|
|
|
|
ifeq ($(REGAL),1)
|
|
DEFINES += -DXASH_REGAL -D__MULTITEXTURE_SUPPORT__ -DEGL_LIB=\"regal/lib/linux-32/libRegal.so\"
|
|
LIBS += regal/lib/linux-32/libRegal.so
|
|
endif
|
|
|
|
# Some libc implementations cannot use libdl in static builds, so disable it by default
|
|
ifeq ($(XASH_STATIC),1)
|
|
|
|
ifneq ($(XASH_STATIC_LIBDL),1)
|
|
DEFINES += -DNO_LIBDL
|
|
endif
|
|
|
|
XASH_SINGLE_BINARY := 1
|
|
endif
|
|
|
|
ifneq ($(XASH_STATIC),1)
|
|
LIBS += -ldl
|
|
endif
|
|
|
|
ifeq ($(XASH_STATIC_LIBDL),1)
|
|
LIBS += -ldl
|
|
endif
|
|
|
|
LIBS += -lm -pthread
|
|
|
|
|
|
ifeq ($(XASH_SINGLE_BINARY),1)
|
|
DEFINES += -DSINGLE_BINARY
|
|
endif
|
|
|
|
# Collect files
|
|
SRCS_CPP =
|
|
SRCS = $(wildcard server/*.c) $(wildcard client/vgui/*.c) $(wildcard client/avi/*.c) $(wildcard common/*.c) $(wildcard common/imagelib/*.c) $(wildcard common/soundlib/*.c) $(wildcard common/soundlib/libmpg/*.c)
|
|
ifneq ($(XASH_DEDICATED),1)
|
|
SRCS += $(wildcard client/*.c)
|
|
SRCS += $(wildcard platform/sdl/*.c)
|
|
ifeq ($(WES),1)
|
|
SRCS += $(wildcard gl-wes-v2/src/*.c)
|
|
endif
|
|
ifeq ($(NANOGL),1)
|
|
SRCS_CPP += $(wildcard nanogl/*.cpp)
|
|
endif
|
|
endif
|
|
OBJS = $(patsubst %.c,obj/%.o,$(SRCS))
|
|
OBJS_CPP = $(patsubst %.cpp,obj/%.o,$(SRCS_CPP))
|
|
|
|
#################################
|
|
# Windows DLL loader
|
|
# Should be enabled only on i386 builds
|
|
#################################
|
|
LOADER :=
|
|
ifeq ($(XASH_DLL_LOADER),1)
|
|
DEFINES += -DDLL_LOADER
|
|
ifeq ($(XASH_SINGLE_BINARY),1)
|
|
LOADER = libloader.a
|
|
else
|
|
LOADER = libloader.so
|
|
endif
|
|
DEPS += $(LOADER)
|
|
LIBS += $(LOADER)
|
|
endif
|
|
|
|
# Rules for binaries
|
|
ifeq ($(XASH_SINGLE_BINARY),0)
|
|
BINARIES = libxash.so
|
|
libxash.so : $(OBJS) $(OBJS_CPP) $(DEPS)
|
|
$(CC) -fvisibility=hidden -o libxash.so $(LDFLAGS) -shared $(OBJS) $(OBJS_CPP) $(LIBS)
|
|
|
|
else
|
|
BINARIES = xash
|
|
xash: $(OBJS) $(OBJS_CPP) $(DEPS)
|
|
ifeq ($(XASH_STATIC),1)
|
|
$(CC) -o xash -static $(LDFLAGS) $(OBJS) $(OBJS_CPP) $(LIBS)
|
|
else
|
|
$(CC) -o xash -fvisibility=hidden $(LDFLAGS) $(OBJS) $(OBJS_CPP) $(LIBS)
|
|
endif
|
|
|
|
endif
|
|
|
|
ifeq ($(XASH_DLL_LOADER),1)
|
|
$(LOADER):
|
|
$(MAKE) -f ../loader/Makefile.linux -C ../loader $(LOADER)
|
|
cp ../loader/$(LOADER) .
|
|
endif
|
|
|
|
# Create dirs for object files
|
|
DIRS := obj obj/server obj/client/avi obj/client/vgui obj/common/sdl obj/common/imagelib obj/common/soundlib/libmpg obj/platform/sdl obj/nanogl
|
|
$(OBJS): | $(DIRS)
|
|
|
|
$(DIRS) :
|
|
mkdir -p $(DIRS)
|
|
|
|
# Object rules
|
|
obj/%.o : %.c
|
|
$(CC) $(CFLAGS) $(INCLUDES) $(DEFINES) -c "$<" -o "$@" -Wno-unused-result -fvisibility=hidden
|
|
|
|
obj/%.o : %.cpp
|
|
$(CXX) $(CFLAGS) $(INCLUDES) $(DEFINES) -c "$<" -o "$@"
|
|
|
|
|
|
default: $(BINARIES)
|
|
|
|
.PHONY: depend clean list install
|
|
|
|
clean:
|
|
$(RM) $(OBJS) $(OBJS_CPP) $(BINARIES) ../loader/*.o ../loader/*.a ../loader/*.so $(LOADER)
|
|
|
|
list:
|
|
@echo Sources:
|
|
@echo $(SRCS)
|
|
@echo C++ Sources:
|
|
@echo $(SRCS_CPP)
|
|
@echo Objects:
|
|
@echo $(OBJS) $(OBJS_CPP)
|
|
@echo Dirs:
|
|
@echo $(DIRS)
|
|
@echo Dependencies:
|
|
@echo $(DEPS)
|
|
|
|
# Simple install rule
|
|
install: $(BINARIES)
|
|
mkdir -p $(INSTALL_DIR)
|
|
|
|
ifeq ($(XASH_SINGLE_BINARY),1)
|
|
cp xash $(INSTALL_DIR)/xash_bin
|
|
else
|
|
cp libxash.so $(INSTALL_DIR)/
|
|
cp libloader.so $(INSTALL_DIR)/
|
|
endif
|