Compile ZDoom on Windows

From ZDoom Wiki
Jump to: navigation, search

To build ZDoom on Windows, you have a few options:

  • Use Visual Studio Community 2015
  • Use MinGW

Required downloads for both Visual C++ and MinGW

Optional downloads for both Visual C++ and MinGW

Currently OpenAL is only supported when building with CMake. You only need these if you want to statically link to these libraries. The project contains all needed headers to dynamically link to them by default and all that needs to be provided are the DLLs from the binary download.

Visual C++

The easiest way to compile ZDoom on Windows is to use CMake to generate Visual Studio projects.

Note: Visual Studio 2015 is required for building GZDoom. The last stable ZDoom release 2.8.1 can be compiled with 2005-2013.

Required Downloads for Visual C++ 2015

The following downloads are needed when building with Windows XP compatibility:

Download and install each of the above. For Visual Studio make sure that you select the Visual C++ and XP support components in the custom options in the installer as they are not installed by default.

Preparing library

Note: You only need to do this step if you want to build the 2.4.0 release or older with OpenAL support!

libmpg123 doesn't come with a library file, so you will need to build one.

1. Open the developer command prompt

  • Open the start menu and browse to the "Visual Studio" folder.
  • Open the "Visual Studio Tools" folder.
  • Run the "Visual Studio command prompt" or "developer command prompt" depending on your Visual Studio installation.

2. Browse to libmpg123 directory

  • Manually type the directory where you installed mpg123 into the command prompt. For example:
 cd C:\Program Files (x86)\mpg123

3. Rename export definition file

  • Due to an error in one of the file names included with mpg123, ZDoom will fail to load on startup. To fix this, rename libmpg123-0.dll.def to libmpg123-0.def
  • You can do this in the command prompt or in windows explorer. For the former:
 rename libmpg123-0.dll.def libmpg123-0.def

4. Build library

  • 32-bit
 lib /DEF:libmpg123-0.def /OUT:libmpg123-0.lib
  • 64-bit
 lib /MACHINE:X64 /DEF:libmpg123-0.def /OUT:libmpg123-0.lib

If done correctly, libmpg123-0.lib and libmpg123-0.exp should have been created in the directory.


1. Run cmake-gui.exe

  • In "Where is the source code:" browse to the zdoom folder from above
  • In "Where to build the binaries:" create a build directory in the zdoom folder above
  • Click configure
  • Select "Visual Studio 14 2015" or "Visual Studio 14 2015 Win64" for the generator based whether you want a 32 bit or 64 bit build.
  • Enter "v140_xp" (without the quotes) in the optional toolset box, if you want to build with Windows XP compatibility
  • Click Finish

2. After cmake configure finishes, it will likely fail because it couldn't find some things:

If you are building 2.4.0 with FMOD support:

  • set FMOD_INCLUDE_DIR to 'api/inc' folder inside folder where you installed fmod earlier (e.g. C:\Program Files (x86)\FMOD SoundSystem\FMOD Programmers API Windows\api\inc)
  • set FMOD_LIBRARY to 'api/lib/fmodex_vc.lib' inside fmod folder (e.g. C:\Program Files (x86)\FMOD SoundSystem\FMOD Programmers API Windows\api\lib\fmodex_vc.lib). If you are compiling for 64-bit systems set FMOD_LIBRARY to fmodex64_vc.lib instead.

3. Add the OpenAL requirements. The following is an example:

 OPENAL_INCLUDE_DIR  C:/Program Files (x86)/OpenAL 1.1 SDK/include
 OPENAL_LIBRARY      C:/Program Files (x86)/OpenAL 1.1 SDK/libs/Win64/OpenAL32.lib
 SNDFILE_INCLUDE_DIR C:/Program Files/Mega-Nerd/libsndfile/include
 SNDFILE_LIBRARY     C:/Program Files/Mega-Nerd/libsndfile/lib/libsndfile-1.lib
 MPG123_INCLUDE_DIR  C:/Program Files (x86)/mpg123
 MPG123_LIBRARIES    C:/Program Files (x86)/mpg123/libmpg123-0.lib

Be sure to use the right library from the OpenAL SDK. Note that for version 3.0.0 and above this is not needed anymore.

4. Click 'Configure'

  • If this fails with the message 'Could not find DirectX 9 libraries', you likely have an older DirectX SDK or installed the SDK into a non-standard location. To workaround this, you'll likely have to set the following cmake variables manually in the cmake GUI dialog (following is only an example):
 D3D_INCLUDE_DIR    C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Include
 DX_dinput8_LIBRARY C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Lib/x86/dinput8.lib
 DX_dxguid_LIBRARY  C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Lib/x86/dxguid.lib

This step is only required when building with Windows XP compatibility. The modern toolsets for Windows Vista and up will use an SDK version that includes these headers by default.

  • You are also likely to see the following reported:
 Could NOT find BZip2 (missing:  BZIP2_LIBRARIES BZIP2_INCLUDE_DIR) 
 Using internal zlib
 Using internal jpeg library
 Using internal bzip2 library
 Using internal gme library
 Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE) 

These are merely informational notices. The "missing" files are not required (internal versions are used for the first four and PkgConfig is not required). A fully a functional compile will still be made.

5. Click 'Generate'. After this, cmake should have successfully created 'zdoom.sln', and 'ALL_BUILD.vcxproj.user' files in the directory given for "Where to build the binaries:" (look at timestamp on the files as a sanity check). If not, something's gone wrong.

6. Close cmake

7. Open 'zdoom.sln' file in the build folder created earlier (double-clicking or within VS makes no difference)

8. Click Build -> Build Solution (NOTE: The build will fail if you have the Debug or Release folder inside the zdoom folder open due to one of the post-build steps.)

9. When the build successfully completes (there should be no failures):

  • copy the 'fmodex.dll' or 'fmodex64.dll' to the zdoom/Debug folder (e.g. cp C:\Program Files (x86)\FMOD SoundSystem\FMOD Programmers API Windows\api\fmodex.dll C:\Users\Shawn\Devel\zdoom\Debug)
  • copy 'libmpg123-0.dll' to zdoom/Debug folder.
  • copy 'libsndfile-1.dll' to zdoom/Debug folder.

10. Now zdoom.exe can be opened from the zdoom/Debug folder, or from within Visual Studio using Debug -> Start Debugging (F5) when the solution is selected. Assuming it found your copy of installed Doom (which if you've installed The Ultimate Doom from Steam, it will automatically), the game should launch after a few moments and go to the main menu.


Warning: The following information is severely outdated and will probably no longer work! Help in updating this section would be appreciated.

Downloads for MinGW

It is possible to build using vanilla MinGW, however it requires extensive hand modification to the header files as well as the Minimal DirectX 8 headers from Allegro. This is route one would need to take if a build targeting pre-XP is desired.

Preparing for compiling

  • Unpack the ZDoom source code wherever you like.
  • Run cmake-gui. You can find it in the start menu after installing CMake.
    • In the box labeled "Where is the source code:" point it to the directory where you put the source code. (e.g. E:/zdoom/trunk)
    • In the box labeled "Where to build the binaries:" create a subdirectory in the path to the source code to contain the build files (e.g. E:/zdoom/trunk/release).
    • Click the Configure button at the bottom of the window. If the build directory does not exist, it will ask to create it. Let it.
    • Select MinGW Makefiles as the project generator.
    • Check the configuration options to make sure they are to your liking. In particular, pay attention to:
      • CMAKE_BUILD_TYPE: This defaults to Debug. You probably want to change it to Release.
      • FMOD_INCLUDE_DIR: Make sure this points to *Where you installed FMOD*/api/inc
      • FMOD_LIBRARY: Make sure this points to *Where you installed FMOD*/api/lib/libfmodex.a
    • If you made any changes, press Configure again.
    • Now press Generate. This will create a Makefile in the build directory.


  • Open a Command Prompt window. You can either use Start -> Run... and type "cmd" or you can find it in Start -> All Programs -> Accessories -> Command Prompt.
  • C:\mingw\bin should be in your path. To set this for just the current command prompt, use the command
    set PATH=c:\mingw\bin;%PATH%
    To make this automatic for all command prompts, you need to edit the Environment Variables on the Advanced tab of the System Properties control panel.
  • Change to the directory you chose as the build directory. e.g. For the example above
    cd e:\zdoom\trunk\release
  • Compile the code from inside the build directory
    You can also use a multithreaded make to speed up compilation:
    mingw32-make -j2
    Just replace the 2 with however many threads you want to use.
  • This will leave a zdoom.exe in the build directory.