eden/docs/build/Linux.md
lizzie 275d64e653
Some checks failed
eden-build / windows (msvc) (push) Waiting to run
eden-build / linux (push) Waiting to run
eden-build / android (push) Waiting to run
eden-build / source (push) Has been cancelled
[docs] add into docs/ and make links local (#93)
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: #93
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 09:53:45 +02:00

6.6 KiB

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+

The following are handled by Eden's externals:

All other dependencies will be downloaded by vcpkg if needed:

If an ARM64 build is intended, export VCPKG_FORCE_SYSTEM_BINARIES=1.

Dependencies are listed here as commands that can be copied/pasted. Of course, they should be inspected before being run.

  • Arch / Manjaro:
    • sudo pacman -Syu --needed base-devel boost catch2 cmake 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++-11 gcc-11 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 qtbase6-dev qtbase6-private-dev qtwebengine6-dev qtmultimedia6-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev
    • Ubuntu 22.04, Linux Mint 20, or Debian 12 or later is required.
    • Users need to manually specify building with QT Web Engine enabled. This is done using the parameter -DYUZU_USE_QT_WEB_ENGINE=ON when running CMake.
    • Users need to manually specify building with GCC 11. This can be done by adding the parameters -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11 when running CMake. i.e.
    • Users need to manually disable building SDL2 from externals if they intend to use the version provided by their system by adding the parameters -DYUZU_USE_EXTERNAL_SDL2=OFF
git submodule update --init --recursive
cmake .. -GNinja -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11
  • 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 qt5-linguist qt5-qtbase{-private,}-devel qt5-qtwebengine-devel qt5-qtmultimedia-devel speexdsp-devel wayland-devel zlib-devel ffmpeg-devel libXext-devel
    • Fedora 32 or later is required.
    • Due to GCC 12, Fedora 36 or later users need to install clang, and configure CMake to use it via -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang
    • CMake arguments to force system libraries:
      • SDL2: -DYUZU_USE_BUNDLED_SDL2=OFF -DYUZU_USE_EXTERNAL_SDL2=OFF
      • FFmpeg: -DYUZU_USE_EXTERNAL_FFMPEG=OFF
    • RPM Fusion (free) is required to install ffmpeg-devel

Cloning Eden with Git

Master:

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

The --recursive option automatically clones the required Git submodules.

Building Eden in Release Mode (Optimised)

If you need to run ctests, you can disable -DYUZU_TESTS=OFF and install Catch2.

mkdir build && cd build
cmake .. -GNinja -DYUZU_TESTS=OFF
ninja
sudo ninja install 

You may also want to include support for Discord Rich Presence by adding -DUSE_DISCORD_PRESENCE=ON after cmake ..

-DYUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS=OFF might be needed if ninja command failed with undefined reference to symbol 'spvOptimizerOptionsCreate, reason currently unknown

Optionally, you can use cmake-gui .. to adjust various options (e.g. disable the Qt GUI).

Building Eden in Debug Mode (Slow)

mkdir build && cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug -DYUZU_TESTS=OFF
ninja

Building with debug symbols

mkdir build && cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU -DYUZU_TESTS=OFF
ninja

Building with Scripts

A convenience script for building is provided in .ci/linux/build.sh. You must provide an arch target for optimization, e.g. .ci/linux/build.sh amd64. Valid targets:

  • 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
  • native: Optimize to your native host architecture

Extra flags to pass to CMake should be passed after the arch target.

Additional environment variables can be used to control building:

  • NPROC: Number of threads to use for compilation (defaults to all)
  • TARGET: Set to appimage to disable standalone eden-cli and eden-room executables
  • BUILD_TYPE: Sets the build type to use. Defaults to Release

The following environment variables are boolean flags. Set to true to enable or false to disable:

  • DEVEL (default FALSE): Disable Qt update checker
  • USE_WEBENGINE (default FALSE): Enable Qt WebEngine
  • USE_MULTIMEDIA (default TRUE): Enable Qt Multimedia

After building, an AppImage can be packaged via .ci/linux/package.sh. This script takes the same arch targets as the build script. If the build was created in a different directory, you can specify its path relative to the source directory, e.g. .ci/linux/package.sh amd64 build-appimage. Additionally, set the DEVEL environment variable to true to change the app name to Eden Nightly.

Running without installing

After building, the binaries eden and eden-cmd (depending on your build options) will end up in build/bin/.

# SDL
cd build/bin/
./eden-cmd

# Qt
cd build/bin/
./eden