Difference between revisions of "Compile ECWolf on Linux"

From ECWolf Wiki
m (→‎Compiling: Added CMAKE_BUILD_TYPE=Release since not specifying builds unoptimized (or something like that).)
(37 intermediate revisions by 3 users not shown)
Line 1: Line 1:
This guide will demonstrate how to compile the Mercurial version of ECWolf on Linux.
+
This guide will demonstrate how to compile the Git version of ECWolf on Linux.
 
 
== Dependencies ==
 
  
 +
== Install dependencies ==
 
The following programs/libraries are used by ECWolf.  The versions listed below are known to work, however other versions may work.
 
The following programs/libraries are used by ECWolf.  The versions listed below are known to work, however other versions may work.
* [http://cmake.org/ CMake] 2.6
 
 
* [http://gcc.gnu.org/ GCC] 4.4.1
 
* [http://gcc.gnu.org/ GCC] 4.4.1
 
* [http://www.gnu.org/software/make/ make]
 
* [http://www.gnu.org/software/make/ make]
* [http://www.libsdl.org/ libsdl] 1.2
+
* [http://cmake.org/ CMake] 2.6
* [http://www.libsdl.org/projects/SDL_mixer/ SDL_mixer] 1.2.11
+
* [http://www.libsdl.org/ libsdl] 2.x
 +
* [http://www.libsdl.org/projects/SDL_mixer/ SDL_mixer] 2.x
 +
* [https://www.libsdl.org/projects/SDL_net/ SDL_net] 2.x
 
In addition to the above, the following are optional dependencies.
 
In addition to the above, the following are optional dependencies.
 
* [http://www.zlib.net/ zlib] 1.2.3
 
* [http://www.zlib.net/ zlib] 1.2.3
Line 14: Line 14:
 
* [http://www.ijg.org/ libjpeg] >= 6b
 
* [http://www.ijg.org/ libjpeg] >= 6b
 
* [http://www.gtk.org/ GTK2]
 
* [http://www.gtk.org/ GTK2]
 +
* [http://www.libsdl.org/ libsdl] 1.2
 +
* [http://maniacsvault.net/ecwolf/files/tools/dev/ SDL_mixer for ECWolf] (Standard [http://www.libsdl.org/projects/SDL_mixer/release-1.2.html SDL_mixer] 1.2 will also work, but features will be disabled.)
 +
* [https://www.libsdl.org/projects/SDL_net/release-1.2.html SDL_net] 1.2
  
[http://tortoisehg.bitbucket.org/ Mercurial] is also needed to checkout a copy of the latest source.
+
[http://tortoisehg.bitbucket.org/ Git] is also needed to checkout a copy of the latest source.
  
Install the following dependencies as superuser:
+
Install the following as root/superuser:
  
=== Debian & Ubuntu ===
+
=== Debian/Ubuntu ===
 
<pre>
 
<pre>
sudo apt-get install cmake g++ libsdl1.2-dev libsdl-mixer1.2-dev \
+
sudo apt-get install g++ make cmake libsdl2-dev libsdl2-mixer-dev libsdl2-net-dev \
zlib1g-dev libbz2-dev mercurial make libjpeg-dev libgtk2.0-dev
+
git zlib1g-dev libbz2-dev libjpeg-dev libgtk2.0-dev libsdl1.2-dev libsdl-mixer1.2-dev \
 +
libsdl-net1.2-dev
 
</pre>
 
</pre>
  
 
=== Fedora ===
 
=== Fedora ===
 
<pre>
 
<pre>
yum install cmake gcc-c++ SDL-devel SDL_mixer-devel zlib-devel \
+
dnf install gcc-c++ make cmake SDL2-devel SDL2_mixer-devel SDL2_net-devel git \
bzip2-devel mercurial make libjpeg-turbo-devel gtk2-devel
+
zlib-devel bzip2-devel libjpeg-turbo-devel gtk2-devel SDL-devel SDL_mixer-devel \
 +
SDL_net-devel
 
</pre>
 
</pre>
  
=== OpenSUSE ===
+
=== openSUSE ===
 
<pre>
 
<pre>
zypper install cmake gcc-c++ libSDL-devel libSDL_mixer-devel \
+
zypper install gcc-c++ make cmake libSDL2-devel libSDL2_mixer-devel libSDL2_net-devel \
zlib-devel libbz2-devel mercurial make libjpeg-devel gtk2-devel
+
git zlib-devel libbz2-devel libjpeg-devel gtk2-devel libSDL-devel libSDL_mixer-devel \
 +
libSDL_net-devel
 
</pre>
 
</pre>
  
 
=== Mageia ===
 
=== Mageia ===
 
<pre>
 
<pre>
if [ "$(uname -m)" = "x86_64" ]; then
+
a='' && [ "$(uname -m)" = x86_64 ] && a=64
whatsurhw="64"
+
urpmi gcc-c++ make cmake lib${a}sdl2.0-devel lib{a}sdl2_mixer-devel \
else
+
lib{a}sdl2_net-devel git lib${a}zlib-devel lib${a}bzip2-devel \
whatsurhw=""
+
lib${a}jpeg-devel lib${a}gtk+2.0-devel lib${a}cairo-devel lib${a}SDL-devel \
fi && \
+
lib${a}SDL_mixer-devel lib${a}SDL_net-devel
urpmi cmake gcc-c++ lib"$whatsurhw"SDL-devel lib"$whatsurhw"SDL_mixer-devel \
 
lib"$whatsurhw"zlib-devel lib"$whatsurhw"bzip2-devel mercurial make \
 
lib"$whatsurhw"jpeg-devel lib"$whatsurhw"gtk+2.0-devel lib"$whatsurhw"cairo-devel
 
 
</pre>
 
</pre>
  
 
=== Arch Linux ===
 
=== Arch Linux ===
 
<pre>
 
<pre>
pacman -S --needed cmake gcc sdl sdl_mixer zlib bzip2 mercurial make libjpeg-turbo gtk2
+
pacman -S --needed gcc make cmake sdl2 sdl2_mixer sdl2_net git \
 +
zlib bzip2 libjpeg-turbo gtk2 sdl sdl_mixer sdl_net
 
</pre>
 
</pre>
  
 
=== Gentoo ===
 
=== Gentoo ===
 
<pre>
 
<pre>
emerge -avn dev-util/cmake sys-devel/gcc media-libs/libsdl media-libs/sdl-mixer \
+
emerge -avn sys-devel/gcc sys-devel/make dev-util/cmake media-libs/libsdl2 \
sys-libs/zlib app-arch/bzip2 dev-vcs/mercurial sys-devel/make media-libs/libjpeg-turbo \
+
media-libs/sdl2-mixer media-libs/sdl2-net dev-vcs/git sys-libs/zlib \
x11-libs/gtk+
+
app-arch/bzip2 media-libs/libjpeg-turbo x11-libs/gtk+ media-libs/libsdl \
 +
media-libs/sdl-mixer media-libs/sdl-net
 
</pre>
 
</pre>
  
 
=== PCLinuxOS ===
 
=== PCLinuxOS ===
 
<pre>
 
<pre>
if [ "$(uname -m)" = "x86_64" ]; then
+
a='' && [ "$(uname -m)" = x86_64 ] && a=64
whatsurhw="64"
+
apt-get install gcc-c++ make cmake lib${a}sdl2.0-devel lib{a}sdl2_mixer-devel \
else
+
lib{a}sdl2_net-devel git zlib1-devel lib${a}bzip2-devel lib${a}jpeg62-devel \
whatsurhw=""
+
lib${a}gtk+2.0_0-devel lib${a}SDL-devel lib${a}SDL_mixer-devel lib${a}SDL_net-devel
fi && \
 
apt-get install cmake gcc-c++ lib"$whatsurhw"SDL-devel lib"$whatsurhw"SDL_mixer1.2-devel \
 
zlib1-devel lib"$whatsurhw"bzip2-devel mercurial make lib"$whatsurhw"jpeg62-devel \
 
lib"$whatsurhw"gtk+2.0_0-devel
 
 
</pre>
 
</pre>
  
'''Do the following steps as normal user.'''
+
=== Solus ===
 
 
== Make ecwolf_build directory ==
 
 
<pre>
 
<pre>
mkdir -pv $HOME/ecwolf_build
+
sudo eopkg install g++ make cmake binutils glibc-devel pkg-config \
 +
sdl2-devel sdl2-mixer-devel sdl2-net-devel git zlib-devel \
 +
bzip2-devel libjpeg-turbo-devel libgtk-2-devel sdl1-devel \
 +
sdl1-mixer-devel sdl1-net-devel
 
</pre>
 
</pre>
  
== Retrieving the Source ==
+
'''Do the following sections as normal user.'''
Use Mercurial to retrieve the latest version of the source.
+
 
  cd $HOME/ecwolf_build
+
== Create ecwolf_build directory ==
  hg clone [https://bitbucket.org/Blzut3/ecwolf https://bitbucket.org/Blzut3/ecwolf]
+
mkdir -pv ~/ecwolf_build
 +
 
 +
== Download and prepare the source ==
 +
Use Git to download the ECWolf source:
 +
  cd ~/ecwolf_build
 +
  git clone [https://bitbucket.org/ecwolf/ecwolf https://bitbucket.org/ecwolf/ecwolf.git]
 +
and create an out of tree build directory in the newly created ecwolf directory:
 +
mkdir -pv ecwolf/build
  
 
== Compiling ==
 
== Compiling ==
It is recommended that you create a build directory in the newly created ecwolf directory.
+
Inside the build directory, run CMake to generate a Makefile:
  cd ecwolf
+
  cd ~/ecwolf_build/ecwolf/build
mkdir build
+
  cmake .. -DCMAKE_BUILD_TYPE=Release -DGPL=ON
  cd build
+
Assuming there were no errors, you should be able to run make to compile:
Run CMake to generate a Makefile.  Assuming there were no errors, you should be able to run make to compile.
 
cmake -DCMAKE_BUILD_TYPE=Release -DGPL=ON ..
 
 
  make
 
  make
An ecwolf binary should be produced.
+
A development version of ECWolf will be compiled if you do not do [[#Latest stable version]].
 +
 
 +
An ecwolf binary should be produced. To start ECWolf, the following command should work:
 
  ./ecwolf
 
  ./ecwolf
 +
If ECWolf complains you do not have any base game data set up, make sure that you have your [[Game data]] files placed in the same directory as ECWolf, in ~/.config/ecwolf or $PROGDIR. Alternatively, you can edit ~/.config/ecwolf/ecwolf.cfg to add the path for your game data to BaseDataPaths.
  
== Backup ECWolf ==
+
=== Latest stable version ===
 +
Show the latest stable version:
 +
cd ~/ecwolf_build/ecwolf &&
 +
git tag -l | tail -1
  
Follow this step if you want or manually copy (backup) ecwolf and ecwolf.pk3.
+
If you want to compile the latest stable version, run:
 +
cd ~/ecwolf_build/ecwolf &&
 +
git checkout --detach refs/tags/$(git tag -l | tail -1)
 +
and [[#Compiling|compile]].
  
Make and name a directory with the corresponding ECWolf version/revision and copy ecwolf and ecwolf.pk3 to it:
+
After compiling, [[#Backup|backing up]] and optionally [[#Installation|installing]] the latest stable version, run:
<pre>
+
cd ~/ecwolf_build/ecwolf &&
cd $HOME/ecwolf_build && \
+
git checkout master
BACKUPECWOLF="$(sed -n 's/.*#define DOTVERSIONSTR_NOREV "\(.*\)".*/\1/p' \
 
$HOME/ecwolf_build/ecwolf/src/version.h)\
 
-r$(sed -n 's/.*#define SVN_REVISION_STRING "\(.*\)".*/\1/p' \
 
$HOME/ecwolf_build/ecwolf/src/svnrevision.h)" && \
 
mkdir -pv "$BACKUPECWOLF" && \
 
cp -v ecwolf/build/{ecwolf,ecwolf.pk3} "$BACKUPECWOLF"
 
</pre>
 
  
=== Backup ECWolf (Optional) ===
+
== Backup ==
 +
If you want to backup ECWolf, do the following:
  
Make and name a directory with the current year, month, day, hour and minute and copy ecwolf and ecwolf.pk3 to it:
+
Create and name a directory with the corresponding ECWolf version/revision, build type and copy ecwolf and ecwolf.pk3 to it:
 
<pre>
 
<pre>
cd $HOME/ecwolf_build && \
+
cd ~/ecwolf_build/ecwolf/build &&
BACKUPECW="$(date +%Y%m%d%H%M)" && \
+
if [ -f CMakeCache.txt ]; then
mkdir -pv "$BACKUPECW" && \
+
k="$(sed -n 's/.*CMAKE_BUILD_TYPE:STRING=\(.*\)/\1/p' CMakeCache.txt)"; else k=''; fi &&
cp -v ecwolf/build/{ecwolf,ecwolf.pk3} "$BACKUPECW"
+
if [ -n "$k" ]; then b="-BuildType$k"; else b=''; fi &&
 +
BACKUPECWOLF="../../$(sed -n 's/.*#define GIT_DESCRIPTION "\(.*\)".*/\1/p' src/gitinfo.h)$b" &&
 +
mkdir -pv "$BACKUPECWOLF" &&
 +
cp -v ecwolf ecwolf.pk3 "$BACKUPECWOLF"/
 
</pre>
 
</pre>
  
If you did "Backup ECWolf" or "(Optional)", the previous files should be located at:
+
Files are located at:
: '''/home/<your username>/ecwolf_build/'''
 
  
== Update ECWolf ==
+
/home/<your username>/ecwolf_build/<your newly created directory>
  
 +
== Updating ==
 
When you wish to update ECWolf, copy and paste the following:
 
When you wish to update ECWolf, copy and paste the following:
<pre>
+
cd ~/ecwolf_build/ecwolf &&
cd $HOME/ecwolf_build/ecwolf/build && \
+
git pull
make clean ; \
 
cd .. && hg pull ; \
 
hg update && \
 
cd build && \
 
cmake -DGPL=ON .. && \
 
make
 
</pre>
 
  
When the update and compiling finish, go to [[#Backup ECWolf|Backup ECWolf]].
+
When the update finish, go to [[#Compiling]].
  
== Install ECWolf ==
+
== Installation ==
 +
* '''ecwolf''' = Stable version
 +
* '''ecwolf-alpha''' = Development version
  
'''The following steps contain commands that require to be run as superuser with the sudo command.'''
+
Commands beginning with "sudo" will require temporary superuser privileges.
  
 
If you want to install ECWolf, do the following:
 
If you want to install ECWolf, do the following:
  
Make /usr/games/ecwolf directory:
+
Create /usr/games/ecwolf and /usr/games/ecwolf-alpha directories:
 +
sudo mkdir -pv /usr/games/ecwolf /usr/games/ecwolf-alpha
 +
 
 +
Copy ecwolf and ecwolf.pk3 to /usr/games/ecwolf/ or /usr/games/ecwolf-alpha/:
 
<pre>
 
<pre>
sudo mkdir -pv /usr/games/ecwolf
+
cd ~/ecwolf_build/ecwolf/build &&
 +
h="$(sed -n 's/.*#define GIT_HASH "\(.*\)".*/\1/p' src/gitinfo.h)" &&
 +
if [ -z "$(git describe --exact-match --tags $h 2>/dev/null)" ]; then
 +
d=-alpha; else d=''; fi &&
 +
sudo cp -v ecwolf ecwolf.pk3 /usr/games/ecwolf$d/
 
</pre>
 
</pre>
  
Copy ecwolf and ecwolf.pk3 to /usr/games/ecwolf:
+
Create launch script:
 
<pre>
 
<pre>
sudo cp -v /home/$USER/ecwolf_build/ecwolf/build/{ecwolf,ecwolf.pk3} /usr/games/ecwolf
+
cd ~/ecwolf_build/ecwolf/build &&
 +
h="$(sed -n 's/.*#define GIT_HASH "\(.*\)".*/\1/p' src/gitinfo.h)" &&
 +
if [ -z "$(git describe --exact-match --tags $h 2>/dev/null)" ]; then
 +
d=-alpha; else d=''; fi &&
 +
printf %s "\
 +
#! /bin/sh
 +
exec /usr/games/ecwolf$d/ecwolf \"\$@\"
 +
" > ecwolf$d.sh &&
 +
chmod 755 ecwolf$d.sh &&
 +
sudo mv -v ecwolf$d.sh /usr/bin/ecwolf$d
 
</pre>
 
</pre>
  
Make ecwolf script, add executable permission and copy it to /usr/bin:
+
Now from a terminal you should be able to run '''ecwolf''' or '''ecwolf-alpha''' from any user account.
<pre>
+
 
cd /tmp && \
+
=== Uninstallation ===
touch ecwolf && \
+
Remove /usr/games/ecwolf directory and all its files:
echo '#!/bin/bash' >> ecwolf && \
+
sudo rm -rfv /usr/games/ecwolf
echo '/usr/games/ecwolf/ecwolf $*' >> ecwolf && \
+
 
echo 'exit $?' >> ecwolf && \
+
Remove ecwolf script:
chmod 755 ecwolf && \
+
sudo rm -fv /usr/bin/ecwolf
sudo cp -v ecwolf /usr/bin && \
+
 
rm -fv ecwolf
+
Remove /usr/games/ecwolf-alpha directory and all its files:
</pre>
+
sudo rm -rfv /usr/games/ecwolf-alpha
  
Now from a terminal you should be able to execute '''ecwolf''' from any user account.
+
Remove ecwolf-alpha script:
 +
sudo rm -fv /usr/bin/ecwolf-alpha
  
=== Remove ECWolf ===
+
== Developing ==
 +
This page has helped you compile ECWolf, but perhaps you are interested in debugging the code or submitting code changes or fixes for inclusion. This section is intended for more advanced users who may be unfamiliar to CMake or debugging on Linux systems.
  
To remove the previous installation steps:
+
=== Debugging ===
 +
'''Prerequisite:'''
  
Remove /usr/games/ecwolf directory and all its files:
+
* [http://www.gnu.org/software/gdb/ gdb]
<pre>
 
cd /usr/games && \
 
sudo rm -rfv ecwolf
 
</pre>
 
  
Remove ecwolf script:
+
Maybe you have found a way to make ECWolf crash, and are interested in debugging it. First, you need to compile a debug build of ECWolf. Inside the build directory, invoke CMake to set up for compiling, but this time, the build type is set to Debug:
<pre>
+
cd ~/ecwolf_build/ecwolf/build
cd /usr/bin && \
+
cmake .. -DCMAKE_BUILD_TYPE=Debug
sudo rm -fv ecwolf
+
Optionally, you may want to use some of the [[#Build options]].
</pre>
 
  
== Debugging ==
+
After CMake is done, run "make" or to speed up compilation, run "make -j<number>", a recommended value for the "-j" option is the number of physical cores:
In most cases it is good idea to generate a back trace when ECWolf crashes.  To make a debug build of ecwolf simply replace the cmake command with the following.
 
cmake -DCMAKE_BUILD_TYPE=Debug
 
 
  make
 
  make
You should now be able to use gdb to generate a back trace.
+
 
 +
To run ECWolf under a debugger such as gdb, use the following command:
 
  gdb ecwolf
 
  gdb ecwolf
GDB has it's own command prompt. Use "run" to start ecwolf and use "bt" to get the back trace after a crash.
+
 
 +
Now gdb should have you in its own command prompt:
 +
  (gdb)
 +
 
 +
You probably want to log the output, so lets output to a file ecwolfdebug.log:
 +
(gdb) set logging on ecwolfdebug.log
 +
 
 +
Now start ECWolf by typing in run, and pressing enter:
 
  (gdb) run
 
  (gdb) run
  (gdb) bt
+
 
 +
Or put any command line parameters to ecwolf after run:
 +
  (gdb) run <command line parameters>
 +
To see the available command line parameters for ECWolf, type "run --help" and press enter.
 +
 
 +
If ECWolf crashes, gdb may be able to tell you the source file and line number it crashed in. Typing in the command backtrace or bt will produce information telling the last function calls, showing how execution got to the point where it crashed:
 +
(gdb) backtrace
 +
All output will be copied into the ecwolfdebug.log, which can then be scrutinized later, or perhaps posted to the [https://bitbucket.org/ecwolf/ecwolf/issues Bug Tracker] for other developers to look at.
 +
 
 +
To exit gdb's command prompt, type quit, q or press Ctrl-D:
 +
(gdb) quit
 +
If you want to free up space, run "make clean" to remove the files generated by the compilation.
 +
 
 +
=== Build options ===
 +
{|class="wikitable" width="100%"
 +
|+ <span style="text-decoration: underline">CMake options</span>
 +
|-
 +
!width="15%"|Options!!width="45%"|Description!!width="40%"|Example
 +
|-
 +
|GPL=ON||Switch ECWolf's default original non-commercial license to GNU GPL. OPL emulator is changed from MAME's to the one from Dosbox.||cmake .. -DGPL=ON
 +
|-
 +
|USE_LIBTEXTSCREEN=ON||Use libtextscreen IWAD picker. Only available in the GPL edition.||cmake .. -DGPL=ON -DUSE_LIBTEXTSCREEN=ON
 +
|-
 +
|NO_GTK=ON||Disable GTK+ IWAD picker.||cmake .. -DNO_GTK=ON
 +
|}
 +
 
 +
{|class="wikitable" width="100%"
 +
|+ <span style="text-decoration: underline">CMake build types</span>
 +
|-
 +
!width="10%"|Types!!width="45%"|Description!!width="45%"|Example
 +
|-
 +
|Debug||Debug information, -O1 optimization.||cmake .. -DCMAKE_BUILD_TYPE=Debug
 +
|-
 +
|Release||No debug information, -O3 optimization.||cmake .. -DCMAKE_BUILD_TYPE=Release
 +
|-
 +
|RelWithDebInfo||Debug information, -O2 optimization. Useful for finding optimization bugs that only show up in Release.||cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
 +
|-
 +
|MinSizeRel||Similar to Release but with less optimizations in order to save space.||cmake .. -DCMAKE_BUILD_TYPE=MinSizeRel
 +
|}

Revision as of 21:31, 15 September 2019

This guide will demonstrate how to compile the Git version of ECWolf on Linux.

Install dependencies

The following programs/libraries are used by ECWolf. The versions listed below are known to work, however other versions may work.

In addition to the above, the following are optional dependencies.

Git is also needed to checkout a copy of the latest source.

Install the following as root/superuser:

Debian/Ubuntu

sudo apt-get install g++ make cmake libsdl2-dev libsdl2-mixer-dev libsdl2-net-dev \
git zlib1g-dev libbz2-dev libjpeg-dev libgtk2.0-dev libsdl1.2-dev libsdl-mixer1.2-dev \
libsdl-net1.2-dev

Fedora

dnf install gcc-c++ make cmake SDL2-devel SDL2_mixer-devel SDL2_net-devel git \
zlib-devel bzip2-devel libjpeg-turbo-devel gtk2-devel SDL-devel SDL_mixer-devel \
SDL_net-devel

openSUSE

zypper install gcc-c++ make cmake libSDL2-devel libSDL2_mixer-devel libSDL2_net-devel \
git zlib-devel libbz2-devel libjpeg-devel gtk2-devel libSDL-devel libSDL_mixer-devel \
libSDL_net-devel

Mageia

a='' && [ "$(uname -m)" = x86_64 ] && a=64
urpmi gcc-c++ make cmake lib${a}sdl2.0-devel lib{a}sdl2_mixer-devel \
lib{a}sdl2_net-devel git lib${a}zlib-devel lib${a}bzip2-devel \
lib${a}jpeg-devel lib${a}gtk+2.0-devel lib${a}cairo-devel lib${a}SDL-devel \
lib${a}SDL_mixer-devel lib${a}SDL_net-devel

Arch Linux

pacman -S --needed gcc make cmake sdl2 sdl2_mixer sdl2_net git \
zlib bzip2 libjpeg-turbo gtk2 sdl sdl_mixer sdl_net

Gentoo

emerge -avn sys-devel/gcc sys-devel/make dev-util/cmake media-libs/libsdl2 \
media-libs/sdl2-mixer media-libs/sdl2-net dev-vcs/git sys-libs/zlib \
app-arch/bzip2 media-libs/libjpeg-turbo x11-libs/gtk+ media-libs/libsdl \
media-libs/sdl-mixer media-libs/sdl-net

PCLinuxOS

a='' && [ "$(uname -m)" = x86_64 ] && a=64
apt-get install gcc-c++ make cmake lib${a}sdl2.0-devel lib{a}sdl2_mixer-devel \
lib{a}sdl2_net-devel git zlib1-devel lib${a}bzip2-devel lib${a}jpeg62-devel \
lib${a}gtk+2.0_0-devel lib${a}SDL-devel lib${a}SDL_mixer-devel lib${a}SDL_net-devel

Solus

sudo eopkg install g++ make cmake binutils glibc-devel pkg-config \
sdl2-devel sdl2-mixer-devel sdl2-net-devel git zlib-devel \
bzip2-devel libjpeg-turbo-devel libgtk-2-devel sdl1-devel \
sdl1-mixer-devel sdl1-net-devel

Do the following sections as normal user.

Create ecwolf_build directory

mkdir -pv ~/ecwolf_build

Download and prepare the source

Use Git to download the ECWolf source:

cd ~/ecwolf_build
git clone https://bitbucket.org/ecwolf/ecwolf.git

and create an out of tree build directory in the newly created ecwolf directory:

mkdir -pv ecwolf/build

Compiling

Inside the build directory, run CMake to generate a Makefile:

cd ~/ecwolf_build/ecwolf/build
cmake .. -DCMAKE_BUILD_TYPE=Release -DGPL=ON

Assuming there were no errors, you should be able to run make to compile:

make

A development version of ECWolf will be compiled if you do not do #Latest stable version.

An ecwolf binary should be produced. To start ECWolf, the following command should work:

./ecwolf

If ECWolf complains you do not have any base game data set up, make sure that you have your Game data files placed in the same directory as ECWolf, in ~/.config/ecwolf or $PROGDIR. Alternatively, you can edit ~/.config/ecwolf/ecwolf.cfg to add the path for your game data to BaseDataPaths.

Latest stable version

Show the latest stable version:

cd ~/ecwolf_build/ecwolf &&
git tag -l | tail -1

If you want to compile the latest stable version, run:

cd ~/ecwolf_build/ecwolf &&
git checkout --detach refs/tags/$(git tag -l | tail -1)

and compile.

After compiling, backing up and optionally installing the latest stable version, run:

cd ~/ecwolf_build/ecwolf &&
git checkout master

Backup

If you want to backup ECWolf, do the following:

Create and name a directory with the corresponding ECWolf version/revision, build type and copy ecwolf and ecwolf.pk3 to it:

cd ~/ecwolf_build/ecwolf/build &&
if [ -f CMakeCache.txt ]; then
k="$(sed -n 's/.*CMAKE_BUILD_TYPE:STRING=\(.*\)/\1/p' CMakeCache.txt)"; else k=''; fi &&
if [ -n "$k" ]; then b="-BuildType$k"; else b=''; fi &&
BACKUPECWOLF="../../$(sed -n 's/.*#define GIT_DESCRIPTION "\(.*\)".*/\1/p' src/gitinfo.h)$b" &&
mkdir -pv "$BACKUPECWOLF" &&
cp -v ecwolf ecwolf.pk3 "$BACKUPECWOLF"/

Files are located at:

/home/<your username>/ecwolf_build/<your newly created directory>

Updating

When you wish to update ECWolf, copy and paste the following:

cd ~/ecwolf_build/ecwolf &&
git pull

When the update finish, go to #Compiling.

Installation

  • ecwolf = Stable version
  • ecwolf-alpha = Development version

Commands beginning with "sudo" will require temporary superuser privileges.

If you want to install ECWolf, do the following:

Create /usr/games/ecwolf and /usr/games/ecwolf-alpha directories:

sudo mkdir -pv /usr/games/ecwolf /usr/games/ecwolf-alpha

Copy ecwolf and ecwolf.pk3 to /usr/games/ecwolf/ or /usr/games/ecwolf-alpha/:

cd ~/ecwolf_build/ecwolf/build &&
h="$(sed -n 's/.*#define GIT_HASH "\(.*\)".*/\1/p' src/gitinfo.h)" &&
if [ -z "$(git describe --exact-match --tags $h 2>/dev/null)" ]; then
d=-alpha; else d=''; fi &&
sudo cp -v ecwolf ecwolf.pk3 /usr/games/ecwolf$d/

Create launch script:

cd ~/ecwolf_build/ecwolf/build &&
h="$(sed -n 's/.*#define GIT_HASH "\(.*\)".*/\1/p' src/gitinfo.h)" &&
if [ -z "$(git describe --exact-match --tags $h 2>/dev/null)" ]; then
d=-alpha; else d=''; fi &&
printf %s "\
#! /bin/sh
exec /usr/games/ecwolf$d/ecwolf \"\$@\"
" > ecwolf$d.sh &&
chmod 755 ecwolf$d.sh &&
sudo mv -v ecwolf$d.sh /usr/bin/ecwolf$d

Now from a terminal you should be able to run ecwolf or ecwolf-alpha from any user account.

Uninstallation

Remove /usr/games/ecwolf directory and all its files:

sudo rm -rfv /usr/games/ecwolf

Remove ecwolf script:

sudo rm -fv /usr/bin/ecwolf

Remove /usr/games/ecwolf-alpha directory and all its files:

sudo rm -rfv /usr/games/ecwolf-alpha

Remove ecwolf-alpha script:

sudo rm -fv /usr/bin/ecwolf-alpha

Developing

This page has helped you compile ECWolf, but perhaps you are interested in debugging the code or submitting code changes or fixes for inclusion. This section is intended for more advanced users who may be unfamiliar to CMake or debugging on Linux systems.

Debugging

Prerequisite:

Maybe you have found a way to make ECWolf crash, and are interested in debugging it. First, you need to compile a debug build of ECWolf. Inside the build directory, invoke CMake to set up for compiling, but this time, the build type is set to Debug:

cd ~/ecwolf_build/ecwolf/build
cmake .. -DCMAKE_BUILD_TYPE=Debug

Optionally, you may want to use some of the #Build options.

After CMake is done, run "make" or to speed up compilation, run "make -j<number>", a recommended value for the "-j" option is the number of physical cores:

make

To run ECWolf under a debugger such as gdb, use the following command:

gdb ecwolf

Now gdb should have you in its own command prompt:

(gdb)

You probably want to log the output, so lets output to a file ecwolfdebug.log:

(gdb) set logging on ecwolfdebug.log

Now start ECWolf by typing in run, and pressing enter:

(gdb) run

Or put any command line parameters to ecwolf after run:

(gdb) run <command line parameters>

To see the available command line parameters for ECWolf, type "run --help" and press enter.

If ECWolf crashes, gdb may be able to tell you the source file and line number it crashed in. Typing in the command backtrace or bt will produce information telling the last function calls, showing how execution got to the point where it crashed:

(gdb) backtrace

All output will be copied into the ecwolfdebug.log, which can then be scrutinized later, or perhaps posted to the Bug Tracker for other developers to look at.

To exit gdb's command prompt, type quit, q or press Ctrl-D:

(gdb) quit

If you want to free up space, run "make clean" to remove the files generated by the compilation.

Build options

CMake options
Options Description Example
GPL=ON Switch ECWolf's default original non-commercial license to GNU GPL. OPL emulator is changed from MAME's to the one from Dosbox. cmake .. -DGPL=ON
USE_LIBTEXTSCREEN=ON Use libtextscreen IWAD picker. Only available in the GPL edition. cmake .. -DGPL=ON -DUSE_LIBTEXTSCREEN=ON
NO_GTK=ON Disable GTK+ IWAD picker. cmake .. -DNO_GTK=ON
CMake build types
Types Description Example
Debug Debug information, -O1 optimization. cmake .. -DCMAKE_BUILD_TYPE=Debug
Release No debug information, -O3 optimization. cmake .. -DCMAKE_BUILD_TYPE=Release
RelWithDebInfo Debug information, -O2 optimization. Useful for finding optimization bugs that only show up in Release. cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
MinSizeRel Similar to Release but with less optimizations in order to save space. cmake .. -DCMAKE_BUILD_TYPE=MinSizeRel