Skip to content

fork Cross compiling with dockcross

Oznogon edited this page Jun 15, 2026 · 1 revision

Install podman

...

Disable short-name-mode enforcement

vim ~/.config/containers/registries.conf
[registries.search]
registries = ['docker.io']

[registries.short-name-mode]
mode = "disabled"

Setup dockcross

https://github.com/dockcross/dockcross

podman run --rm dockcross/linux-armv6 > ./dockcross-armv6 && chmod +x ./dockcross-armv6 && mv ./dockcross-armv6 ~/bin/
podman run --rm dockcross/linux-armv7 > ./dockcross-armv7 && chmod +x ./dockcross-armv7 && mv ./dockcross-armv7 ~/bin/
podman run --rm dockcross/linux-arm64 > ./dockcross-armv8 && chmod +x ./dockcross-armv8 && mv ./dockcross-armv8 ~/bin/
podman run --rm dockcross/windows-static-x64 > ./dockcross-win64 && chmod +x ./dockcross-win64 && mv ./dockcross-win64 ~/bin/
podman run --rm dockcross/windows-arm64 > ./dockcross-win-arm64 && chmod +x ./dockcross-win-arm64 && mv ./dockcross-win-arm64 ~/bin/

etc.

Clone EmptyEpsilon and SeriousProton repos

master branch, quick:

for repo in EmptyEpsilon SeriousProton
do
  git clone --depth=1 "https://github.com/daid/${repo}"
done

or legacy/2024.12.08:

for repo in EmptyEpsilon SeriousProton
do
  git clone -b legacy --depth=1 --single-branch "https://github.com/daid/${repo}"
done

Compile SDL2

First time only:

wget https://github.com/libsdl-org/SDL/releases/download/release-2.32.10/SDL2-2.32.10.tar.gz
tar zxf SDL2-2.32.10.tar.gz
for i in armv6 armv7 armv8 win64 win-arm64
do
  dockcross-${i} cmake -S SDL2-2.32.10 -B SDL2-2.32.10/build_${i}/release -G Ninja -DCMAKE_INSTALL_PREFIX=SDL2-2.32.10/install_${i} -DCMAKE_BUILD_TYPE=Release
  dockcross-${i} cmake --build SDL2-2.32.10/build_${i}/release --target install
done

Compile EmptyEpsilon

Create DEB package:

export SUPPRESS_BOLTDB_WARNING=true

dockcross-armv6 bash -c '
  {
    cmake \
      -B EmptyEpsilon/_build_armv6 \
      -S EmptyEpsilon \
      -G Ninja \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_PROJECT_EmptyEpsilon_INCLUDE=version.cmake \
      -DSDL2_DIR=/work/SDL2-2.32.10/install_armv6/lib/cmake/SDL2 \
      -DCPACK_GENERATOR=DEB \
      -DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=armel \
      -DCPACK_DEBIAN_PACKAGE_DEPENDS="libfreetype6, libsdl2-2.0-0" \
      -DCPACK_DEBIAN_PACKAGE_VERSION="2024.12.08" &&
    cmake \
      --build EmptyEpsilon/_build_armv6 \
      --target package
  } > EmptyEpsilon-build-armv6.log 2>&1
  dpkg --info EmptyEpsilon/_build_armv6/EmptyEpsilon.deb | grep Version'

dockcross-armv7 bash -c '
  {
    cmake \
      -B EmptyEpsilon/_build_armv7 \
      -S EmptyEpsilon \
      -G Ninja \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_PROJECT_EmptyEpsilon_INCLUDE=version.cmake \
      -DSDL2_DIR=/work/SDL2-2.32.10/install_armv7/lib/cmake/SDL2 \
      -DCPACK_GENERATOR=DEB \
      -DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=armhf \
      -DCPACK_DEBIAN_PACKAGE_DEPENDS="libfreetype6, libsdl2-2.0-0" \
      -DCPACK_DEBIAN_PACKAGE_VERSION="2024.12.08" &&
    cmake \
      --build EmptyEpsilon/_build_armv7 \
      --target package
  } > EmptyEpsilon-build-armv7.log 2>&1
  dpkg --info EmptyEpsilon/_build_armv7/EmptyEpsilon.deb | grep Version'

dockcross-armv8 bash -c '
  {
    cmake \
      -B EmptyEpsilon/_build_armv8 \
      -S EmptyEpsilon \
      -G Ninja \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_PROJECT_EmptyEpsilon_INCLUDE=version.cmake \
      -DSDL2_DIR=/work/SDL2-2.32.10/install_armv8/lib/cmake/SDL2 \
      -DCPACK_GENERATOR=DEB \
      -DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=arm64 \
      -DCPACK_DEBIAN_PACKAGE_DEPENDS="libfreetype6, libsdl2-2.0-0" \
      -DCPACK_DEBIAN_PACKAGE_VERSION="2024.12.08" &&
    cmake \
      --build EmptyEpsilon/_build_armv8 \
      --target package
  } > EmptyEpsilon-build-armv8.log 2>&1
  dpkg --info EmptyEpsilon/_build_armv8/EmptyEpsilon.deb | grep Version'

dockcross-win64 bash -c '
  {
    cmake \
      -B EmptyEpsilon/_build_win64 \
      -S EmptyEpsilon \
      -G Ninja \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_PROJECT_EmptyEpsilon_INCLUDE=version.cmake \
      -DSDL2_DIR=/work/SDL2-2.32.10/install_win64/lib/cmake/SDL2 \
      -DCPACK_GENERATOR=ZIP &&
    cmake \
      --build EmptyEpsilon/_build_win64 \
      --target package
  } > EmptyEpsilon-build-win64.log 2>&1
  cat EmptyEpsilon-build-win64.log'

# Disable problematic LTO
dockcross-win-arm64 bash -c '
  {
    LDFLAGS="-fno-lto" CFLAGS="-fno-lto" CXXFLAGS="-fno-lto" \
    cmake \
      -B EmptyEpsilon/_build_win-arm64 \
      -S EmptyEpsilon \
      -G Ninja \
      -DCMAKE_BUILD_TYPE=RelWithDebInfo \
      -DCMAKE_CXX_FLAGS="-O2 -fno-lto" \
      -DCMAKE_C_FLAGS="-O2 -fno-lto" \
      -DCMAKE_EXE_LINKER_FLAGS="-fno-lto" \
      -DCMAKE_SHARED_LINKER_FLAGS="-fno-lto" \
      -DCMAKE_MODULE_LINKER_FLAGS="-fno-lto" \
      -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \
      -DCMAKE_PROJECT_EmptyEpsilon_INCLUDE=version.cmake \
      -DSDL2_DIR=/work/SDL2-2.32.10/install_win-arm64/lib/cmake/SDL2 \
      -DCPACK_GENERATOR=ZIP &&
    cmake \
      --build EmptyEpsilon/_build_win-arm64 \
      --target package
  } > EmptyEpsilon-build-win-arm64.log 2>&1
  cat EmptyEpsilon-build-win-arm64.log'
  • -DCPACK_DEB_PACKAGE_VERSION=2024.12.08 is a hack workaround for https://github.com/daid/EmptyEpsilon/issues/2689 and should be changed for any other version built (or removed for nightly)

  • -DCPACK_DEBIAN_PACKAGE_DEPENDS="libfreetype6, libsdl2-2.0-0" is a workaround for skipping a condition in EmptyEpsilon/CMakeLists.txt

Clone this wiki locally