Go to file
Alibek Omarov a699702c00 wscript: strip lib prefix for HLSDK 2019-05-06 04:14:48 +03:00
cl_dll wscript: strip lib prefix for HLSDK 2019-05-06 04:14:48 +03:00
cmake Force XP toolchain in newer Visual Studio 2018-03-04 00:12:44 +03:00
common Do not reorganize variables in classes. Add missing #pragma once directives and more #include guards. 2017-12-11 02:44:30 +05:00
dlls wscript: strip lib prefix for HLSDK 2019-05-06 04:14:48 +03:00
engine Update mobility interface 2018-04-02 23:57:09 +03:00
game_shared Revert some changes from PR 2016-08-08 15:01:16 +06:00
pm_shared Some fixes for PM_InitTextureTypes() from ReGameDLL_CS 2018-04-07 04:22:15 +03:00
scripts/waflib waflib: xcompile: even if hardfloat ABI is selected, force architecture name as armeabi-v7a, as armeabi-v7a-hard is completely virtual. 2019-05-06 04:14:48 +03:00
utils Add custom makefont from #46 2018-01-20 17:04:06 +03:00
.gitignore waf: initial deploy 2019-05-03 19:19:39 +03:00
.travis.yml Fix addressing variables in travis 2018-04-04 17:31:26 +03:00
Android.mk Improve client 2016-03-01 20:18:42 +00:00
CMakeLists.txt cmake: remove useless second definition of 64BIT option 2018-12-19 13:39:22 +03:00
README.md Add mingw support to CMakeLists.txt. Add crosscompiling instructions to README.md 2018-04-03 21:39:07 +03:00
appveyor.yml Add appveyor 2018-03-04 00:13:52 +03:00
gnu.txt CRLF to LF for license. 2016-08-03 03:00:40 +05:00
waf waf: initial deploy 2019-05-03 19:19:39 +03:00
wscript wscript: strip lib prefix for HLSDK 2019-05-06 04:14:48 +03:00

README.md

Half-Life SDK for Xash3D Build Status Windows Build Status

Half-Life SDK for Xash3D & GoldSource with some fixes.

How to build

CMake as most universal way

mkdir build && cd build
cmake ../
make

Crosscompiling using mingw:

mkdir build-mingw && cd build-mingw
TOOLCHAIN_PREFIX=i686-w64-mingw32 # check up the actual mingw prefix of your mingw installation
cmake ../ -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER="$TOOLCHAIN_PREFIX-gcc" -DCMAKE_CXX_COMPILER="$TOOLCHAIN_PREFIX-g++"

You may enable or disable some build options by -Dkey=value. All available build options are defined in CMakeLists.txt at root directory. See below if you want to build the GoldSource compatible libraries.

See below, if CMake is not suitable for you:

Windows

Using msvc

We use compilers provided with Microsoft Visual Studio 6. There're compile.bat scripts in both cl_dll and dlls directories. Before running any of those files you must define MSVCDir variable which is the path to your msvc installation.

set MSVCDir=C:\Program Files\Microsoft Visual Studio
compile.bat

These scripts also can be ran via wine:

MSVCDir="z:\home\$USER\.wine\drive_c\Program Files\Microsoft Visual Studio" wine cmd /c compile.bat

The libraries built this way are always GoldSource compatible.

There're dsp projects for Visual Studio 6 in cl_dll and dlls directories, but we don't keep them up-to-date. You're free to adapt them for yourself and try to import into the newer Visual Studio versions.

Using mingw

TODO

Linux

(cd dlls && make)
(cd cl_dll && make)

OS X

Nothing here.

FreeBSD

(cd dlls && gmake CXX=clang++ CC=clang)
(cd cl_dll && gmake CXX=clang++ CC=clang)

Android

Just typical ndk-build. TODO: describe what it is.

Building GoldSource-compatible libraries

To enable building the goldsource compatible client library add GOLDSOURCE_SUPPORT flag when calling cmake:

cmake .. -DGOLDSOURCE_SUPPORT=ON

or when using make without cmake:

make GOLDSOURCE_SUPPORT=1

Unlike original client by Valve the resulting client library will not depend on vgui or SDL2 just like the one that's used in FWGS Xash3d.

Note for Windows: it's not possible to create GoldSource compatible libraries using mingw, only msvc builds will work.

Note for Linux: GoldSource requires libraries (both client and server) to be compiled with libstdc++ bundled with g++ of major version 4 (versions from 4.6 to 4.9 should work). If your Linux distribution does not provide compatible g++ version you have several options.

Method 1: Statically build with c++ library

This one is the most simple but has a drawback.

cmake ../ -DGOLDSOURCE_SUPPORT=ON -DCMAKE_C_FLAGS="-static-libstdc++ -static-libgcc"

The drawback is that the compiled libraries will be larger in size.

Method 2: Build in Steam Runtime chroot

This is the official way to build Steam compatible games for Linux.

Clone https://github.com/ValveSoftware/steam-runtime and follow instructions https://github.com/ValveSoftware/steam-runtime#building-in-the-runtime

sudo ./setup_chroot.sh --i386

Then use cmake and make as usual, but prepend the commands with schroot --chroot steamrt_scout_i386 --:

mkdir build-in-steamrt && cd build-in-steamrt
schroot --chroot steamrt_scout_i386 -- cmake ../ -DGOLDSOURCE_SUPPORT=ON
schroot --chroot steamrt_scout_i386 -- make

Method 3: Create your own chroot with older distro that includes g++ 4.

Use the most suitable way for you to create an old distro 32-bit chroot. E.g. on Debian (and similar) you can use debootstrap.

sudo debootstrap --arch=i386 jessie /var/chroot/jessie-debian-i386 # On Ubuntu type trusty instead of jessie
sudo chroot /var/chroot/jessie-debian-i386

Inside chroot install cmake, make, g++ and libsdl2-dev. Then exit the chroot.

On the host system install schroot. Then create and adapt the following config in /etc/schroot/chroot.d/jessie.conf (you can choose a different name):

[jessie]
type=directory
description=Debian jessie i386
directory=/var/chroot/debian-jessie-i386/
users=yourusername
groups=yourusername
root-groups=root
preserve-environment=true
personality=linux32

Insert your actual user name in place of yourusername. Then prepend any make or cmake call with schroot -c jessie --:

mkdir build-in-chroot && cd build-in-chroot
schroot --chroot jessie -- cmake ../ -DGOLDSOURCE_SUPPORT=ON
schroot --chroot jessie -- make

Method 4: Install the needed g++ version yourself

TODO: describe steps.

Configuring Qt Creator to use toolchain from chroot

Create a file with the following contents anywhere:

#!/bin/sh
schroot --chroot steamrt_scout_i386 -- cmake "$@"

Make it executable. In Qt Creator go to Tools -> Options -> Build & Run -> CMake. Add a new cmake tool and specify the path of previously created file. Go to Kits tab, clone your default configuration and choose your CMake tool there. Choose the new kit when opening CMakeLists.txt.