eden/docs/build/Linux.md
Caio Oliveira d0ea6316eb
All checks were successful
eden-license / license-header (pull_request) Successful in 34s
[docs] Refactor building with Linux
* this a initial PR to improve documentation of building under linux
  based on updated windows doc

Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
2025-09-15 04:29:36 +02:00

6.6 KiB

⚠️ This guide is for developers ONLY! Support will be provided to developers ONLY.

📋 Index:


Minimal Dependencies

You'll need to download and install the following to build Eden:

  • GCC v11+ (for C++20 support) & misc
  • If GCC 12 is installed, Clang v14+ is required for compiling
  • CMake 3.22+
  • Git for version control

The following are handled by Eden's externals:

  • FFmpeg (should use -DYUZU_USE_EXTERNAL_FFMPEG=ON)
  • SDL2 2.0.18+ (should use -DYUZU_USE_EXTERNAL_SDL2=ON)
  • opus 1.3+

All other dependencies will be downloaded and built by CPM if YUZU_USE_CPM is on, but will always use system dependencies if available:

Certain other dependencies (httplib, jwt, sirit, etc.) will be fetched by CPM regardless. System packages can be used for these libraries but this is generally not recommended.

Dependencies are listed here as commands that can be copied/pasted. Inspect them before running.

Cloning Eden with Git

Master:

git clone https://git.eden-emu.dev/eden-emu/eden
cd eden

Arch / Manjaro

sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glslang libzip lz4 mbedtls ninja nlohmann-json openssl opus qt6-base qt6-multimedia sdl2 zlib zstd zip unzip
  • Building with QT Web Engine requires qt6-webengine as well.
  • Proper Wayland support requires qt6-wayland
  • GCC 11 or later is required.

Ubuntu / Linux Mint / Debian

sudo apt-get install autoconf cmake g++ gcc git glslang-tools libasound2 libboost-context-dev libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qt6-base-private-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev pkg-config zlib1g-dev libva-dev libvdpau-dev qt6-tools-dev libzydis-dev zydis-tools libzycore-dev
  • Ubuntu 22.04, Linux Mint 20, or Debian 12 or later is required.
  • To enable QT Web Engine, add -DYUZU_USE_QT_WEB_ENGINE=ON when running CMake.
# Make build dir and enter
mkdir build && cd build

# Generate CMake Makefiles
cmake .. -GNinja -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11

# Build
ninja

Fedora

sudo dnf install autoconf ccache cmake fmt-devel gcc{,-c++} glslang hidapi-devel json-devel libtool libusb1-devel libzstd-devel lz4-devel nasm ninja-build openssl-devel pulseaudio-libs-devel qt6-linguist qt6-qtbase{-private,}-devel qt6-qtwebengine-devel qt6-qtmultimedia-devel speexdsp-devel wayland-devel zlib-devel ffmpeg-devel libXext-devel
  • Force system libraries via CMake arguments:
    • SDL2: -DYUZU_USE_BUNDLED_SDL2=OFF -DYUZU_USE_EXTERNAL_SDL2=OFF
    • FFmpeg: -DYUZU_USE_EXTERNAL_FFMPEG=OFF
  • RPM Fusion is required for ffmpeg-devel
  • Fedora 32 or later is required.
  • Fedora 36+ users with GCC 12 need Clang and should configure CMake with:
# Generate CMake Makefiles (for Clang compiler)
cmake .. -GNinja -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang

Building Eden in Release Mode (Optimised)

# Make build dir and enter
mkdir build && cd build

# Generate CMake Makefiles
cmake .. -GNinja -DYUZU_TESTS=OFF

# Build
ninja

# Install!
sudo ninja install
  • Enable Discord Rich Presence:
# ...

# Generate CMake Makefiles (with Discord Rich Presence)
cmake .. -G "MSYS Makefiles" -DYUZU_TESTS=OFF -DUSE_DISCORD_PRESENCE=ON

# ...
  • If ninja fails with undefined reference to symbol 'spvOptimizerOptionsCreate', add -DYUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS=OFF
  • Optionally use cmake-gui .. to adjust options (e.g., disable Qt GUI)

Building Eden in Debug Mode (Slow)

# Make build dir and enter
mkdir build && cd build

# Generate CMake Makefiles
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug -DYUZU_TESTS=OFF

# Build
ninja

Building with Debug Symbols

# Make build dir and enter

# Generate CMake Makefiles
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU -DYUZU_TESTS=OFF

# Build
ninja

Building with Scripts

  • Provided script: .ci/linux/build.sh
  • Must specify arch target, e.g.: .ci/linux/build.sh amd64
  • Valid targets:
    • native: Optimize to your native host architecture
    • legacy: x86_64 generic, only needed for CPUs older than 2013 or so
    • amd64: x86_64-v3, for CPUs newer than 2013 or so
    • steamdeck / zen2: For Steam Deck or Zen >= 2 AMD CPUs (untested on Intel)
    • rog-ally / allyx / zen4: For ROG Ally X or Zen >= 4 AMD CPUs (untested on Intel)
    • aarch64: For armv8-a CPUs, older than mid-2021 or so
    • armv9: For armv9-a CPUs, newer than mid-2021 or so
  • Extra CMake flags go after the arch target.

Environment Variables

  • NPROC: Number of compilation threads (default: all cores)
  • TARGET: Set appimage to disable standalone eden-cli and eden-room
  • BUILD_TYPE: Build type (default: Release)

Boolean flags (set true to enable, false to disable):

  • DEVEL (default FALSE): Disable Qt update checker

  • USE_WEBENGINE (default FALSE): Enable Qt WebEngine

  • USE_MULTIMEDIA (default TRUE): Enable Qt Multimedia

  • AppImage packaging script: .ci/linux/package.sh

    • Accepts same arch targets as build script
    • Use DEVEL=true to rename app to Eden Nightly

Running without Installing

After building, binaries eden and eden-cmd will be in build/bin/.

# Build Dir
cd build/bin/

# SDL2 build
./eden-cmd

# Qt build
./eden