Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/azahar-emu/azahar/llms.txt

Use this file to discover all available pages before exploring further.

Building Azahar on Linux requires CMake 3.25 or later, a C++20-capable compiler, and a set of system libraries. The build system bundles many dependencies as Git submodules, so only a modest number of system packages are needed. The CI pipeline builds AppImages using Clang with Ninja, but GCC works equally well for local development.
Azahar requires GCC 10 or later or Clang 12 or later. Older compiler versions do not support all of the C++20 features the codebase relies on. On Ubuntu 20.04, you may need to install a newer GCC or Clang from a PPA or the official LLVM apt repository.

Install dependencies

sudo apt update
sudo apt install -y \
  build-essential \
  cmake \
  ninja-build \
  git \
  g++ \
  clang \
  libsdl2-dev \
  libssl-dev \
  zlib1g-dev \
  libzstd-dev \
  libusb-1.0-0-dev \
  libspeexdsp-dev \
  libasound2-dev \
  libpulse-dev \
  libopenal-dev \
  qt6-base-dev \
  qt6-multimedia-dev \
  libqt6opengl6-dev \
  qt6-base-private-dev \
  libqt6dbus6 \
  qt6-tools-dev \
  qt6-tools-dev-tools \
  libgl-dev \
  libglx-dev \
  libglew-dev \
  ccache \
  pkg-config
On Ubuntu 22.04 or earlier, Qt 6 may not be available in the default repositories. You can install it via the official Qt online installer, or use a backports PPA if available for your release.
Several additional libraries—including dynarmic, fmt, cryptopp, soundtouch, cubeb, glslang, vulkan-headers, zstd, libressl, sdl2 (bundled), and boost—are included as Git submodules and compiled automatically as part of the build.

Build Azahar

1

Clone the repository with submodules

Clone the repository and initialize all Git submodules in one step:
git clone --recurse-submodules https://github.com/azahar-emu/azahar.git
cd azahar
If you already cloned without --recurse-submodules, fetch the submodules now:
git submodule update --init --recursive
2

Configure with CMake

Create a build directory and run CMake. The default configuration enables the Qt frontend, SDL2, OpenAL, cubeb, libusb, and the Vulkan renderer:
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
To speed up incremental builds, enable ccache:
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER_LAUNCHER=ccache \
    -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
To build with Clang (as the CI does for AppImage releases):
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=clang \
    -DCMAKE_CXX_COMPILER=clang++
Key CMake options you can customize:
OptionDefaultDescription
ENABLE_QTONBuild the Qt6 desktop frontend
ENABLE_SDL2ONEnable SDL2 input/audio backend
ENABLE_VULKANONEnable the Vulkan renderer
ENABLE_OPENGLON (x86_64), OFF (aarch64)Enable the OpenGL renderer
ENABLE_OPENALONEnable the OpenAL audio backend
ENABLE_CUBEBONEnable the cubeb audio backend
ENABLE_LIBUSBONEnable libusb for GameCube Adapter support
ENABLE_ROOM_STANDALONEONBuild the standalone azahar-room server
USE_DISCORD_PRESENCEOFFEnable Discord Rich Presence
ENABLE_QT_TRANSLATIONOFFBundle Qt UI translations
On Linux aarch64, ENABLE_OPENGL defaults to OFF because some aarch64 devices do not support OpenGL. You can enable it explicitly with -DENABLE_OPENGL=ON if your system supports it.
3

Build

Compile the project:
cmake --build build --config Release
On a multi-core machine, Ninja automatically parallelizes the build. If you prefer to set the job count explicitly:
cmake --build build --config Release -- -j$(nproc)
4

Run the built executable

The compiled binaries land in:
build/bin/Release/
Launch the Qt frontend:
./build/bin/Release/azahar
To produce an AppImage or install the application system-wide, use the bundle target:
cmake --build build --target bundle
For a system-wide installation (into /usr/local by default):
sudo cmake --install build

Build docs developers (and LLMs) love