Skip to content

Build on Debian Linux

Oznogon edited this page Jul 24, 2026 · 7 revisions

Current as of 2026-07-24 on Debian 13 Trixie.

Debian is the official build system for EmptyEpsilon releases and a recommended operating system for building EmptyEpsilon from source. These steps might also work on Debian derivatives, such as Ubuntu and Raspberry Pi OS.

For generic build instructions and additional options, see Build.

Table of contents

Prerequisites

Install the required packages for compiling EmptyEpsilon from source:

sudo apt install git build-essential cmake ninja-build zip unzip \
    libfreetype-dev

The libfreetype-dev package might be libfreetype6-dev on older versions of Debian.

Vendored SDL3

SeriousProton vendors SDL3 via CMake FetchContent, which automatically downloads and builds it from source while building EmptyEpsilon. You typically shouldn't need to install SDL3 separately.

You might need to install SDL3 dependencies to ensure that it has access to all necessary SDL features. See the SDL wiki.

For example, to enable all SDL3 features on Ubuntu, install:

sudo apt-get install make pkg-config gnome-desktop-testing libasound2-dev \
    libpulse-dev libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev \
    libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \
    libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev \
    libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev \
    libthai-dev libusb-1.0-0-dev libpipewire-0.3-dev libwayland-dev libdecor-0-dev \
    liburing-dev

To override the vendored SDL3 and instead use a system-installed (libsdl3-devel) or custom build, define SDL3_DIR with the location of SDL3Config.cmake or sdl3-config.cmake.

Build EmptyEpsilon from the master branch

Create a working directory, then from within it run:

git clone https://github.com/oznogon/EmptyEpsilon.git &&
git clone https://github.com/oznogon/SeriousProton.git &&
cmake -S EmptyEpsilon -B EmptyEpsilon/_build -G Ninja &&
cmake --build EmptyEpsilon/_build

To launch the build without installing, run:

(cd EmptyEpsilon && _build/EmptyEpsilon)

To install this build globally on your local system, run:

sudo cmake --build EmptyEpsilon/_build --target install

To build a distributable .deb package, run:

cmake --build EmptyEpsilon/_build --target package

The package target builds a Debian package by default. To manually specify this, add the -DCPACK_GENERATOR=DEB flag to the build environment step:

cmake -S EmptyEpsilon -B EmptyEpsilon/_build -G Ninja -DCPACK_GENERATOR=DEB

Build script

A script executing the steps to build a Debian package of EmptyEpsilon's master branch from scratch on a newly installed Debian 13 system:
sudo apt install git build-essential cmake ninja-build zip unzip libfreetype-dev \
    make pkg-config gnome-desktop-testing libasound2-dev \
    libpulse-dev libaudio-dev libfribidi-dev libjack-dev libsndio-dev libx11-dev \
    libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \
    libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev \
    libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev \
    libthai-dev libusb-1.0-0-dev libpipewire-0.3-dev libwayland-dev libdecor-0-dev \
    liburing-dev &&
mkdir -p emptyepsilon-compile &&
cd emptyepsilon-compile &&
git clone https://github.com/oznogon/EmptyEpsilon.git &&
git clone https://github.com/oznogon/SeriousProton.git &&
cmake -S EmptyEpsilon -B EmptyEpsilon/_build -G Ninja &&
cmake --build EmptyEpsilon/_build --target package

The result should be an EmptyEpsilon.deb package located at emptyepsilon-compile/EmptyEpsilon/_build.

Build a distributable package of a specific EmptyEpsilon version

See Build for details on downloading a specific release's source or using a repository release tag, and for specifying a version number.

Download or clone the repository for a specific version. Given the 2024.12.08 official release as an example:

sudo apt install git build-essential cmake ninja-build zip unzip libsdl2-dev libfreetype6-dev &&
mkdir -p emptyepsilon-compile &&
cd emptyepsilon-compile &&
git clone --branch EE-2024.12.08 --depth 1 https://github.com/oznogon/EmptyEpsilon.git &&
git clone --branch EE-2024.12.08 --depth 1 https://github.com/oznogon/SeriousProton.git

