Compile ZDoom on Linux
This tutorial will guide you on the compilation of ZDoom on Linux.
Commands are shown in the tutorial that should be entered into a terminal. Commands beginning with `
su` and `
sudo` will require temporary root/admin privileges, as will most likely any package installation.
ZDoom needs certain dependencies in order to compile. These versions are known to work with recent ZDoom versions:
- gcc 4.1–4.5 or 3.4.6
- cmake 2.6 or 2.4
- fmodex 4.26.36
- SDL 1.2.8–1.2.13
- zlib (optional - ZDoom has a copy of it and will be statically compiled in if not found)
- libbzip2 (optional - possibly static)
- libjpeg (optional - possibly static)
- nasm 2.03.90–2.05.01 or 0.98.39 (optional)
- GTK2 (optional)
- Mesa (if compiling GZDoom); or any other GL implementation provider
- gxmessage (needed to show the crash log in a window)
You can presumably use any higher versions of these programs, however that might not be the case. FMOD Ex, notably, does not have a constant API and using a version newer than the one listed above can prevent the successful compilation or execution of ZDoom.
Debian & Ubuntu
sudo apt-get install build-essential zlib1g-dev libsdl1.2-dev libjpeg62-dev nasm tar libbz2-dev libgtk2.0-dev cmake
yum install gcc-c++ make zlib-devel SDL-devel libjpeg-turbo-devel nasm tar bzip2 gtk2-devel cmake
ZDoom is available in Arch User Repository at http://aur.archlinux.org/packages.php?ID=16403
Install as per usual for AUR packages.
zypper install make gcc-c++ zlib-devel SDL-devel libjpeg-devel nasm gtk2-devel cmake
(FMOD available in RPM format from third-party repositories. At your option, you can also use yast2 instead of zypper.)
emerge -avn sys-devel/gcc media-libs/fmod media-libs/libsdl dev-lang/nasm
Make sure the versions of these packages are equal to or greater than one of the versions listed above.
Get the ZDoom sources
It is recommended that you use a recent version from the subversion repository to compile, but you may use an older version's source from the if desired. Note that compilation steps may differ for older versions.
To obtain the latest version from the SVN, use the following command:
svn checkout http://mancubus.net/svn/hosted/zdoom/zdoom/trunk
A directory trunk will be generated containing the latest source code. In the future, the code may become out-of-date compared to newer code available in the SVN. To update to the latest code at any time, use the following command from inside the trunk directory:
Get the FMOD package
ZDoom uses the FMOD Ex library for audio. In many distributions, this will need to be installed manually. Check your system's package manager first to see if FMOD Ex is supported, and install it from there if it is and skip this section. Otherwise, run the following commands to install FMOD Ex:
wget http://www.fmod.org/index.php/release/version/fmodapi42636linux.tar.gz tar -xvzf fmodapi42636linux.tar.gz
Note that if you are on a 64-bit system, you will want the 64-bit version; use the following commands to get that instead. (You can have both the 32- and 64-bit versions installed concurrently, and this may be desirable if you wish to be able to use FMOD Ex with both 32- and 64-bit applications.)
# to get the 64-bit version wget http://www.fmod.org/index.php/release/version/fmodapi42636linux64.tar.gz tar -xvzf fmodapi42636linux64.tar.gz
Now that the library has been downloaded and extracted, you may choose to install it or place it in the ZDoom directory tree.
If you will not be installing ZDoom but running directly from the location where it is compiled, installing FMOD Ex is not strictly required, and you can place it in the trunk directory. (**As installing ZDoom is not officially supported, you should probably choose this option**.) This has the advantage that you can easily have multiple versions of FMOD on your system with no conflicts between each other:
mv fmodapi42636linux trunk
If instead, you would like to install FMOD Ex to /usr/local, you can do so:
cd fmodapi42636linux # or fmodapi42636linux64 for the 64-bit version sudo make install
You will be prompted for your password, and assuming you have correct administrator privileges, FMOD Ex will be installed.
ZDoom uses CMake to handle makefile generation on Linux, so simply running make will not build ZDoom until you have used CMake first. First, we need to go into the trunk directory where the source is, if we aren't there yet:
Next, we need to make a directory for CMake to work from, and compile to.
mkdir release cd release
Invoke CMake to parse the ZDoom source and get ready for compiling:
cmake -DCMAKE_BUILD_TYPE=Release ..
It may be necessary to tell it where the FMOD files and includes are located, for example use this command if you installed version 4.26.36 of FMOD:
cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex-4.26.36.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..
In case 64-bit FMOD is used, it of course needs to point to that instead.
Compile the code from inside the release directory.
Compile with FMOD in the trunk directory (AMD64)
This is the recommended method, especially for 64 bit systems, I've noticed that the installation does not usually put the file in lib64, and it was quite a hunt to find it.
This portion is for x64 machines, but it should work with i386 systems as well, if you remove the 64 in fmodapi42416linux64/ and libfmodex64-4.26.36.so it should work.
Follow the above steps, but the CMake commands will be different.
Keep in mind that the -DFMOD_LIBRARY parameter needs to point to a specific .so file (e.g., trunk/fmodapi42416linux64/api/lib/libfmodex-4.26.36.so) and -DFMOD_INCLUDE_DIR needs to point to a DIRECTORY (e.g., trunk/fmodapi42416linux64/api/inc). If you're in doubt about the locations of a file, you can open these directories up to be sure that your library is there. Your inc/ directory should include .h and .hpp files.
That is basically what these three parameters for CMake do, they tell CMake where the libraries and include files are, both libraries and includes are needed to compile ZDoom.
Your command would look like this, replace <path to trunk> with the directory the trunk is currently in, e.g., /home/yourname/zdoom/trunk/ and replace fmodapi<VERSION>linux64 with the version you're using. Right now I'm using the AMD64 version of FMOD 4.24.16, so my folder is fmodapi42416linux64.
(this command should be a single line, shown on two lines so it's easier to read)
cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=<path to trunk>/trunk/fmodapi<VERSION>linux64/api/lib/libfmodex64-4.26.36.so -DFMOD_INCLUDE_DIR=<path to trunk>/trunk/fmodapi<VERSION>linux64/api/inc ..
Start playing ZDoom
Assuming all goes well, an executable zdoom and the zdoom.pk3 file will be generated in the release directory. To start ZDoom, the following command should work:
If ZDoom complains you do not have any IWADs set up, make sure that you have your IWAD files placed in the same directory as ZDoom, in $HOME/.zdoom, $DOOMWADDIR, or /usr/local/share.
If ZDoom starts but immediately closes with the following messages in the terminal:
... Init Playloop state. Setting up sound. S_Init Checking network game status. player 1 of 1 (1 nodes)
This usually indicates that FMOD Ex is not loading correctly (and ZDoom is configured to use FMOD by default). There are then two solutions.
You could start ZDoom without music:
- ... on any Debian/Ubuntu-based distribution, run:
sudo apt-get install timidity timidity-interfaces-extra
- ... on openSUSE:
yast2 -i timidity or zypper in timidity
- ... on Gentoo, run:
sudo emerge -avn timidity++
See the software synthesizer article for further information about ZDoom's MIDI devices.
This page has helped you compile ZDoom, 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.
Maybe you have found a way to make ZDoom crash, and are interested in debugging it. First, you need to compile a debug build of ZDoom. Inside the trunk directory, create a new directory debug.
mkdir debug cd debug
Invoke CMake to set up for compiling, but this time, the build type is set to Debug.
cmake -DCMAKE_BUILD_TYPE=Debug ..
After CMake is done, run make as usual.
To run ZDoom under a debugger such as gdb, use the following command:
Now gdb should have you in its own prompt. You probably want to log the output, so lets output to a file log.txt:
set logging on log.txt
Now start ZDoom by typing in run, and pressing enter. (Put any arguments to zdoom after run .) If ZDoom crashes, gdb may be able to tell you the source file and line number it crashed in. Typing in the command backtrace will produce information telling the last function calls, showing how execution got to the point where it crashed. All output will be copied into the log.txt, which can then be scrutinized later, or perhaps posted to thefor other developers to look at.
To get out of gdb's prompt, type quit.