mittorn
7 years ago
4 changed files with 524 additions and 0 deletions
@ -0,0 +1,206 @@
@@ -0,0 +1,206 @@
|
||||
#############################################
|
||||
# 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 |
@ -0,0 +1,269 @@
@@ -0,0 +1,269 @@
|
||||
**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* |
||||
|
||||
- [Building](#building) |
||||
- [Manual build (without CMake)](#manual-build-without-cmake) |
||||
- [Building Engine](#building-engine) |
||||
- [Building launch binary](#building-launch-binary) |
||||
- [Building on Windows](#building-on-windows) |
||||
- [Visual Studio 2013 (recommended for Windows)](#visual-studio-2013-recommended-for-windows) |
||||
- [Visual Studio 6](#visual-studio-6) |
||||
- [MinGW](#mingw) |
||||
- [Building Game mods](#building-game-mods) |
||||
- [Linux](#linux) |
||||
- [microndk](#microndk) |
||||
- [Makefile.linux](#makefile-linux) |
||||
- [Windows](#windows) |
||||
- [Running](#running) |
||||
- [Manual running](#manual-running) |
||||
- [Running with GDB](#running-with-gdb) |
||||
- [Using DLL Loader](#using-dll-loader) |
||||
- [Running MinGW builds](#running-mingw-builds) |
||||
- [Running MinGW builds under GDB](#running-mingw-builds-under-gdb) |
||||
|
||||
# Building |
||||
|
||||
## Manual build (without CMake) |
||||
|
||||
### Building engine |
||||
|
||||
Clone Xash3D repository using git: |
||||
|
||||
git clone https://github.com/FWGS/xash3d |
||||
|
||||
Move to the Xash3D folder: |
||||
|
||||
cd xash3d/engine |
||||
|
||||
make -f Makefile.linux XASH_VGUI=1 |
||||
|
||||
or same for dedicated |
||||
|
||||
make -f Makefile.linux XASH_DEDICATED=1 |
||||
|
||||
To enable dll support on linux, build loader library: |
||||
|
||||
cd ../loader |
||||
make -f Makefile.linux libloader.so libloader.a |
||||
cp libloader.so libloader.a ../engine/ |
||||
|
||||
And built engine with XASH_DLL_LOADER=1: |
||||
|
||||
cd ../engine |
||||
make -f Makefile.linux XASH_VGUI=1 XASH_SDL=1 XASH_DLL_LOADER=1 |
||||
|
||||
or same for dedicated server |
||||
|
||||
cd ../engine |
||||
make -f Makefile.linux XASH_DEDICATED=1 XASH_DLL_LOADER=1 |
||||
|
||||
### Building engine in separate library |
||||
|
||||
Some old distros does not support hidden symbol visibility |
||||
This results in crash when loading server library |
||||
|
||||
Building launch binary |
||||
|
||||
cd (xash3d)/game_launch |
||||
gcc xash.c -o xash -ldl -lrt -lm |
||||
|
||||
Building engine library: |
||||
|
||||
make -f Makefile.linux XASH_SINGLE_BINARY=0 |
||||
|
||||
## Building on Windows |
||||
|
||||
### Visual Studio 2013 (recommended for Windows) |
||||
|
||||
Download latest prebuilt SDL2 from |
||||
|
||||
https://www.libsdl.org/release/SDL2-devel-2.0.4-VC.zip |
||||
|
||||
Unzip and rename `SDL2-2.0.4` folder to `SDL2` and put it next to xash3d project folder. |
||||
|
||||
..\xash3d\ |
||||
..\SDL2\ |
||||
|
||||
Open `xash.sln` with Visual Studio 2013 and make a build. After building, copy contents of `Debug` or |
||||
`Release` folder to directory you choose. Copy `valve` folder and `vgui.dll` from your Half Life game |
||||
installation folder and `SDL2.dll` form `\SDL2\lib\x86\` to it. |
||||
Move `vgui_support.dll` into `valve` folder. |
||||
|
||||
..\valve\ |
||||
..\valve\vgui_support.dll |
||||
..\menu.dll |
||||
..\SDL2.dll |
||||
..\vgui.dll |
||||
..\xash.dll |
||||
..\xash.exe |
||||
|
||||
Now you good to go, just run `xash.exe`. |
||||
|
||||
### Visual Studio 6 |
||||
|
||||
This is legacy configuration, but msvc6 seems to generate more stable and more effective code |
||||
|
||||
Setup your msvc6 enviroment, unpack SDL2-2.0.4 to xash3d folder and do: |
||||
|
||||
cd (xash3d)\engine |
||||
..\msvc6\build.bat |
||||
cd (xash3d)\game_launch |
||||
..\msvc6\build_launch.bat |
||||
|
||||
### MinGW |
||||
|
||||
The most effective configuration, but maybe unstable. |
||||
Setup your MinGW environment and run: |
||||
|
||||
cd (xash3d)\engine\ |
||||
CC=gcc mingw32-make -f Makefile.mingw |
||||
|
||||
engine will be built to single exe binary |
||||
|
||||
## Building game mods |
||||
|
||||
### Linux |
||||
|
||||
#### microndk |
||||
|
||||
All mods that ported to android may be build to linux using Android.mk with microndk: |
||||
|
||||
[https://github.com/SDLash3D/microndk] |
||||
|
||||
Clone microndk repo somewhere, change xash3d_config to preffered configuration (change arch to x86 |
||||
for example) |
||||
|
||||
Go to dlls folder if you are building server or cl_dlls if you are building client and do: |
||||
|
||||
make -f /path/to/microndk/microndk.mk -j4 |
||||
|
||||
Do: |
||||
|
||||
make -f /path/to/microndk/microndk.mk -j4 clean |
||||
|
||||
every time when you build client after building server |
||||
|
||||
#### Makefile.linux |
||||
|
||||
### Windows |
||||
|
||||
On windows common way is using Visual Studio as many mods does not correctly work with mingw. |
||||
|
||||
Just open project and build it. |
||||
|
||||
Other is using mingw and microndk, but it was not tested yet. |
||||
|
||||
hlsdk-xash3d based mods may work fine with mingw. |
||||
|
||||
You may use microndk to build it. Build process is very similar to linux one. |
||||
|
||||
After setting up MinGW enviroment, do:<br> |
||||
`mingw32-make -f \path\to\microndk\Microndk.mk` |
||||
|
||||
to build 64-bit library, use:<br> |
||||
`mingw32-make -f \path\to\microndk\Microndk.mk 64BIT=1` |
||||
|
||||
Edit xash3d_config.mk to set optimal CFLAGS if you are running server |
||||
|
||||
# Running |
||||
|
||||
Copy **valve** folder from Half-Life: |
||||
|
||||
cp -r $HOME/.steam/steam/steamapps/common/Half-Life/valve $HOME/Games/Xash3D |
||||
|
||||
**NOTE**: If you build with CMake, you can now use `make install`. It will install binaries where |
||||
they must be located. So just run `xash3d` from command line in directory where is gamedata is located. |
||||
For additional info look to the CMakeLists.txt in repo root and xash3d.sh script. |
||||
|
||||
After a successful build, copy the next files to some other directory where you want to run Xash3D: |
||||
|
||||
cp engine/libxash.so game_launch/xash3d mainui/libxashmenu.so $HOME/Games/Xash3D |
||||
|
||||
If you built it with XASH_VGUI, also copy vgui.so: |
||||
|
||||
cp ../hlsdk/linux/vgui.so vgui_support/libvgui_support.so $HOME/Games/Xash3D |
||||
|
||||
Copy script: |
||||
|
||||
cp ../xash3d.sh $HOME/Games/Xash3D |
||||
|
||||
Run: |
||||
|
||||
cd $HOME/Games/Xash3D |
||||
./xash3d.sh |
||||
|
||||
## Manual running |
||||
|
||||
Put xash3d binaries and vgui(optionally) to you game data directory and run: |
||||
|
||||
LD_LIBRARY_PATH=. ./xash -dev 5 |
||||
|
||||
## Running under GDB |
||||
|
||||
LD_LIBRARY_PATH=. gdb --args ./xash -dev 5 |
||||
|
||||
## Using DLL Loader |
||||
|
||||
Put vgui_support.dll from windows build to your game data folder and run: |
||||
|
||||
LD_LIBRARY_PATH=. ./xash -dev 5 -vguilib vgui.dll -clientlib valve/cl_dlls/client.dll -dll dlls/hl.dll |
||||
|
||||
## Running MinGW builds |
||||
|
||||
Put exe file to your game data directory |
||||
|
||||
cd (game)\ |
||||
xash_bin -dev 5 |
||||
|
||||
### Running MinGW builds under GDB |
||||
|
||||
gdb --args ./xash_bin.exe -dev 5 |
||||
|
||||
# Useful GDB commands |
||||
|
||||
Start or restart process: |
||||
|
||||
(gdb) r |
||||
|
||||
Show backtrace: |
||||
|
||||
(gdb) bt |
||||
|
||||
Full backtrace: |
||||
|
||||
(gdb) bt full |
||||
|
||||
Continue execution: |
||||
|
||||
(gdb) c |
||||
|
||||
Recover from segmentation fault: |
||||
|
||||
Skipping function: |
||||
|
||||
(gdb) handle SIGSEGV nopass |
||||
(gdb) ret |
||||
(gdb) c |
||||
|
||||
Restart frame for beginning: |
||||
|
||||
(gdb) handle SIGSEGV nopass |
||||
(gdb) jump *Host_AbortCurrentFrame |
||||
Anti-Crash script (useful for scripting servers): |
||||
``` |
||||
cd /path/to/rootdir |
||||
file xash |
||||
set args xash -dev 5 -nowcon |
||||
handle SIGSEGV nopass |
||||
catch signal SIGSEGV |
||||
set $crashes=0 |
||||
commands |
||||
print $crashes++ |
||||
if $crashes > 500 |
||||
set $crashes=0 |
||||
run |
||||
else |
||||
jump *Host_AbortCurrentFrame |
||||
end |
||||
end |
||||
run |
||||
``` |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh |
||||
SCRIPTDIR=$(dirname "$0") |
||||
TOPDIR=$SCRIPTDIR/../../ |
||||
cp $SCRIPTDIR/Makefile.dllloader $TOPDIR/loader/ |
||||
cp $SCRIPTDIR/Makefile.emscripten $TOPDIR/engine/ |
||||
cp $SCRIPTDIR/Makefile.linux $TOPDIR/engine/ |
||||
cp $SCRIPTDIR/wscript $TOPDIR/engine/ |
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
#! /usr/bin/env python |
||||
# encoding: utf-8 |
||||
# mittorn, 2018 |
||||
|
||||
VERSION='0.99' |
||||
APPNAME='xash3d-fwgs' |
||||
|
||||
top = '.' |
||||
|
||||
def options(opt): |
||||
opt.load('compiler_c') |
||||
# opt.load('msvs') |
||||
|
||||
def configure(conf): |
||||
conf.load('compiler_c') |
||||
conf.env.append_unique('CFLAGS', '-O2') |
||||
conf.env.append_unique('DEFINES', 'XASH_SDL') |
||||
conf.env.append_unique('DEFINES', 'SINGLE_BINARY') |
||||
conf.env.append_value('LINKFLAGS', '-ldl') |
||||
conf.env.append_value('LINKFLAGS', '-lm') |
||||
conf.env.append_value('LINKFLAGS', '-pthread') |
||||
conf.env.append_value('LINKFLAGS', '-m32') |
||||
conf.env.append_value('CFLAGS', '-m32') |
||||
conf.check_cfg(path='sdl2-config', args='--cflags --libs', package='', uselib_store='SDL2') |
||||
|
||||
def build(bld): |
||||
bld( |
||||
target = 'xash', |
||||
features = 'c cprogram', |
||||
includes = ['../common', '../pm_shared', 'common', 'server', 'client', 'client/vgui', '.' ], |
||||
source = bld.path.ant_glob([ |
||||
'common/*.c', |
||||
'common/imagelib/*.c', |
||||
'common/soundlib/*.c', |
||||
'common/soundlib/libmpg/*.c', |
||||
'client/*.c', |
||||
'client/vgui/*.c', |
||||
'client/avi/*.c', |
||||
'server/*.c', |
||||
'platform/sdl/*.c']), |
||||
use = ['SDL2', 'm', 'pthread'] |
||||
) |
Loading…
Reference in new issue