Create a version.cmake file for that version in the EmptyEpsilon repository root directory. Note the CPACK_DEBIAN_PACKAGE_VERSION line; without it, the package version will be today's date instead of the expected EmptyEpsilon version.

cat <<EOF > EmptyEpsilon/version.cmake
set(PROJECT_VERSION 2024.12.08)
set(PROJECT_VERSION_MAJOR 2024)
set(PROJECT_VERSION_MINOR 12)
set(PROJECT_VERSION_PATCH 8)
set(CPACK_DEBIAN_PACKAGE_VERSION 2024.12.08)
EOF

Provide version.cmake as a project include file:

cmake -S EmptyEpsilon -B EmptyEpsilon/_build -G Ninja \
    -DCMAKE_PROJECT_EmptyEpsilon_INCLUDE=version.cmake &&
cmake --build EmptyEpsilon/_build --target package

Confirm the package with dpkg:

dpkg --info EmptyEpsilon/_build/EmptyEpsilon.deb

dpkg should output something similar to the following, depending on your architecture and the version you defined:

 new Debian package, version 2.0.
 size 261765618 bytes: control archive=21570 bytes.
     238 bytes,    10 lines      control
   76438 bytes,   744 lines      md5sums
 Architecture: amd64
 Depends: libfreetype6, libsdl2-2.0-0
 Description: EmptyEpsilon built using CMake
 Maintainer: https://github.com/daid/
 Package: emptyepsilon
 Priority: optional
 Section: devel
 Version: 2024.12.08
 Installed-Size: 301753

Build script

A script executing the steps to build a Debian package of an EmptyEpsilon release tag from scratch on a newly installed Debian 13 system:

For example, save this script as build-debian.sh and run it as build-debian.sh 2024.12.08 to build the EE-2024.12.08 release.

#!/bin/bash

# Capture version from first command-line argument
if [ $# -eq 0 ]; then
    echo "Error: Version number is required"
    echo "Usage: $0 <version>"
    exit 1
fi

VERSION="$1"

# Validate YYYY.MM.DD format
if [[ ! "$VERSION" =~ ^[0-9]{4}\.[0-9]{2}\.[0-9]{2}$ ]]; then
    echo "Error: Invalid version format. Use YYYY.MM.DD"
    exit 1
fi

sudo apt install git build-essential cmake ninja-build zip unzip libsdl2-dev libfreetype-dev &&
mkdir -p emptyepsilon-compile &&
cd emptyepsilon-compile &&
git clone --branch EE-${VERSION} --depth 1 https://github.com/oznogon/EmptyEpsilon.git &&
git clone --branch EE-${VERSION} --depth 1 https://github.com/oznogon/SeriousProton.git &&
{
    cat <<EOF > EmptyEpsilon/version.cmake
set(PROJECT_VERSION ${VERSION})
set(PROJECT_VERSION_MAJOR $(echo ${VERSION} | cut -d. -f1))
set(PROJECT_VERSION_MINOR $(echo ${VERSION} | cut -d. -f2 | sed 's/^0*//'))
set(PROJECT_VERSION_PATCH $(echo ${VERSION} | cut -d. -f3 | sed 's/^0*//'))
set(CPACK_DEBIAN_PACKAGE_VERSION ${VERSION})
EOF
} &&
cmake -S EmptyEpsilon -B EmptyEpsilon/_build -G Ninja \
    -DCMAKE_PROJECT_EmptyEpsilon_INCLUDE=version.cmake &&
cmake --build EmptyEpsilon/_build --target package &&
dpkg --info EmptyEpsilon/_build/EmptyEpsilon.deb

The result should be an EmptyEpsilon.deb package located at emptyepsilon-compile/EmptyEpsilon/_build.

Build with additional options

See Build for additional options, such as building releases with debugging symbols.

Clone this wiki locally