From 7d4935e3c77e64380a67d2416df1c8f3b7184d2e Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 13:02:32 -0500 Subject: [PATCH 01/45] nits --- platforms/ios/build.sh | 1 + platforms/macos/build.sh | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/platforms/ios/build.sh b/platforms/ios/build.sh index 5b5e8e7c0..b7df14631 100755 --- a/platforms/ios/build.sh +++ b/platforms/ios/build.sh @@ -2,6 +2,7 @@ # shellcheck disable=2086 set -e +# cd to the directory this script is in [ "${0%/*}" = "$0" ] && scriptroot="." || scriptroot="${0%/*}" cd "$scriptroot" diff --git a/platforms/macos/build.sh b/platforms/macos/build.sh index fcd3bfd1f..f0a77f2ff 100755 --- a/platforms/macos/build.sh +++ b/platforms/macos/build.sh @@ -2,6 +2,7 @@ # shellcheck disable=2086 set -e +# cd to the directory this script is in [ "${0%/*}" = "$0" ] && scriptroot="." || scriptroot="${0%/*}" cd "$scriptroot" @@ -52,7 +53,7 @@ if ! [ -d "$x86_64_sdk" ] || ! [ -d "$arm64_sdk" ] || ! [ -d "$old_sdk" ] || [ " mv MacOSX10.5.sdk "$old_sdk" # patch the sdk to fix a bug cd "$old_sdk" - patch -p1 < "$platformdir/leopard-sdk-fix.patch" + patch -fNp1 < "$platformdir/leopard-sdk-fix.patch" ) wait rm ./*.tar.bz2 ./*.tar.xz From 28995f986ddafcad841b5d54304d987fb921640f Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 13:51:06 -0500 Subject: [PATCH 02/45] these shouldnt be executable --- game/assets/mob/cow.png | Bin game/assets/resource_packs/minecraft/.gitignore | 0 game/assets/resource_packs/minecraft/pack.txt | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 game/assets/mob/cow.png mode change 100755 => 100644 game/assets/resource_packs/minecraft/.gitignore mode change 100755 => 100644 game/assets/resource_packs/minecraft/pack.txt diff --git a/game/assets/mob/cow.png b/game/assets/mob/cow.png old mode 100755 new mode 100644 diff --git a/game/assets/resource_packs/minecraft/.gitignore b/game/assets/resource_packs/minecraft/.gitignore old mode 100755 new mode 100644 diff --git a/game/assets/resource_packs/minecraft/pack.txt b/game/assets/resource_packs/minecraft/pack.txt old mode 100755 new mode 100644 From 0cf1f6525614bff4cb4f526b9be6710859ee2640 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 14:20:52 -0500 Subject: [PATCH 03/45] kinda not really working --- platforms/flatpak/.gitignore | 1 + platforms/flatpak/build.sh | 53 ++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 platforms/flatpak/.gitignore create mode 100755 platforms/flatpak/build.sh diff --git a/platforms/flatpak/.gitignore b/platforms/flatpak/.gitignore new file mode 100644 index 000000000..796b96d1c --- /dev/null +++ b/platforms/flatpak/.gitignore @@ -0,0 +1 @@ +/build diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh new file mode 100755 index 000000000..255d7de21 --- /dev/null +++ b/platforms/flatpak/build.sh @@ -0,0 +1,53 @@ +#!/bin/sh +set -e + +# cd to the directory this script is in +[ "${0%/*}" = "$0" ] && scriptroot="." || scriptroot="${0%/*}" +cd "$scriptroot" + +bundleid='io.github.reminecraftpe' + +platformdir=$PWD + +if command -v nproc >/dev/null; then + ncpus="$(nproc)" +else + ncpus="$(sysctl -n hw.ncpu)" +fi + +rm -rf build +mkdir -p build/work +cd build + +flatpak build-init output "$bundleid" org.freedesktop.Sdk org.freedesktop.Platform 25.08 + +cd work + +fpbuild() { + flatpak build ../output "$@" +} + +fpbuild cmake "$platformdir/../.." \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + -DREMCPE_PLATFORM=sdl2 \ + -DREMCPE_GFX_API=OGL +fpbuild cmake --build . --parallel "$ncpus" +fpbuild mkdir -p /app/bin +fpbuild strip reminecraftpe +fpbuild mv reminecraftpe /app/bin +fpbuild cp -a "$(readlink assets)" /app + +cd .. + +flatpak build-finish output \ + --share=ipc \ + --socket=fallback-x11 \ + --socket=wayland \ + --device=dri \ + --device=input \ + --share=network \ + --command=reminecraftpe + +flatpak build-export repo output +flatpak build-bundle repo ReMCPE.flatpak "$bundleid" From 4dadd2c83ceafe994b01d318ed16199ec606520c Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 14:27:40 -0500 Subject: [PATCH 04/45] working better --- platforms/flatpak/build.sh | 5 +++-- platforms/flatpak/rungame.sh | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100755 platforms/flatpak/rungame.sh diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 255d7de21..e8961fe98 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -35,8 +35,9 @@ fpbuild cmake "$platformdir/../.." \ fpbuild cmake --build . --parallel "$ncpus" fpbuild mkdir -p /app/bin fpbuild strip reminecraftpe -fpbuild mv reminecraftpe /app/bin +fpbuild cp reminecraftpe /app/bin fpbuild cp -a "$(readlink assets)" /app +fpbuild cp "$platformdir/rungame.sh" /app/bin cd .. @@ -47,7 +48,7 @@ flatpak build-finish output \ --device=dri \ --device=input \ --share=network \ - --command=reminecraftpe + --command=rungame.sh flatpak build-export repo output flatpak build-bundle repo ReMCPE.flatpak "$bundleid" diff --git a/platforms/flatpak/rungame.sh b/platforms/flatpak/rungame.sh new file mode 100755 index 000000000..8c166fb31 --- /dev/null +++ b/platforms/flatpak/rungame.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cd /app || exit 1 +exec reminecraftpe From be9f7ae55a45d1277700c4f99e3cf35179c3effe Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 14:49:28 -0500 Subject: [PATCH 05/45] debug --- platforms/flatpak/build.sh | 14 ++++++++++---- platforms/flatpak/rungame.sh | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index e8961fe98..4d2c4e2f2 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -15,6 +15,12 @@ else ncpus="$(sysctl -n hw.ncpu)" fi +if [ -n "$DEBUG" ]; then + build=Debug +else + build=Release +fi + rm -rf build mkdir -p build/work cd build @@ -28,14 +34,14 @@ fpbuild() { } fpbuild cmake "$platformdir/../.." \ - -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_BUILD_TYPE="$build" \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ -DREMCPE_PLATFORM=sdl2 \ -DREMCPE_GFX_API=OGL fpbuild cmake --build . --parallel "$ncpus" -fpbuild mkdir -p /app/bin -fpbuild strip reminecraftpe -fpbuild cp reminecraftpe /app/bin +fpbuild mkdir -p /app/bin /app/libexec +[ -z "$DEBUG" ] && [ -z "$NOSTRIP" ] && fpbuild strip reminecraftpe +fpbuild cp reminecraftpe /app/libexec fpbuild cp -a "$(readlink assets)" /app fpbuild cp "$platformdir/rungame.sh" /app/bin diff --git a/platforms/flatpak/rungame.sh b/platforms/flatpak/rungame.sh index 8c166fb31..75441a6f1 100755 --- a/platforms/flatpak/rungame.sh +++ b/platforms/flatpak/rungame.sh @@ -1,3 +1,3 @@ #!/bin/sh cd /app || exit 1 -exec reminecraftpe +exec ./libexec/reminecraftpe From f38d6d46a0a036747edfd7e967288294ef7aef54 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 14:53:45 -0500 Subject: [PATCH 06/45] fix permission --- platforms/flatpak/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 4d2c4e2f2..fa8c28d02 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -51,6 +51,7 @@ flatpak build-finish output \ --share=ipc \ --socket=fallback-x11 \ --socket=wayland \ + --socket=pulseaudio \ --device=dri \ --device=input \ --share=network \ From 199c7c0f8079d48480ee50084ccbeedc3cc88f71 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 14:56:02 -0500 Subject: [PATCH 07/45] comments --- platforms/flatpak/build.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index fa8c28d02..5154d91ca 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -43,10 +43,18 @@ fpbuild mkdir -p /app/bin /app/libexec [ -z "$DEBUG" ] && [ -z "$NOSTRIP" ] && fpbuild strip reminecraftpe fpbuild cp reminecraftpe /app/libexec fpbuild cp -a "$(readlink assets)" /app +# rungame.sh is just a script that does a cd to the directory with the assets fpbuild cp "$platformdir/rungame.sh" /app/bin cd .. +# permissions given (in order of specification): +# X11 +# Wayland +# Audio +# GPU access (OpenGL) +# Input devices (game controllers) +# Network access flatpak build-finish output \ --share=ipc \ --socket=fallback-x11 \ From 12415109b832ccb078eeeae657b2e86c7fe40675 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 15:06:08 -0500 Subject: [PATCH 08/45] update comment --- platforms/flatpak/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 5154d91ca..b43239734 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -49,9 +49,9 @@ fpbuild cp "$platformdir/rungame.sh" /app/bin cd .. # permissions given (in order of specification): -# X11 +# X11 (when wayland is unavailable) # Wayland -# Audio +# Audio (both input and output) # GPU access (OpenGL) # Input devices (game controllers) # Network access From ee134316c116707a6fba04a35f7f16fc8aef58da Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 15:55:41 -0500 Subject: [PATCH 09/45] arch --- platforms/flatpak/build.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index b43239734..53f9df0d8 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -5,6 +5,9 @@ set -e [ "${0%/*}" = "$0" ] && scriptroot="." || scriptroot="${0%/*}" cd "$scriptroot" +# when cross compiling you must have qemu-user-static installed +arch="${ARCH:-x86_64}" + bundleid='io.github.reminecraftpe' platformdir=$PWD @@ -25,7 +28,7 @@ rm -rf build mkdir -p build/work cd build -flatpak build-init output "$bundleid" org.freedesktop.Sdk org.freedesktop.Platform 25.08 +flatpak build-init output "$bundleid" "org.freedesktop.Sdk/$arch" "org.freedesktop.Platform/$arch" 25.08 cd work @@ -66,4 +69,4 @@ flatpak build-finish output \ --command=rungame.sh flatpak build-export repo output -flatpak build-bundle repo ReMCPE.flatpak "$bundleid" +flatpak build-bundle --arch "$arch" repo "ReMCPE-$arch.flatpak" "$bundleid" From 7073a24dd10c2dc72210458b5f17b235fd1cbea0 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:05:37 -0500 Subject: [PATCH 10/45] allow passing cmake args --- platforms/flatpak/build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 53f9df0d8..f4708fa06 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -40,7 +40,8 @@ fpbuild cmake "$platformdir/../.." \ -DCMAKE_BUILD_TYPE="$build" \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ -DREMCPE_PLATFORM=sdl2 \ - -DREMCPE_GFX_API=OGL + -DREMCPE_GFX_API=OGL \ + "$@" fpbuild cmake --build . --parallel "$ncpus" fpbuild mkdir -p /app/bin /app/libexec [ -z "$DEBUG" ] && [ -z "$NOSTRIP" ] && fpbuild strip reminecraftpe From 72d416c081273fd1c655367eca65479128893ea2 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:07:18 -0500 Subject: [PATCH 11/45] do this instead --- platforms/flatpak/build.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index f4708fa06..64f9082dc 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -39,9 +39,8 @@ fpbuild() { fpbuild cmake "$platformdir/../.." \ -DCMAKE_BUILD_TYPE="$build" \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ - -DREMCPE_PLATFORM=sdl2 \ - -DREMCPE_GFX_API=OGL \ - "$@" + -DREMCPE_PLATFORM="${REMCPE_PLATFORM:-sdl2}" \ + -DREMCPE_GFX_API="${REMCPE_GFX_API:-OGL}" fpbuild cmake --build . --parallel "$ncpus" fpbuild mkdir -p /app/bin /app/libexec [ -z "$DEBUG" ] && [ -z "$NOSTRIP" ] && fpbuild strip reminecraftpe From 429f6276ee05e7a3089024ed483cc1069c0e1078 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:18:05 -0500 Subject: [PATCH 12/45] ccache --- platforms/flatpak/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 64f9082dc..ee0cae45e 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -39,6 +39,8 @@ fpbuild() { fpbuild cmake "$platformdir/../.." \ -DCMAKE_BUILD_TYPE="$build" \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DREMCPE_PLATFORM="${REMCPE_PLATFORM:-sdl2}" \ -DREMCPE_GFX_API="${REMCPE_GFX_API:-OGL}" fpbuild cmake --build . --parallel "$ncpus" From 45986b4957ed5acb92cfaace156f50dea8f1b5c1 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:20:03 -0500 Subject: [PATCH 13/45] allow a different runtime version --- platforms/flatpak/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index ee0cae45e..9d63d4525 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -28,7 +28,7 @@ rm -rf build mkdir -p build/work cd build -flatpak build-init output "$bundleid" "org.freedesktop.Sdk/$arch" "org.freedesktop.Platform/$arch" 25.08 +flatpak build-init output "$bundleid" "org.freedesktop.Sdk/$arch" "org.freedesktop.Platform/$arch" "${FLATPAK_RUNTIME_VERSION:-25.08}" cd work From 0cd7b49fa1c30e7ec4164fa6a3359a329f12a01c Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:24:36 -0500 Subject: [PATCH 14/45] first attempt --- .github/workflows/artifacts.yml | 47 +++++++++++++++------------------ platforms/flatpak/build.sh | 1 - 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index eb0be0c03..47dfeb6ed 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -10,12 +10,18 @@ jobs: fail-fast: false matrix: include: - - name: SDL 2 (OGL) - flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' - packages: 'libsdl2-dev' - - name: SDL 2 (OGL + Shaders) - flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL_SHADERS' - packages: 'libsdl2-dev' + - name: x86_64 SDL 2 (OGL) + gfx: OGL + arch: x86_64 + - name: x86_64 SDL 2 (OGL + Shaders) + gfx: OGL_SHADERS + arch: x86_64 + - name: aarch64 SDL 2 (OGL) + gfx: OGL + arch: aarch64 + - name: aarch64 SDL 2 (OGL + Shaders) + gfx: OGL_SHADERS + arch: aarch64 name: Linux (${{ matrix.name }}) runs-on: ubuntu-24.04 steps: @@ -36,30 +42,19 @@ jobs: - name: Install Dependencies run: | sudo apt-get update - sudo apt-get install --no-install-recommends -y \ - build-essential \ - cmake ninja-build \ - ccache \ - libopenal-dev \ - zlib1g-dev \ - ${{ matrix.packages }} + sudo apt-get install --no-install-recommends -y flatpak + flatpak --user install -y \ + org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ + org.freedesktop.Sdk/${{ matrix.arch }}/25.08 - name: Build - run: | - mkdir build - cd build - cmake .. -GNinja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ - -DCMAKE_C_COMPILER_LAUNCHER=ccache \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - ${{ matrix.flags }} - cmake --build . + run: ./platforms/flatpak/build.sh + env: + ARCH: ${{ matrix.arch }} + REMCPE_GFX_API: ${{ matrix.gfx }} - uses: actions/upload-artifact@v6 with: name: Linux (${{ matrix.name }}) - path: | - build/reminecraftpe - build/assets + path: platforms/flatpak/build/ReMCPE-${{ matrix.arch }}.flatpak - name: Pack cache run: cd ~ && tar cJf ccache.tar.xz .cache/ccache diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 9d63d4525..744cffcb8 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -5,7 +5,6 @@ set -e [ "${0%/*}" = "$0" ] && scriptroot="." || scriptroot="${0%/*}" cd "$scriptroot" -# when cross compiling you must have qemu-user-static installed arch="${ARCH:-x86_64}" bundleid='io.github.reminecraftpe' From fd974169ff77bc0fb52fbc31e6d3a1f91e4719cc Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:25:50 -0500 Subject: [PATCH 15/45] fix flathub --- .github/workflows/artifacts.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 47dfeb6ed..fce75bde9 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -43,6 +43,7 @@ jobs: run: | sudo apt-get update sudo apt-get install --no-install-recommends -y flatpak + flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak --user install -y \ org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ org.freedesktop.Sdk/${{ matrix.arch }}/25.08 From 010a08847c48ddf88b2e7c5ae9eab2445cb44fa0 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:29:40 -0500 Subject: [PATCH 16/45] fix --- .github/workflows/artifacts.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index fce75bde9..be9bc31bf 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -19,9 +19,11 @@ jobs: - name: aarch64 SDL 2 (OGL) gfx: OGL arch: aarch64 + packages: qemu-user-static - name: aarch64 SDL 2 (OGL + Shaders) gfx: OGL_SHADERS arch: aarch64 + packages: qemu-user-static name: Linux (${{ matrix.name }}) runs-on: ubuntu-24.04 steps: @@ -42,7 +44,7 @@ jobs: - name: Install Dependencies run: | sudo apt-get update - sudo apt-get install --no-install-recommends -y flatpak + sudo apt-get install --no-install-recommends -y flatpak ${{ matrix.packages }} flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak --user install -y \ org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ From 6c2668224c009832b8dc00d1af950fa903073fd4 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:37:35 -0500 Subject: [PATCH 17/45] alr man --- platforms/flatpak/build.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 744cffcb8..1a6acd552 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -56,16 +56,19 @@ cd .. # X11 (when wayland is unavailable) # Wayland # Audio (both input and output) -# GPU access (OpenGL) -# Input devices (game controllers) +# Device access (USB, game controllers, GPU, etc)* # Network access +# +# *: Flatpak has --device=dri for GPU access, and --device=input for +# input devices (controllers), which would be enough for us, but it was +# added relatively recently, and older flatpak versions don't understand +# it, so we just do --device=all to make everything work on old systems. flatpak build-finish output \ --share=ipc \ --socket=fallback-x11 \ --socket=wayland \ --socket=pulseaudio \ - --device=dri \ - --device=input \ + --device=all \ --share=network \ --command=rungame.sh From fdd23f875913422d3cb3d1afd47ca4a5c3f4322c Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 16:46:55 -0500 Subject: [PATCH 18/45] nits --- platforms/ios/build.sh | 2 +- platforms/macos/build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/ios/build.sh b/platforms/ios/build.sh index b7df14631..25fd4655c 100755 --- a/platforms/ios/build.sh +++ b/platforms/ios/build.sh @@ -192,7 +192,7 @@ for target in $targets; do -DCMAKE_C_FLAGS="$cflags" \ -DCMAKE_CXX_FLAGS="$cflags" \ -DWERROR="${WERROR:-OFF}" - make -j"$ncpus" + cmake --build . --parallel "$ncpus" cd .. done diff --git a/platforms/macos/build.sh b/platforms/macos/build.sh index f0a77f2ff..10231b987 100755 --- a/platforms/macos/build.sh +++ b/platforms/macos/build.sh @@ -406,7 +406,7 @@ for target in $targets; do -DCMAKE_CXX_FLAGS="$target_cflags" \ -DWERROR="${WERROR:-OFF}" \ "$@" - make -j"$ncpus" + cmake --build . --parallel "$ncpus" cd .. done From ea292e0a5c47308fe6f3afd2f536f3a2c96b5459 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:13:09 -0500 Subject: [PATCH 19/45] i386 flatpak --- .github/workflows/artifacts.yml | 110 ++++++++++++++------------------ 1 file changed, 49 insertions(+), 61 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index be9bc31bf..2066ad3f3 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -61,67 +61,55 @@ jobs: - name: Pack cache run: cd ~ && tar cJf ccache.tar.xz .cache/ccache - # linux32: - # strategy: - # fail-fast: false - # matrix: - # include: - # - name: SDL 2 (OGL) - # flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' - # packages: 'libsdl2-dev:i386' - # - name: SDL 2 (OGL + Shaders) - # flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL_SHADERS' - # packages: 'libsdl2-dev:i386' - # name: Linux 32-bit (${{ matrix.name }}) - # runs-on: ubuntu-24.04 - # steps: - # - name: Get Time - # id: get-time - # run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT - # - uses: actions/cache@v5 - # with: - # path: ~/ccache.tar.xz - # key: linux32-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} - # restore-keys: linux32-artifact-${{ matrix.name }}- - # - name: Unpack cache - # run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true - # - name: Checkout Repository - # uses: actions/checkout@v6 - # with: - # submodules: true - # - name: Install Dependencies - # run: | - # sudo dpkg --add-architecture i386 - # sudo apt-get update - # sudo apt-get install --no-install-recommends -y \ - # build-essential \ - # cmake ninja-build \ - # ccache \ - # gcc-multilib g++-multilib \ - # libopenal-dev:i386 \ - # zlib1g-dev:i386 \ - # ${{ matrix.packages }} - # - name: Build - # run: | - # mkdir build - # cd build - # cmake .. -GNinja \ - # -DCMAKE_BUILD_TYPE=Release \ - # -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ - # -DCMAKE_C_COMPILER_LAUNCHER=ccache \ - # -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - # -DCMAKE_C_FLAGS='-m32' \ - # -DCMAKE_CXX_FLAGS='-m32' \ - # ${{ matrix.flags }} - # cmake --build . - # - uses: actions/upload-artifact@v6 - # with: - # name: Linux 32-bit (${{ matrix.name }}) - # path: | - # build/reminecraftpe - # build/assets - # - name: Pack cache - # run: cd ~ && tar cJf ccache.tar.xz .cache/ccache + linux32: + strategy: + fail-fast: false + matrix: + include: + - name: i386 SDL 2 (OGL) + gfx: OGL + arch: i386 + - name: i386 SDL 2 (OGL + Shaders) + gfx: OGL_SHADERS + arch: i386 + name: Linux (${{ matrix.name }}) + runs-on: ubuntu-24.04 + container: + image: i386/alpine@sha256:fa96b3d13841d2ca2283082d7db1d9df21616117f7cee53912afd8497eb63f3d + steps: + - name: Get Time + id: get-time + run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT + - uses: actions/cache@v5 + with: + path: ~/ccache.tar.xz + key: linux-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} + restore-keys: linux-artifact-${{ matrix.name }}- + - name: Unpack cache + run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true + - name: Checkout Repository + uses: actions/checkout@v6 + with: + submodules: true + - name: Install Dependencies + run: | + apk update + apk add flatpak + flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + flatpak --user install -y \ + org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ + org.freedesktop.Sdk/${{ matrix.arch }}/1.6 + - name: Build + run: ./platforms/flatpak/build.sh + env: + ARCH: ${{ matrix.arch }} + REMCPE_GFX_API: ${{ matrix.gfx }} + - uses: actions/upload-artifact@v6 + with: + name: Linux (${{ matrix.name }}) + path: platforms/flatpak/build/ReMCPE-${{ matrix.arch }}.flatpak + - name: Pack cache + run: cd ~ && tar cJf ccache.tar.xz .cache/ccache macos: strategy: From 701f1b3b9340cbca391d3e3067fbbd77034a79f3 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:18:04 -0500 Subject: [PATCH 20/45] turn off for now --- .github/workflows/artifacts.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 2066ad3f3..c2f0c8586 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -16,14 +16,14 @@ jobs: - name: x86_64 SDL 2 (OGL + Shaders) gfx: OGL_SHADERS arch: x86_64 - - name: aarch64 SDL 2 (OGL) - gfx: OGL - arch: aarch64 - packages: qemu-user-static - - name: aarch64 SDL 2 (OGL + Shaders) - gfx: OGL_SHADERS - arch: aarch64 - packages: qemu-user-static + # - name: aarch64 SDL 2 (OGL) + # gfx: OGL + # arch: aarch64 + # packages: qemu-user-static + # - name: aarch64 SDL 2 (OGL + Shaders) + # gfx: OGL_SHADERS + # arch: aarch64 + # packages: qemu-user-static name: Linux (${{ matrix.name }}) runs-on: ubuntu-24.04 steps: From 35661177ad6312d7c360d6b47d7c5fc4e8c8d8c4 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:27:41 -0500 Subject: [PATCH 21/45] fix maybe --- .github/workflows/artifacts.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index c2f0c8586..ae9eb77f9 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -75,11 +75,19 @@ jobs: name: Linux (${{ matrix.name }}) runs-on: ubuntu-24.04 container: - image: i386/alpine@sha256:fa96b3d13841d2ca2283082d7db1d9df21616117f7cee53912afd8497eb63f3d + image: i386/alpine@3.23 steps: - name: Get Time id: get-time run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT + - name: Install Dependencies + run: | + apk update + apk add flatpak node + flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + flatpak --user install -y \ + org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ + org.freedesktop.Sdk/${{ matrix.arch }}/1.6 - uses: actions/cache@v5 with: path: ~/ccache.tar.xz @@ -91,14 +99,6 @@ jobs: uses: actions/checkout@v6 with: submodules: true - - name: Install Dependencies - run: | - apk update - apk add flatpak - flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak --user install -y \ - org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ - org.freedesktop.Sdk/${{ matrix.arch }}/1.6 - name: Build run: ./platforms/flatpak/build.sh env: From ee3759b337f01a9f3bdd6260a41ba1aee57ff429 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:29:51 -0500 Subject: [PATCH 22/45] maybe --- .github/workflows/artifacts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index ae9eb77f9..d4d556538 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -75,7 +75,7 @@ jobs: name: Linux (${{ matrix.name }}) runs-on: ubuntu-24.04 container: - image: i386/alpine@3.23 + image: i386/alpine:3.23 steps: - name: Get Time id: get-time From 4d135522dc8106a0184e7dcb513c7cfce6fc31d2 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:30:50 -0500 Subject: [PATCH 23/45] fix --- .github/workflows/artifacts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index d4d556538..44bf2e68a 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -83,7 +83,7 @@ jobs: - name: Install Dependencies run: | apk update - apk add flatpak node + apk add flatpak nodejs flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak --user install -y \ org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ From 384d519f550ee7730ad556c18ed0aa0069f7f49f Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:34:52 -0500 Subject: [PATCH 24/45] ok --- .github/workflows/artifacts.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 44bf2e68a..74e5bd118 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -84,6 +84,11 @@ jobs: run: | apk update apk add flatpak nodejs + # bullshit + mkdir -p /__e/node24_alpine/bin + ln -sf $(command -v node) /__e/node24_alpine/bin/node + ln -sf $(command -v npm) /__e/node24_alpine/bin/npm + ln -sf $(command -v npx) /__e/node24_alpine/bin/npx flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak --user install -y \ org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ From a8c0a04002b49d875ead14ca973a4f89a9c4e484 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:35:54 -0500 Subject: [PATCH 25/45] what are you --- .github/workflows/artifacts.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 74e5bd118..283e97ef9 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -86,6 +86,7 @@ jobs: apk add flatpak nodejs # bullshit mkdir -p /__e/node24_alpine/bin + ls -l /__e/node24_alpine/bin/node ln -sf $(command -v node) /__e/node24_alpine/bin/node ln -sf $(command -v npm) /__e/node24_alpine/bin/npm ln -sf $(command -v npx) /__e/node24_alpine/bin/npx From 7eb8d10a627d1ed824926bde347b433ae87d90da Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:37:31 -0500 Subject: [PATCH 26/45] try this --- .github/workflows/artifacts.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 283e97ef9..05d2d0fba 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -86,10 +86,10 @@ jobs: apk add flatpak nodejs # bullshit mkdir -p /__e/node24_alpine/bin - ls -l /__e/node24_alpine/bin/node + rm -f /__e/node24_alpine/bin/node #/__e/node24_alpine/bin/npm /__e/node24_alpine/bin/npx ln -sf $(command -v node) /__e/node24_alpine/bin/node - ln -sf $(command -v npm) /__e/node24_alpine/bin/npm - ln -sf $(command -v npx) /__e/node24_alpine/bin/npx + # ln -sf $(command -v npm) /__e/node24_alpine/bin/npm + # ln -sf $(command -v npx) /__e/node24_alpine/bin/npx flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak --user install -y \ org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ From 42d4a0a1f16cad1a7506e62eb8c962df07fe0c5f Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:38:27 -0500 Subject: [PATCH 27/45] ok --- .github/workflows/artifacts.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 05d2d0fba..bcc5e1139 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -75,7 +75,10 @@ jobs: name: Linux (${{ matrix.name }}) runs-on: ubuntu-24.04 container: - image: i386/alpine:3.23 + image: i386/alpine:3.23 + volumes: + - /tmp:/__e/node24_alpine + #- /tmp:/__e/node20_alpine steps: - name: Get Time id: get-time @@ -86,7 +89,6 @@ jobs: apk add flatpak nodejs # bullshit mkdir -p /__e/node24_alpine/bin - rm -f /__e/node24_alpine/bin/node #/__e/node24_alpine/bin/npm /__e/node24_alpine/bin/npx ln -sf $(command -v node) /__e/node24_alpine/bin/node # ln -sf $(command -v npm) /__e/node24_alpine/bin/npm # ln -sf $(command -v npx) /__e/node24_alpine/bin/npx From 2da55ea30deebbcbb31062a6f0077133758875a5 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:39:46 -0500 Subject: [PATCH 28/45] fix --- .github/workflows/artifacts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index bcc5e1139..523f62daa 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -86,7 +86,7 @@ jobs: - name: Install Dependencies run: | apk update - apk add flatpak nodejs + apk add flatpak nodejs git # bullshit mkdir -p /__e/node24_alpine/bin ln -sf $(command -v node) /__e/node24_alpine/bin/node From 897ad74574d25fca2690020d236deb7f7c1da432 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 17:41:21 -0500 Subject: [PATCH 29/45] fix --- .github/workflows/artifacts.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 523f62daa..747f9042e 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -78,7 +78,6 @@ jobs: image: i386/alpine:3.23 volumes: - /tmp:/__e/node24_alpine - #- /tmp:/__e/node20_alpine steps: - name: Get Time id: get-time @@ -90,8 +89,6 @@ jobs: # bullshit mkdir -p /__e/node24_alpine/bin ln -sf $(command -v node) /__e/node24_alpine/bin/node - # ln -sf $(command -v npm) /__e/node24_alpine/bin/npm - # ln -sf $(command -v npx) /__e/node24_alpine/bin/npx flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak --user install -y \ org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ @@ -112,6 +109,7 @@ jobs: env: ARCH: ${{ matrix.arch }} REMCPE_GFX_API: ${{ matrix.gfx }} + FLATPAK_RUNTIME_VERSION: 1.6 - uses: actions/upload-artifact@v6 with: name: Linux (${{ matrix.name }}) From 39e4a60d8ff656b85d05ac457871f6a704584919 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 19:37:54 -0500 Subject: [PATCH 30/45] i386 flatpak, prolly wont use it --- .github/workflows/artifacts.yml | 56 -------------------------- platforms/flatpak/build.sh | 65 ++++++++++++++++++++++++++----- platforms/sdl/sdl2/CMakeLists.txt | 2 +- 3 files changed, 56 insertions(+), 67 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 747f9042e..6e399194f 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -61,62 +61,6 @@ jobs: - name: Pack cache run: cd ~ && tar cJf ccache.tar.xz .cache/ccache - linux32: - strategy: - fail-fast: false - matrix: - include: - - name: i386 SDL 2 (OGL) - gfx: OGL - arch: i386 - - name: i386 SDL 2 (OGL + Shaders) - gfx: OGL_SHADERS - arch: i386 - name: Linux (${{ matrix.name }}) - runs-on: ubuntu-24.04 - container: - image: i386/alpine:3.23 - volumes: - - /tmp:/__e/node24_alpine - steps: - - name: Get Time - id: get-time - run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT - - name: Install Dependencies - run: | - apk update - apk add flatpak nodejs git - # bullshit - mkdir -p /__e/node24_alpine/bin - ln -sf $(command -v node) /__e/node24_alpine/bin/node - flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak --user install -y \ - org.freedesktop.Platform/${{ matrix.arch }}/1.6 \ - org.freedesktop.Sdk/${{ matrix.arch }}/1.6 - - uses: actions/cache@v5 - with: - path: ~/ccache.tar.xz - key: linux-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} - restore-keys: linux-artifact-${{ matrix.name }}- - - name: Unpack cache - run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true - - name: Checkout Repository - uses: actions/checkout@v6 - with: - submodules: true - - name: Build - run: ./platforms/flatpak/build.sh - env: - ARCH: ${{ matrix.arch }} - REMCPE_GFX_API: ${{ matrix.gfx }} - FLATPAK_RUNTIME_VERSION: 1.6 - - uses: actions/upload-artifact@v6 - with: - name: Linux (${{ matrix.name }}) - path: platforms/flatpak/build/ReMCPE-${{ matrix.arch }}.flatpak - - name: Pack cache - run: cd ~ && tar cJf ccache.tar.xz .cache/ccache - macos: strategy: fail-fast: false diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 1a6acd552..18e8f3c9a 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -11,6 +11,8 @@ bundleid='io.github.reminecraftpe' platformdir=$PWD +workdir="$PWD/build/work" + if command -v nproc >/dev/null; then ncpus="$(nproc)" else @@ -23,34 +25,77 @@ else build=Release fi -rm -rf build -mkdir -p build/work +rm -rf build/output build/work/build +mkdir -p build/work/build cd build -flatpak build-init output "$bundleid" "org.freedesktop.Sdk/$arch" "org.freedesktop.Platform/$arch" "${FLATPAK_RUNTIME_VERSION:-25.08}" +runtime="${FLATPAK_RUNTIME_VERSION:-25.08}" +[ "$ARCH" = 'i386' ] && runtime='1.6' + +flatpak build-init output "$bundleid" "org.freedesktop.Sdk/$arch" "org.freedesktop.Platform/$arch" "$runtime" cd work fpbuild() { - flatpak build ../output "$@" + flatpak build ../../output "$@" } -fpbuild cmake "$platformdir/../.." \ +cmake=cmake +set -- -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON + +toolchainver=2 +if [ "$ARCH" = 'i386' ]; then + if [ "$(cat toolchain/toolchainver 2>/dev/null)" != "$toolchainver" ]; then + printf '\nBuilding i386 toolchain...\n\n' + + cmake_version='4.2.3' + wget -O- "https://github.com/Kitware/CMake/archive/refs/tags/v$cmake_version.tar.gz" | tar -xz + cd "CMake-$cmake_version" + fpbuild ./bootstrap \ + --prefix="$workdir/toolchain" \ + --parallel="$ncpus" \ + --enable-ccache \ + --system-zlib \ + --system-bzip2 \ + --system-curl \ + --system-expat \ + --system-liblzma + fpbuild make -j"$ncpus" + fpbuild make install/strip -j"$ncpus" + cd .. + rm -rf "CMake-$cmake_version" + + rm -rf toolchain/doc share/emacs share/vim share/bash-completion + + printf '%s' "$toolchainver" > toolchain/toolchainver + fi + + set -- \ + -DREMCPE_VENDORED_SDL2=ON \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ + + cmake="$workdir/toolchain/bin/cmake" +fi + +cd build +fpbuild "$cmake" "$platformdir/../.." \ -DCMAKE_BUILD_TYPE="$build" \ - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DREMCPE_PLATFORM="${REMCPE_PLATFORM:-sdl2}" \ - -DREMCPE_GFX_API="${REMCPE_GFX_API:-OGL}" -fpbuild cmake --build . --parallel "$ncpus" + -DREMCPE_GFX_API="${REMCPE_GFX_API:-OGL}" \ + "$@" +fpbuild "$cmake" --build . --parallel "$ncpus" fpbuild mkdir -p /app/bin /app/libexec -[ -z "$DEBUG" ] && [ -z "$NOSTRIP" ] && fpbuild strip reminecraftpe +[ -z "$DEBUG" ] && [ -z "$NOSTRIP" ] && + fpbuild strip reminecraftpe fpbuild cp reminecraftpe /app/libexec fpbuild cp -a "$(readlink assets)" /app # rungame.sh is just a script that does a cd to the directory with the assets fpbuild cp "$platformdir/rungame.sh" /app/bin -cd .. +cd ../.. # permissions given (in order of specification): # X11 (when wayland is unavailable) diff --git a/platforms/sdl/sdl2/CMakeLists.txt b/platforms/sdl/sdl2/CMakeLists.txt index f575bacfa..86bdb241c 100644 --- a/platforms/sdl/sdl2/CMakeLists.txt +++ b/platforms/sdl/sdl2/CMakeLists.txt @@ -39,7 +39,7 @@ if(ANDROID OR REMCPE_WIN32) set_target_properties(SDL2 PROPERTIES CXX_STANDARD 11) target_link_libraries(SDL INTERFACE SDL2::SDL2) target_compile_options(SDL2 PRIVATE -w) -elseif(APPLE) +elseif(APPLE OR REMCPE_VENDORED_SDL2) # Use Vendored SDL2 (explicitly static) add_subdirectory(../../../thirdparty/SDL2/src SDL EXCLUDE_FROM_ALL) set_target_properties(SDL2-static PROPERTIES CXX_STANDARD 11) From ad60e2422e84a9130789768a01269d3d5e3d37a0 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 19:48:37 -0500 Subject: [PATCH 31/45] no way its taht easy --- .github/workflows/artifacts.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 6e399194f..b53748787 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -13,19 +13,21 @@ jobs: - name: x86_64 SDL 2 (OGL) gfx: OGL arch: x86_64 + runner: ubuntu-24.04 - name: x86_64 SDL 2 (OGL + Shaders) gfx: OGL_SHADERS arch: x86_64 - # - name: aarch64 SDL 2 (OGL) - # gfx: OGL - # arch: aarch64 - # packages: qemu-user-static - # - name: aarch64 SDL 2 (OGL + Shaders) - # gfx: OGL_SHADERS - # arch: aarch64 - # packages: qemu-user-static + runner: ubuntu-24.04 + - name: aarch64 SDL 2 (OGL) + gfx: OGL + arch: aarch64 + runner: ubuntu-24.04-arm + - name: aarch64 SDL 2 (OGL + Shaders) + gfx: OGL_SHADERS + arch: aarch64 + runner: ubuntu-24.04-arm name: Linux (${{ matrix.name }}) - runs-on: ubuntu-24.04 + runs-on: ${{ matrix.runner }} steps: - name: Get Time id: get-time @@ -44,7 +46,7 @@ jobs: - name: Install Dependencies run: | sudo apt-get update - sudo apt-get install --no-install-recommends -y flatpak ${{ matrix.packages }} + sudo apt-get install --no-install-recommends -y flatpak flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo flatpak --user install -y \ org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ From 1865ea5c5d27ae6e1d476bc22f6b2287c9f76817 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 19:54:46 -0500 Subject: [PATCH 32/45] a --- .github/workflows/artifacts.yml | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index b53748787..e2b605cc4 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -63,6 +63,68 @@ jobs: - name: Pack cache run: cd ~ && tar cJf ccache.tar.xz .cache/ccache + # linux32: + # strategy: + # fail-fast: false + # matrix: + # include: + # - name: SDL 2 (OGL) + # flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' + # packages: 'libsdl2-dev:i386' + # - name: SDL 2 (OGL + Shaders) + # flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL_SHADERS' + # packages: 'libsdl2-dev:i386' + # name: Linux 32-bit (${{ matrix.name }}) + # runs-on: ubuntu-24.04 + # steps: + # - name: Get Time + # id: get-time + # run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT + # - uses: actions/cache@v5 + # with: + # path: ~/ccache.tar.xz + # key: linux32-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} + # restore-keys: linux32-artifact-${{ matrix.name }}- + # - name: Unpack cache + # run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true + # - name: Checkout Repository + # uses: actions/checkout@v6 + # with: + # submodules: true + # - name: Install Dependencies + # run: | + # sudo dpkg --add-architecture i386 + # sudo apt-get update + # sudo apt-get install --no-install-recommends -y \ + # build-essential \ + # cmake ninja-build \ + # ccache \ + # gcc-multilib g++-multilib \ + # libopenal-dev:i386 \ + # zlib1g-dev:i386 \ + # ${{ matrix.packages }} + # - name: Build + # run: | + # mkdir build + # cd build + # cmake .. -GNinja \ + # -DCMAKE_BUILD_TYPE=Release \ + # -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + # -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + # -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + # -DCMAKE_C_FLAGS='-m32' \ + # -DCMAKE_CXX_FLAGS='-m32' \ + # ${{ matrix.flags }} + # cmake --build . + # - uses: actions/upload-artifact@v6 + # with: + # name: Linux 32-bit (${{ matrix.name }}) + # path: | + # build/reminecraftpe + # build/assets + # - name: Pack cache + # run: cd ~ && tar cJf ccache.tar.xz .cache/ccache + macos: strategy: fail-fast: false From ee4b06394d3d6b20465b5ea629ea3e1c7ee1df81 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 20:17:53 -0500 Subject: [PATCH 33/45] release flatpak --- .github/workflows/artifacts.yml | 1 + .github/workflows/publish.yml | 44 ++++++++++++++------------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index e2b605cc4..bde139dc6 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -54,6 +54,7 @@ jobs: - name: Build run: ./platforms/flatpak/build.sh env: + NOSTRIP: 1 ARCH: ${{ matrix.arch }} REMCPE_GFX_API: ${{ matrix.gfx }} - uses: actions/upload-artifact@v6 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a7d948726..57232085b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,11 +10,16 @@ jobs: fail-fast: false matrix: include: - - name: SDL 2 - flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' - packages: 'libsdl2-dev' + - name: x86_64 SDL 2 (OGL) + gfx: OGL + arch: x86_64 + runner: ubuntu-24.04 + - name: aarch64 SDL 2 (OGL) + gfx: OGL + arch: aarch64 + runner: ubuntu-24.04-arm name: Linux (${{ matrix.name }}) - runs-on: ubuntu-24.04 + runs-on: ${{ matrix.runner }} steps: - name: Checkout Repository uses: actions/checkout@v6 @@ -23,32 +28,21 @@ jobs: - name: Install Dependencies run: | sudo apt-get update - sudo apt-get install --no-install-recommends -y \ - build-essential \ - cmake ninja-build \ - libopenal-dev \ - zlib1g-dev \ - ${{ matrix.packages }} + sudo apt-get install --no-install-recommends -y flatpak + flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + flatpak --user install -y \ + org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ + org.freedesktop.Sdk/${{ matrix.arch }}/25.08 - name: Build - run: | - mkdir build - cd build - cmake .. -GNinja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ - ${{ matrix.flags }} - cmake --build . - strip reminecraftpe - - name: Pack release - run: | - mkdir ReMCPE - mv game/assets build/reminecraftpe ReMCPE - tar -czf ReMCPE-Linux-x86_64.tar.gz ReMCPE + run: ./platforms/flatpak/build.sh + env: + ARCH: ${{ matrix.arch }} + REMCPE_GFX_API: ${{ matrix.gfx }} - uses: alexellis/upload-assets@0.4.1 env: GITHUB_TOKEN: ${{ github.token }} with: - asset_paths: '["ReMCPE-Linux-x86_64.tar.gz"]' + asset_paths: '["platforms/flatpak/build/ReMCPE-${{ matrix.arch }}.flatpak"]' # linux32: # strategy: From 6631766a371785e7b52d12effec841da0f2871a1 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 21:01:35 -0500 Subject: [PATCH 34/45] add .desktop file and icons --- game/assets/app/icons/mipmap/icon_128x128.png | Bin 0 -> 22603 bytes game/assets/app/icons/mipmap/icon_256x256.png | Bin 0 -> 82348 bytes platforms/flatpak/build.sh | 7 ++++++- .../flatpak/io.github.reminecraftpe.desktop | 10 ++++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 game/assets/app/icons/mipmap/icon_128x128.png create mode 100644 game/assets/app/icons/mipmap/icon_256x256.png create mode 100644 platforms/flatpak/io.github.reminecraftpe.desktop diff --git a/game/assets/app/icons/mipmap/icon_128x128.png b/game/assets/app/icons/mipmap/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..747afe9ecfdda0182633362fd20ded59a0fd6e22 GIT binary patch literal 22603 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 Date: Wed, 25 Feb 2026 21:13:15 -0500 Subject: [PATCH 35/45] shorten --- platforms/flatpak/io.github.reminecraftpe.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/flatpak/io.github.reminecraftpe.desktop b/platforms/flatpak/io.github.reminecraftpe.desktop index d522a0058..b895c6fa8 100644 --- a/platforms/flatpak/io.github.reminecraftpe.desktop +++ b/platforms/flatpak/io.github.reminecraftpe.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Name=ReMinecraftPE GenericName=ReMinecraftPE -Comment=Open source reverse engineering of Minecraft Pocket Edition with extra features +Comment=Decompilation of Minecraft Pocket Edition with extra features Exec=rungame.sh Icon=io.github.reminecraftpe Terminal=false From 1c74fc41ed6b0ee32492c946a9af10692a9d1e07 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Wed, 25 Feb 2026 22:14:34 -0500 Subject: [PATCH 36/45] bin variable --- platforms/flatpak/build.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/platforms/flatpak/build.sh b/platforms/flatpak/build.sh index 5de7c5f26..d5ea22bf9 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/flatpak/build.sh @@ -6,6 +6,8 @@ set -e cd "$scriptroot" arch="${ARCH:-x86_64}" +# Must be kept in sync with the cmake executable name +bin='reminecraftpe' bundleid='io.github.reminecraftpe' @@ -89,8 +91,8 @@ fpbuild "$cmake" "$platformdir/../.." \ fpbuild "$cmake" --build . --parallel "$ncpus" fpbuild mkdir -p /app/bin /app/libexec /app/share/applications [ -z "$DEBUG" ] && [ -z "$NOSTRIP" ] && - fpbuild strip reminecraftpe -fpbuild cp reminecraftpe /app/libexec + fpbuild strip "$bin" +fpbuild cp "$bin" /app/libexec fpbuild cp -a "$(readlink assets)" /app # rungame.sh is just a script that does a cd to the directory with the assets fpbuild cp "$platformdir/rungame.sh" /app/bin From 67d2aebd70753913285d69199cda542c62afabe7 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 10:42:13 -0500 Subject: [PATCH 37/45] dont need this --- platforms/macos/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/platforms/macos/build.sh b/platforms/macos/build.sh index 10231b987..4ecc53350 100755 --- a/platforms/macos/build.sh +++ b/platforms/macos/build.sh @@ -269,6 +269,7 @@ if [ "$(cat toolchain-ppc/toolchainver 2>/dev/null)" != "$ppctoolchainver" ]; th cd ../.. rm -rf "gcc-$gcc_version" + rm -rf toolchain-ppc/share printf '%s' "$ppctoolchainver" > toolchain-ppc/toolchainver outdated_ppc_toolchain=1 fi From befe3e61ba41fc5230996bb5f0b32a84a7421948 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:10:10 -0500 Subject: [PATCH 38/45] review --- .github/workflows/artifacts.yml | 86 +++++++++++++++++-- platforms/flatpak/.gitignore | 1 - platforms/linux/.gitignore | 1 + .../build.sh => linux/build-flatpak.sh} | 8 +- .../io.github.reminecraftpe.desktop | 0 platforms/{flatpak => linux}/rungame.sh | 0 6 files changed, 82 insertions(+), 14 deletions(-) delete mode 100644 platforms/flatpak/.gitignore create mode 100644 platforms/linux/.gitignore rename platforms/{flatpak/build.sh => linux/build-flatpak.sh} (96%) rename platforms/{flatpak => linux}/io.github.reminecraftpe.desktop (100%) rename platforms/{flatpak => linux}/rungame.sh (100%) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index bde139dc6..87a033582 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -11,22 +11,90 @@ jobs: matrix: include: - name: x86_64 SDL 2 (OGL) - gfx: OGL + flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' + packages: 'libsdl2-dev' + runner: ubuntu-24.04 + - name: x86_64 SDL 2 (OGL + Shaders) + flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL_SHADERS' + packages: 'libsdl2-dev' + runner: ubuntu-24.04 + - name: aarch64 SDL 2 (OGL) + flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' + packages: 'libsdl2-dev' + runner: ubuntu-24.04-arm + - name: aarch64 SDL 2 (OGL + Shaders) + flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL_SHADERS' + packages: 'libsdl2-dev' + runner: ubuntu-24.04-arm + name: Linux (${{ matrix.name }}) + runs-on: ${{ matrix.runner }} + steps: + - name: Get Time + id: get-time + run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT + - uses: actions/cache@v5 + with: + path: ~/ccache.tar.xz + key: linux-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} + restore-keys: linux-artifact-${{ matrix.name }}- + - name: Unpack cache + run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true + - name: Checkout Repository + uses: actions/checkout@v6 + with: + submodules: true + - name: Install Dependencies + run: | + sudo apt-get update + sudo apt-get install --no-install-recommends -y \ + build-essential \ + cmake ninja-build \ + ccache \ + libopenal-dev \ + zlib1g-dev \ + ${{ matrix.packages }} + - name: Build + run: | + mkdir build + cd build + cmake .. -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + ${{ matrix.flags }} + cmake --build . + - uses: actions/upload-artifact@v6 + with: + name: Linux (${{ matrix.name }}) + path: | + build/reminecraftpe + build/assets + - name: Pack cache + run: cd ~ && tar cJf ccache.tar.xz .cache/ccache + + flatpak: + strategy: + fail-fast: false + matrix: + include: + - name: x86_64 SDL 2 (OGL) + gfx-api: OGL arch: x86_64 runner: ubuntu-24.04 - name: x86_64 SDL 2 (OGL + Shaders) - gfx: OGL_SHADERS + gfx-api: OGL_SHADERS arch: x86_64 runner: ubuntu-24.04 - name: aarch64 SDL 2 (OGL) - gfx: OGL + gfx-api: OGL arch: aarch64 runner: ubuntu-24.04-arm - name: aarch64 SDL 2 (OGL + Shaders) - gfx: OGL_SHADERS + gfx-api: OGL_SHADERS arch: aarch64 runner: ubuntu-24.04-arm - name: Linux (${{ matrix.name }}) + name: Flatpak (${{ matrix.name }}) runs-on: ${{ matrix.runner }} steps: - name: Get Time @@ -35,8 +103,8 @@ jobs: - uses: actions/cache@v5 with: path: ~/ccache.tar.xz - key: linux-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} - restore-keys: linux-artifact-${{ matrix.name }}- + key: flatpak-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} + restore-keys: flatpak-artifact-${{ matrix.name }}- - name: Unpack cache run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true - name: Checkout Repository @@ -52,7 +120,7 @@ jobs: org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ org.freedesktop.Sdk/${{ matrix.arch }}/25.08 - name: Build - run: ./platforms/flatpak/build.sh + run: ./platforms/linux/build-flatpak.sh env: NOSTRIP: 1 ARCH: ${{ matrix.arch }} @@ -60,7 +128,7 @@ jobs: - uses: actions/upload-artifact@v6 with: name: Linux (${{ matrix.name }}) - path: platforms/flatpak/build/ReMCPE-${{ matrix.arch }}.flatpak + path: platforms/linux/build-flatpak/ReMCPE-${{ matrix.arch }}.flatpak - name: Pack cache run: cd ~ && tar cJf ccache.tar.xz .cache/ccache diff --git a/platforms/flatpak/.gitignore b/platforms/flatpak/.gitignore deleted file mode 100644 index 796b96d1c..000000000 --- a/platforms/flatpak/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/platforms/linux/.gitignore b/platforms/linux/.gitignore new file mode 100644 index 000000000..b7be2f2a7 --- /dev/null +++ b/platforms/linux/.gitignore @@ -0,0 +1 @@ +/build-flatpak diff --git a/platforms/flatpak/build.sh b/platforms/linux/build-flatpak.sh similarity index 96% rename from platforms/flatpak/build.sh rename to platforms/linux/build-flatpak.sh index d5ea22bf9..b38934880 100755 --- a/platforms/flatpak/build.sh +++ b/platforms/linux/build-flatpak.sh @@ -13,7 +13,7 @@ bundleid='io.github.reminecraftpe' platformdir=$PWD -workdir="$PWD/build/work" +workdir="$PWD/build-flatpak/work" if command -v nproc >/dev/null; then ncpus="$(nproc)" @@ -27,9 +27,9 @@ else build=Release fi -rm -rf build/output build/work/build -mkdir -p build/work/build -cd build +rm -rf build-flatpak/output build-flatpak/work/build +mkdir -p build-flatpak/work/build +cd build-flatpak runtime="${FLATPAK_RUNTIME_VERSION:-25.08}" [ "$ARCH" = 'i386' ] && runtime='1.6' diff --git a/platforms/flatpak/io.github.reminecraftpe.desktop b/platforms/linux/io.github.reminecraftpe.desktop similarity index 100% rename from platforms/flatpak/io.github.reminecraftpe.desktop rename to platforms/linux/io.github.reminecraftpe.desktop diff --git a/platforms/flatpak/rungame.sh b/platforms/linux/rungame.sh similarity index 100% rename from platforms/flatpak/rungame.sh rename to platforms/linux/rungame.sh From 0549b9bbc04cd842aece5b0aaf905acb8313011e Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:14:22 -0500 Subject: [PATCH 39/45] fix --- .github/workflows/artifacts.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 87a033582..d35ad51da 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -127,7 +127,7 @@ jobs: REMCPE_GFX_API: ${{ matrix.gfx }} - uses: actions/upload-artifact@v6 with: - name: Linux (${{ matrix.name }}) + name: Flatpak (${{ matrix.name }}) path: platforms/linux/build-flatpak/ReMCPE-${{ matrix.arch }}.flatpak - name: Pack cache run: cd ~ && tar cJf ccache.tar.xz .cache/ccache From 5ed1d417f9291456d2fee0dfe96cad4e9cdbf12c Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:26:59 -0500 Subject: [PATCH 40/45] do it here too --- .github/workflows/publish.yml | 60 ++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 57232085b..cdde7dc78 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,15 +10,65 @@ jobs: fail-fast: false matrix: include: - - name: x86_64 SDL 2 (OGL) + - name: x86_64 SDL 2 + flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' + packages: 'libsdl2-dev' + runner: ubuntu-24.04 + - name: aarch64 SDL 2 + flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' + packages: 'libsdl2-dev' + runner: ubuntu-24.04-arm + name: Linux (${{ matrix.name }}) + runs-on: ${{ matrix.runner }} + steps: + - name: Checkout Repository + uses: actions/checkout@v6 + with: + submodules: true + - name: Install Dependencies + run: | + sudo apt-get update + sudo apt-get install --no-install-recommends -y \ + build-essential \ + cmake ninja-build \ + libopenal-dev \ + zlib1g-dev \ + ${{ matrix.packages }} + - name: Build + run: | + mkdir build + cd build + cmake .. -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ + ${{ matrix.flags }} + cmake --build . + strip reminecraftpe + - name: Pack release + run: | + mkdir ReMCPE + mv game/assets build/reminecraftpe ReMCPE + tar -czf ReMCPE-Linux-x86_64.tar.gz ReMCPE + - uses: alexellis/upload-assets@0.4.1 + env: + GITHUB_TOKEN: ${{ github.token }} + with: + asset_paths: '["ReMCPE-Linux-x86_64.tar.gz"]' + + flatpak: + strategy: + fail-fast: false + matrix: + include: + - name: x86_64 SDL 2 gfx: OGL arch: x86_64 runner: ubuntu-24.04 - - name: aarch64 SDL 2 (OGL) + - name: aarch64 SDL 2 gfx: OGL arch: aarch64 runner: ubuntu-24.04-arm - name: Linux (${{ matrix.name }}) + name: Flatpak (${{ matrix.name }}) runs-on: ${{ matrix.runner }} steps: - name: Checkout Repository @@ -34,7 +84,7 @@ jobs: org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ org.freedesktop.Sdk/${{ matrix.arch }}/25.08 - name: Build - run: ./platforms/flatpak/build.sh + run: ./platforms/linux/build-flatpak.sh env: ARCH: ${{ matrix.arch }} REMCPE_GFX_API: ${{ matrix.gfx }} @@ -42,7 +92,7 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} with: - asset_paths: '["platforms/flatpak/build/ReMCPE-${{ matrix.arch }}.flatpak"]' + asset_paths: '["platforms/linux/build-flatpak/ReMCPE-${{ matrix.arch }}.flatpak"]' # linux32: # strategy: From a4a2c63a3912fce183543259db1f2e0fa1c9f768 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:31:43 -0500 Subject: [PATCH 41/45] change description --- platforms/linux/io.github.reminecraftpe.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/linux/io.github.reminecraftpe.desktop b/platforms/linux/io.github.reminecraftpe.desktop index b895c6fa8..0a6ce3d99 100644 --- a/platforms/linux/io.github.reminecraftpe.desktop +++ b/platforms/linux/io.github.reminecraftpe.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Name=ReMinecraftPE GenericName=ReMinecraftPE -Comment=Decompilation of Minecraft Pocket Edition with extra features +Comment=A custom experience based on Minecraft PE as of 2011 Exec=rungame.sh Icon=io.github.reminecraftpe Terminal=false From 90a41da230568d70366ee31394093f061fae43b1 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:33:15 -0500 Subject: [PATCH 42/45] fix --- .github/workflows/publish.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cdde7dc78..2e515cd04 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -14,10 +14,12 @@ jobs: flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' packages: 'libsdl2-dev' runner: ubuntu-24.04 + arch: x86_64 - name: aarch64 SDL 2 flags: '-DREMCPE_PLATFORM=sdl2 -DREMCPE_GFX_API=OGL' packages: 'libsdl2-dev' runner: ubuntu-24.04-arm + arch: aarch64 name: Linux (${{ matrix.name }}) runs-on: ${{ matrix.runner }} steps: @@ -53,7 +55,7 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} with: - asset_paths: '["ReMCPE-Linux-x86_64.tar.gz"]' + asset_paths: '["ReMCPE-Linux-${{ matrix.arch }}.tar.gz"]' flatpak: strategy: From 90b3262d140d1f060af5b437c7ef44b12c723335 Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:36:54 -0500 Subject: [PATCH 43/45] bruh --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2e515cd04..5ac78098a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -50,7 +50,7 @@ jobs: run: | mkdir ReMCPE mv game/assets build/reminecraftpe ReMCPE - tar -czf ReMCPE-Linux-x86_64.tar.gz ReMCPE + tar -czf ReMCPE-Linux-${{ matrix.arch }}.tar.gz ReMCPE - uses: alexellis/upload-assets@0.4.1 env: GITHUB_TOKEN: ${{ github.token }} From 042a8a20965dde484e13a8a312c437a1b69a604a Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:42:15 -0500 Subject: [PATCH 44/45] name --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5ac78098a..d87e9104d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -94,7 +94,7 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} with: - asset_paths: '["platforms/linux/build-flatpak/ReMCPE-${{ matrix.arch }}.flatpak"]' + asset_paths: '["platforms/linux/build-flatpak/ReMCPE-Linux-${{ matrix.arch }}.flatpak"]' # linux32: # strategy: From ffdbb7589b94dbca1f41aad2f986fce8389c490e Mon Sep 17 00:00:00 2001 From: Un1q32 Date: Thu, 26 Feb 2026 20:43:26 -0500 Subject: [PATCH 45/45] comment flatpak build workflows --- .github/workflows/artifacts.yml | 116 ++++++++++++++++---------------- .github/workflows/publish.yml | 76 ++++++++++----------- 2 files changed, 96 insertions(+), 96 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index d35ad51da..86a791961 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -73,64 +73,64 @@ jobs: - name: Pack cache run: cd ~ && tar cJf ccache.tar.xz .cache/ccache - flatpak: - strategy: - fail-fast: false - matrix: - include: - - name: x86_64 SDL 2 (OGL) - gfx-api: OGL - arch: x86_64 - runner: ubuntu-24.04 - - name: x86_64 SDL 2 (OGL + Shaders) - gfx-api: OGL_SHADERS - arch: x86_64 - runner: ubuntu-24.04 - - name: aarch64 SDL 2 (OGL) - gfx-api: OGL - arch: aarch64 - runner: ubuntu-24.04-arm - - name: aarch64 SDL 2 (OGL + Shaders) - gfx-api: OGL_SHADERS - arch: aarch64 - runner: ubuntu-24.04-arm - name: Flatpak (${{ matrix.name }}) - runs-on: ${{ matrix.runner }} - steps: - - name: Get Time - id: get-time - run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT - - uses: actions/cache@v5 - with: - path: ~/ccache.tar.xz - key: flatpak-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} - restore-keys: flatpak-artifact-${{ matrix.name }}- - - name: Unpack cache - run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true - - name: Checkout Repository - uses: actions/checkout@v6 - with: - submodules: true - - name: Install Dependencies - run: | - sudo apt-get update - sudo apt-get install --no-install-recommends -y flatpak - flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak --user install -y \ - org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ - org.freedesktop.Sdk/${{ matrix.arch }}/25.08 - - name: Build - run: ./platforms/linux/build-flatpak.sh - env: - NOSTRIP: 1 - ARCH: ${{ matrix.arch }} - REMCPE_GFX_API: ${{ matrix.gfx }} - - uses: actions/upload-artifact@v6 - with: - name: Flatpak (${{ matrix.name }}) - path: platforms/linux/build-flatpak/ReMCPE-${{ matrix.arch }}.flatpak - - name: Pack cache - run: cd ~ && tar cJf ccache.tar.xz .cache/ccache + # flatpak: + # strategy: + # fail-fast: false + # matrix: + # include: + # - name: x86_64 SDL 2 (OGL) + # gfx-api: OGL + # arch: x86_64 + # runner: ubuntu-24.04 + # - name: x86_64 SDL 2 (OGL + Shaders) + # gfx-api: OGL_SHADERS + # arch: x86_64 + # runner: ubuntu-24.04 + # - name: aarch64 SDL 2 (OGL) + # gfx-api: OGL + # arch: aarch64 + # runner: ubuntu-24.04-arm + # - name: aarch64 SDL 2 (OGL + Shaders) + # gfx-api: OGL_SHADERS + # arch: aarch64 + # runner: ubuntu-24.04-arm + # name: Flatpak (${{ matrix.name }}) + # runs-on: ${{ matrix.runner }} + # steps: + # - name: Get Time + # id: get-time + # run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT + # - uses: actions/cache@v5 + # with: + # path: ~/ccache.tar.xz + # key: flatpak-artifact-${{ matrix.name }}-${{ steps.get-time.outputs.time }} + # restore-keys: flatpak-artifact-${{ matrix.name }}- + # - name: Unpack cache + # run: cd ~ && [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true + # - name: Checkout Repository + # uses: actions/checkout@v6 + # with: + # submodules: true + # - name: Install Dependencies + # run: | + # sudo apt-get update + # sudo apt-get install --no-install-recommends -y flatpak + # flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + # flatpak --user install -y \ + # org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ + # org.freedesktop.Sdk/${{ matrix.arch }}/25.08 + # - name: Build + # run: ./platforms/linux/build-flatpak.sh + # env: + # NOSTRIP: 1 + # ARCH: ${{ matrix.arch }} + # REMCPE_GFX_API: ${{ matrix.gfx }} + # - uses: actions/upload-artifact@v6 + # with: + # name: Flatpak (${{ matrix.name }}) + # path: platforms/linux/build-flatpak/ReMCPE-${{ matrix.arch }}.flatpak + # - name: Pack cache + # run: cd ~ && tar cJf ccache.tar.xz .cache/ccache # linux32: # strategy: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d87e9104d..11be0162e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -57,44 +57,44 @@ jobs: with: asset_paths: '["ReMCPE-Linux-${{ matrix.arch }}.tar.gz"]' - flatpak: - strategy: - fail-fast: false - matrix: - include: - - name: x86_64 SDL 2 - gfx: OGL - arch: x86_64 - runner: ubuntu-24.04 - - name: aarch64 SDL 2 - gfx: OGL - arch: aarch64 - runner: ubuntu-24.04-arm - name: Flatpak (${{ matrix.name }}) - runs-on: ${{ matrix.runner }} - steps: - - name: Checkout Repository - uses: actions/checkout@v6 - with: - submodules: true - - name: Install Dependencies - run: | - sudo apt-get update - sudo apt-get install --no-install-recommends -y flatpak - flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo - flatpak --user install -y \ - org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ - org.freedesktop.Sdk/${{ matrix.arch }}/25.08 - - name: Build - run: ./platforms/linux/build-flatpak.sh - env: - ARCH: ${{ matrix.arch }} - REMCPE_GFX_API: ${{ matrix.gfx }} - - uses: alexellis/upload-assets@0.4.1 - env: - GITHUB_TOKEN: ${{ github.token }} - with: - asset_paths: '["platforms/linux/build-flatpak/ReMCPE-Linux-${{ matrix.arch }}.flatpak"]' + # flatpak: + # strategy: + # fail-fast: false + # matrix: + # include: + # - name: x86_64 SDL 2 + # gfx: OGL + # arch: x86_64 + # runner: ubuntu-24.04 + # - name: aarch64 SDL 2 + # gfx: OGL + # arch: aarch64 + # runner: ubuntu-24.04-arm + # name: Flatpak (${{ matrix.name }}) + # runs-on: ${{ matrix.runner }} + # steps: + # - name: Checkout Repository + # uses: actions/checkout@v6 + # with: + # submodules: true + # - name: Install Dependencies + # run: | + # sudo apt-get update + # sudo apt-get install --no-install-recommends -y flatpak + # flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + # flatpak --user install -y \ + # org.freedesktop.Platform/${{ matrix.arch }}/25.08 \ + # org.freedesktop.Sdk/${{ matrix.arch }}/25.08 + # - name: Build + # run: ./platforms/linux/build-flatpak.sh + # env: + # ARCH: ${{ matrix.arch }} + # REMCPE_GFX_API: ${{ matrix.gfx }} + # - uses: alexellis/upload-assets@0.4.1 + # env: + # GITHUB_TOKEN: ${{ github.token }} + # with: + # asset_paths: '["platforms/linux/build-flatpak/ReMCPE-Linux-${{ matrix.arch }}.flatpak"]' # linux32: # strategy: