Below are instructions for Fedora 28. The dependencies are pretty common and should be available for any other popular distribution. A recent GCC (7+) is required for C++17.

Install dependencies

$ dnf install git gcc-c++ cmake boost-devel qt5-devel glfw-devel \
    metis-devel sqlite-devel openssl-devel libpng-devel zlib-devel \
    freetype-devel pulseaudio-libs-devel libicu-devel spdlog-devel \
    pugixml-devel glm-devel tbb-devel SDL2-devel ninja-build

Clone the repository recursively

$ git clone --recurse-submodules


$ mkdir /path/to/build-dir
$ cd /path/to/build-dir
$ cmake -GNinja /path/to/repo


$ ninja

Intel VTune integration

The ITTNOTIFY_API is used in several places for better profiler output. Either make sure the following directory exists



Debug vs. Release

Building in the Debug configuration drastically reduces performance and also impacts the code generation of the rewrite tool. As such it is recommended to initially build in the Release configuration, preparing the environment and then building in Debug to continue developing.

The EMU_CONFIGURATION_DEBUG option select the configuration.

Other options

EMU_CONFIGURATION_PAUSE allows pausing the virtual machine to implement breakpoints for the debugger. It decreases performance and is only using for debugging.

EMU_CONFIGURATION_LOG can be used to completely remove any trace of logging functionality from the source code. Usually the performance improvement after disabling logging is negligible.

EMU_CONFIGURATION_TESTS enables some hooks necessary for running tests. Setting it to FALSE has no effect on performance.

EMU_CONFIGURATION_GLDEBUG enables OpenGL debug context and installs a callback that prints any warnings and errors that come from the video driver.