Difference between revisions of "Compile ECWolf on Linux"

From ECWolf Wiki
(Current release version)
m (Dependencies)
Line 8: Line 8:
* [http://www.gnu.org/software/make/ make]
* [http://www.gnu.org/software/make/ make]
* [http://www.libsdl.org/ libsdl] 1.2
* [http://www.libsdl.org/ libsdl] 1.2
* [http://www.libsdl.org/projects/SDL_mixer/ SDL_mixer] 1.2.11
* [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.)
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

Revision as of 06:32, 8 January 2015

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


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.

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

Install the following dependencies as superuser:


sudo apt-get install cmake g++ libsdl1.2-dev libsdl-mixer1.2-dev \
zlib1g-dev libbz2-dev mercurial make libjpeg-dev libgtk2.0-dev


yum install cmake gcc-c++ SDL-devel SDL_mixer-devel zlib-devel \
bzip2-devel mercurial make libjpeg-turbo-devel gtk2-devel


zypper install cmake gcc-c++ libSDL-devel libSDL_mixer-devel \
zlib-devel libbz2-devel mercurial make libjpeg-devel gtk2-devel


if [ "$(uname -m)" = "x86_64" ]; then 
fi && \
urpmi cmake gcc-c++ lib"$a"SDL-devel lib"$a"SDL_mixer-devel \
lib"$a"zlib-devel lib"$a"bzip2-devel mercurial make \
lib"$a"jpeg-devel lib"$a"gtk+2.0-devel lib"$a"cairo-devel

Arch Linux

pacman -S --needed cmake gcc sdl sdl_mixer zlib bzip2 mercurial make libjpeg-turbo gtk2


emerge -avn dev-util/cmake sys-devel/gcc media-libs/libsdl media-libs/sdl-mixer \
sys-libs/zlib app-arch/bzip2 dev-vcs/mercurial sys-devel/make media-libs/libjpeg-turbo \


if [ "$(uname -m)" = "x86_64" ]; then 
fi && \
apt-get install cmake gcc-c++ lib"$a"SDL-devel lib"$a"SDL_mixer1.2-devel \
zlib1-devel lib"$a"bzip2-devel mercurial make lib"$a"jpeg62-devel \

Do the following steps as normal user.

Make ecwolf_build directory

mkdir -pv $HOME/ecwolf_build

Retrieving the Source

Use Mercurial to retrieve the latest version of the source.

cd $HOME/ecwolf_build
hg clone https://bitbucket.org/Blzut3/ecwolf


It is recommended that you create a build directory in the newly created ecwolf directory.

cd ecwolf
mkdir build
cd build

Run CMake to generate a Makefile. Assuming there were no errors, you should be able to run make to compile.

If you are going to recompile, it is recommended to run make clean before the following.

cmake -DCMAKE_BUILD_TYPE=Release -DGPL=ON ..

An ecwolf binary should be produced.


Current stable version

Show the current stable version:

cd $HOME/ecwolf_build/ecwolf && \
hg identify -r "max(tagged())"

If you want to compile the current stable version, run the following:

cd $HOME/ecwolf_build/ecwolf && \
hg update -cr "max(tagged())"

and compile.

After compiling and backing up the current stable version, run the following:

cd $HOME/ecwolf_build/ecwolf && \
hg update default


Follow this step if you want or manually copy (backup) ecwolf and ecwolf.pk3.

Make and name a directory with the corresponding ECWolf version/revision and copy ecwolf and ecwolf.pk3 to it:

cd $HOME/ecwolf_build && \
BACKUPECWOLF="$(sed -n 's/.*#define DOTVERSIONSTR_NOREV "\(.*\)".*/\1/p' \
-r$(sed -n 's/.*#define SVN_REVISION_STRING "\(.*\)".*/\1/p' \
ecwolf/src/svnrevision.h)" && \
mkdir -pv "$BACKUPECWOLF" && \
cp -v ecwolf/build/{ecwolf,ecwolf.pk3} "$BACKUPECWOLF"

Backup (Optional)

Make and name a directory with the current year, month, day, hour and minute and copy ecwolf and ecwolf.pk3 to it:

cd $HOME/ecwolf_build && \
BACKUPECW="$(date +%Y%m%d%H%M)" && \
mkdir -pv "$BACKUPECW" && \
cp -v ecwolf/build/{ecwolf,ecwolf.pk3} "$BACKUPECW"

If you did "Backup" or "Backup (Optional)", the previous files should be located at:

/home/<your username>/ecwolf_build/


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

cd $HOME/ecwolf_build/ecwolf && \
hg pull ; hg update

When the update finish, go to Compiling.


The following steps contain commands that require to be run as superuser with the sudo command.

If you want to install ECWolf, do the following:

Make /usr/games/ecwolf directory:

sudo mkdir -pv /usr/games/ecwolf

Copy ecwolf and ecwolf.pk3 to /usr/games/ecwolf:

sudo cp -v /home/$USER/ecwolf_build/ecwolf/build/{ecwolf,ecwolf.pk3} /usr/games/ecwolf

Make ecwolf script, add executable permission and copy it to /usr/bin:

cd /tmp && \
echo '#!/bin/sh' > ecwolf && \
echo >> ecwolf && \
echo 'exec /usr/games/ecwolf/ecwolf "$@"' >> ecwolf && \
chmod 755 ecwolf && \
sudo cp -v ecwolf /usr/bin && \
rm -fv ecwolf

Now from a terminal you should be able to execute ecwolf from any user account.


To remove the previous installation steps:

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

cd /usr/games && \
sudo rm -rfv ecwolf

Remove ecwolf script:

cd /usr/bin && \
sudo rm -fv ecwolf



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.


You should now be able to use gdb to generate a back trace.

gdb ecwolf

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

set logging on ecwolfdebug.log

GDB has it's own command prompt. Use "run" to start ecwolf.

(gdb) run

To start and pass command line parameters to ecwolf.

(gdb) run <command line parameters>

Use "bt" to get the back trace after a crash.

(gdb) bt

To exit GDB's command prompt, use "quit", "q" or Ctrl-D.

(gdb) quit

Build Options

CMake Build 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, -O3 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 ..