Build ‐ Linux ‐ Debian - daid/EmptyEpsilon GitHub Wiki

Current as of 2026-01-08 on Debian 13 Trixie. Also tested and confirmed on Debian 12 Bookworm and Raspberry Pi OS 4 Dec 2025.

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 libsdl2-dev libfreetype-dev

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

Build EmptyEpsilon from the master branch

Create a working directory, then from within it run:

git clone https://github.com/daid/EmptyEpsilon.git
git clone https://github.com/daid/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 libsdl2-dev libfreetype-dev &&
mkdir -p emptyepsilon-compile &&
cd emptyepsilon-compile &&
git clone https://github.com/daid/EmptyEpsilon.git &&
git clone https://github.com/daid/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/daid/EmptyEpsilon.git &&
git clone --branch EE-2024.12.08 --depth 1 https://github.com/daid/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/daid/EmptyEpsilon.git &&
git clone --branch EE-${VERSION} --depth 1 https://github.com/daid/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.

On older distributions

⚠️ These instructions are not comprehensively tested, rely on out-of-support versions of Ubuntu, and should be used at your own risk.

If you're running on an older operating system such as Ubuntu 18, you may need to upgrade your compiler:

sudo apt-get install gcc-8
sudo apt-get install g++-8

When you run cmake, use prefixes to direct CMake to the updated compiler:

CC=gcc-8 CXX=g++-8 cmake .. -G Ninja -DSERIOUS_PROTON_DIR=$PWD/../../SeriousProton/

You might also need to update CMake to version 3.11. To check its version, run:

cmake --version

To update CMake, remove the previous version:

sudo apt remove --purge cmake

Next, compile and install CMake 3.11 or later from source. These instructions are for 3.20.2; the version can be replaced with 3.11.0 if newer versions won't build.

sudo apt install build-essential libssl-dev
wget https://github.com/Kitware/CMake/releases/download/v3.20.2/cmake-3.20.2.tar.gz
tar -zxvf cmake-3.20.2.tar.gz
cd cmake-3.20.2
./bootstrap
make 
sudo make install 

Next, make a soft link to the new cmake binary:

cd /usr/bin
sudo ln -s /usr/local/bin/cmake cmake

For old versions of EmptyEpsilon

⚠️ Before October 2021, EmptyEpsilon and SeriousProton relied on SFML. Check the previous instructions if you're building for an older version.

⚠️ **GitHub.com Fallback** ⚠️