diff --git a/contib/mittorn/Makefile.linux b/contib/mittorn/Makefile.linux new file mode 100644 index 00000000..6dc654f1 --- /dev/null +++ b/contib/mittorn/Makefile.linux @@ -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 diff --git a/contib/mittorn/README.md b/contib/mittorn/README.md new file mode 100644 index 00000000..289e3b11 --- /dev/null +++ b/contib/mittorn/README.md @@ -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:
+`mingw32-make -f \path\to\microndk\Microndk.mk` + +to build 64-bit library, use:
+`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 +``` diff --git a/contib/mittorn/setup.sh b/contib/mittorn/setup.sh new file mode 100755 index 00000000..828976b6 --- /dev/null +++ b/contib/mittorn/setup.sh @@ -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/ \ No newline at end of file diff --git a/contib/mittorn/wscript b/contib/mittorn/wscript new file mode 100644 index 00000000..457d2d2c --- /dev/null +++ b/contib/mittorn/wscript @@ -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'] + )