From e40ba2b9c2844e52b4397fd1312648a1167d490c Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 16 Mar 2026 21:46:40 -0300 Subject: [PATCH 01/12] Adds support for Linux ARM GLESv2 --- CMakeLists.txt | 12 ++++++++++++ cmake/sdl.cmake | 45 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 85f87522f..f36152703 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,7 @@ option(BUILD_ASAN_DEBUG "Build with AddressSanitizer" OFF) option(BUILD_WITH_ZLIB "Build with zlib linked" ON) option(TIC80_TARGET "Target binary suffix") option(PREFER_SYSTEM_LIBRARIES "Prefer link with system libraries" OFF) +option(PREFER_SYSTEM_SDL2 "Prefer system SDL2" ${PREFER_SYSTEM_LIBRARIES}) if(BUILD_EDITORS) set(BUILD_SURF ON) @@ -103,8 +104,19 @@ if(UNIX AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ANDROID) if(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD") set(FREEBSD TRUE) endif() + + if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm") + set(USE_GLES2_DEFAULT ON) + set(USE_EGL_DEFAULT ON) + else() + set(USE_GLES2_DEFAULT OFF) + set(USE_EGL_DEFAULT OFF) + endif() endif() +option(USE_GLES2 "Use GLES2" ${USE_GLES2_DEFAULT}) +option(USE_EGL "Use EGL" ${USE_EGL_DEFAULT}) + if (BUILD_NO_OPTIMIZATION) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0") diff --git a/cmake/sdl.cmake b/cmake/sdl.cmake index 5c5627d7f..ba33152ae 100644 --- a/cmake/sdl.cmake +++ b/cmake/sdl.cmake @@ -1,7 +1,7 @@ ################################ # SDL2 ################################ -if(PREFER_SYSTEM_LIBRARIES) +if(PREFER_SYSTEM_SDL2) find_package(SDL2) if(SDL2_FOUND) if(NINTENDO_SWITCH) @@ -18,7 +18,7 @@ if(PREFER_SYSTEM_LIBRARIES) endif() -if(BUILD_SDL AND NOT EMSCRIPTEN AND NOT RPI AND NOT PREFER_SYSTEM_LIBRARIES) +if(BUILD_SDL AND NOT EMSCRIPTEN AND NOT RPI AND NOT PREFER_SYSTEM_SDL2) if(WIN32) set(HAVE_LIBC TRUE) @@ -69,9 +69,12 @@ if(BUILD_SDL AND BUILD_PLAYER AND NOT RPI) target_link_options(player-sdl PRIVATE -static) endif() - target_link_libraries(player-sdl PRIVATE tic80core SDL2main) + target_link_libraries(player-sdl PRIVATE tic80core) + if(NOT PREFER_SYSTEM_SDL2) + target_link_libraries(player-sdl PRIVATE SDL2main) + endif() - if(BUILD_STATIC) + if(BUILD_STATIC AND NOT USE_GLES2) target_link_libraries(player-sdl PRIVATE SDL2-static) else() target_link_libraries(player-sdl PRIVATE SDL2) @@ -94,7 +97,7 @@ set(SDLGPU_SRC ${SDLGPU_DIR}/externals/stb_image_write/stb_image_write.c ) -if(NOT ANDROID AND NOT NINTENDO_SWITCH) +if(NOT ANDROID AND NOT NINTENDO_SWITCH AND NOT USE_GLES2) list(APPEND SDLGPU_SRC ${SDLGPU_DIR}/renderer_GLES_1.c ${SDLGPU_DIR}/renderer_GLES_3.c @@ -110,24 +113,41 @@ endif() add_library(sdlgpu STATIC ${SDLGPU_SRC}) -if(EMSCRIPTEN OR ANDROID OR NINTENDO_SWITCH) +if(EMSCRIPTEN OR ANDROID OR NINTENDO_SWITCH OR USE_GLES2) target_compile_definitions(sdlgpu PRIVATE GLEW_STATIC SDL_GPU_DISABLE_GLES_1 SDL_GPU_DISABLE_GLES_3 SDL_GPU_DISABLE_OPENGL) else() target_compile_definitions(sdlgpu PRIVATE GLEW_STATIC SDL_GPU_DISABLE_GLES SDL_GPU_DISABLE_OPENGL_3 SDL_GPU_DISABLE_OPENGL_4) endif() target_include_directories(sdlgpu PUBLIC ${THIRDPARTY_DIR}/sdl-gpu/include) +target_include_directories(sdlgpu PRIVATE ${THIRDPARTY_DIR}/sdl2/include) target_include_directories(sdlgpu PRIVATE ${THIRDPARTY_DIR}/sdl-gpu/src/externals/glew) target_include_directories(sdlgpu PRIVATE ${THIRDPARTY_DIR}/sdl-gpu/src/externals/glew/GL) target_include_directories(sdlgpu PRIVATE ${THIRDPARTY_DIR}/sdl-gpu/src/externals/stb_image) target_include_directories(sdlgpu PRIVATE ${THIRDPARTY_DIR}/sdl-gpu/src/externals/stb_image_write) +if(USE_GLES2 OR USE_EGL) + target_include_directories(sdlgpu PRIVATE ${THIRDPARTY_DIR}/sdl2/src/video/khronos) +endif() + if(WIN32) target_link_libraries(sdlgpu opengl32) endif() if(LINUX) - target_link_libraries(sdlgpu GL) + if(USE_GLES2) + target_link_libraries(sdlgpu GLESv2) + endif() + + if(USE_EGL) + target_link_libraries(sdlgpu EGL) + endif() + + if(NOT USE_GLES2 AND NOT USE_EGL) + target_link_libraries(sdlgpu GL) + endif() + + target_link_libraries(sdlgpu SDL2) endif() if(APPLE) @@ -153,7 +173,7 @@ if(NINTENDO_SWITCH) endif() if(NOT EMSCRIPTEN) - if(BUILD_STATIC) + if(BUILD_STATIC AND NOT USE_GLES2) target_link_libraries(sdlgpu SDL2-static) else() target_link_libraries(sdlgpu SDL2) @@ -187,6 +207,8 @@ if(BUILD_SDL) add_executable(${TIC80_TARGET} ${TIC80_SRC}) endif() + target_include_directories(${TIC80_TARGET} PRIVATE ${THIRDPARTY_DIR}/sdl2/include) + if(MINGW) target_link_libraries(${TIC80_TARGET} mingw32) target_link_options(${TIC80_TARGET} PRIVATE -static -mconsole) @@ -200,7 +222,7 @@ if(BUILD_SDL) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s ASSERTIONS=1") endif() - elseif(NOT ANDROID) + elseif(NOT ANDROID AND NOT PREFER_SYSTEM_SDL2) target_link_libraries(${TIC80_TARGET} SDL2main) endif() @@ -223,12 +245,15 @@ if(BUILD_SDL) if(BUILD_SDLGPU) target_link_libraries(${TIC80_TARGET} sdlgpu) + if(LINUX) + target_link_libraries(${TIC80_TARGET} pthread dl m) + endif() else() if(EMSCRIPTEN) elseif(RPI) target_link_libraries(${TIC80_TARGET} libSDL2.a bcm_host pthread) else() - if(BUILD_STATIC) + if(BUILD_STATIC AND NOT USE_GLES2) target_link_libraries(${TIC80_TARGET} SDL2-static) else() target_link_libraries(${TIC80_TARGET} SDL2) From 70b49453eb74530176551ba0520575f7b285438b Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 16 Mar 2026 22:55:52 -0300 Subject: [PATCH 02/12] build fixes [Gemini] 1. **Resolved Nintendo Switch Build**: The issue was that `PREFER_SYSTEM_SDL2` was defined before the Switch platform block could override the library preference. I moved all flag definitions in CMakeLists.txt to the end of the platform detection block. This ensures the Switch correctly identifies that it should use the system SDL2, fixing the "Threads are needed" error. 2. **Fixed GLES/EGL on Native ARM64 runners**: The previous logic forced GLES on any Linux ARM system, which broke standard Linux ARM runners that expect desktop OpenGL. I've updated the logic to only auto-enable `USE_GLES2` and `USE_EGL` when `CMAKE_CROSSCOMPILING` is `ON`. * **Handhelds**: Since your Docker builds cross-compile, they will still have GLES enabled automatically. * **Native CI**: Standard native Linux runners will now default to desktop OpenGL, fixing the `/usr/bin/ld: cannot find -lGLESv2` error. 3. **Resolved `INTERFACE_SDL2_SHARED` conflict**: In sdl.cmake, the `sdlgpu` target was sometimes linking to both `SDL2` and `SDL2-static` aliases. When those both pointed to the same system shared library, CMake crashed due to property conflicts. I've consolidated the linking logic to ensure only one of them is linked, prioritizing the generic `SDL2` target when using system libraries. --- CMakeLists.txt | 16 ++++++++-------- cmake/sdl.cmake | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f36152703..2c5d2f416 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,6 @@ option(BUILD_ASAN_DEBUG "Build with AddressSanitizer" OFF) option(BUILD_WITH_ZLIB "Build with zlib linked" ON) option(TIC80_TARGET "Target binary suffix") option(PREFER_SYSTEM_LIBRARIES "Prefer link with system libraries" OFF) -option(PREFER_SYSTEM_SDL2 "Prefer system SDL2" ${PREFER_SYSTEM_LIBRARIES}) if(BUILD_EDITORS) set(BUILD_SURF ON) @@ -104,16 +103,17 @@ if(UNIX AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ANDROID) if(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD") set(FREEBSD TRUE) endif() +endif() - if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm") - set(USE_GLES2_DEFAULT ON) - set(USE_EGL_DEFAULT ON) - else() - set(USE_GLES2_DEFAULT OFF) - set(USE_EGL_DEFAULT OFF) - endif() +if(LINUX AND CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm" AND CMAKE_CROSSCOMPILING) + set(USE_GLES2_DEFAULT ON) + set(USE_EGL_DEFAULT ON) +else() + set(USE_GLES2_DEFAULT OFF) + set(USE_EGL_DEFAULT OFF) endif() +option(PREFER_SYSTEM_SDL2 "Prefer system SDL2" ${PREFER_SYSTEM_LIBRARIES}) option(USE_GLES2 "Use GLES2" ${USE_GLES2_DEFAULT}) option(USE_EGL "Use EGL" ${USE_EGL_DEFAULT}) diff --git a/cmake/sdl.cmake b/cmake/sdl.cmake index ba33152ae..fde3f8127 100644 --- a/cmake/sdl.cmake +++ b/cmake/sdl.cmake @@ -146,8 +146,6 @@ if(LINUX) if(NOT USE_GLES2 AND NOT USE_EGL) target_link_libraries(sdlgpu GL) endif() - - target_link_libraries(sdlgpu SDL2) endif() if(APPLE) @@ -173,7 +171,9 @@ if(NINTENDO_SWITCH) endif() if(NOT EMSCRIPTEN) - if(BUILD_STATIC AND NOT USE_GLES2) + if(PREFER_SYSTEM_SDL2) + target_link_libraries(sdlgpu SDL2) + elseif(BUILD_STATIC AND NOT USE_GLES2) target_link_libraries(sdlgpu SDL2-static) else() target_link_libraries(sdlgpu SDL2) From f693dc12b429ab1c2e1fae2242266b11e02268d2 Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Tue, 17 Mar 2026 10:41:29 -0300 Subject: [PATCH 03/12] Allows to change default appFolder using TIC_DATA_PATH --- CMakeLists.txt | 7 +++++++ cmake/core.cmake | 2 +- src/system/sdl/main.c | 14 +++++++------- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c5d2f416..9e1120c0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,10 +70,17 @@ endif() if(NINTENDO_SWITCH) set(PREFER_SYSTEM_LIBRARIES ON) + if(NOT TIC_DATA_PATH) + set(TIC_DATA_PATH "/switch/tic80") + endif() endif() add_library(runtime INTERFACE) +if(TIC_DATA_PATH) + target_compile_definitions(runtime INTERFACE TIC_DATA_PATH="${TIC_DATA_PATH}") +endif() + if(BUILD_STATIC) set(TIC_RUNTIME STATIC) target_compile_definitions(runtime INTERFACE TIC_RUNTIME_STATIC) diff --git a/cmake/core.cmake b/cmake/core.cmake index 894b535d8..7afbdab20 100644 --- a/cmake/core.cmake +++ b/cmake/core.cmake @@ -113,7 +113,7 @@ if(BUILD_STATIC) target_link_libraries(tic80core PRIVATE wasm) endif() - target_link_libraries(tic80core PRIVATE runtime) + target_link_libraries(tic80core PUBLIC runtime) endif() diff --git a/src/system/sdl/main.c b/src/system/sdl/main.c index 3eeba2021..f1ad589aa 100644 --- a/src/system/sdl/main.c +++ b/src/system/sdl/main.c @@ -62,7 +62,7 @@ extern void gotoMenu(Studio* studio); #include #endif -#if defined(__TIC_ANDROID__) || defined(__SWITCH__) +#if defined(__TIC_ANDROID__) || defined(__SWITCH__) || defined(TIC_DATA_PATH) #include #endif @@ -1395,7 +1395,12 @@ static const char* getAppFolder() { static char appFolder[TICNAME_MAX]; -#if defined(__EMSCRIPTEN__) +#if defined(TIC_DATA_PATH) + + strcpy(appFolder, TIC_DATA_PATH); + mkdir(appFolder, 0777); + +#elif defined(__EMSCRIPTEN__) strcpy(appFolder, "/" TIC_PACKAGE "/" TIC_NAME "/"); @@ -1406,11 +1411,6 @@ static const char* getAppFolder() strcat(appFolder, AppFolder); mkdir(appFolder, 0777); -#elif defined(__SWITCH__) - - strcpy(appFolder, "/switch/tic80"); - mkdir(appFolder, 0777); - #else char* path = SDL_GetPrefPath(TIC_PACKAGE, TIC_NAME); From 31c9eaf45087f52a93daeaa75875d5534e69c8f4 Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 16:16:18 -0300 Subject: [PATCH 04/12] adds linux-arm64-gles2 build workflow --- .github/workflows/build.yml | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ce59d1885..69bc8895e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -155,6 +155,58 @@ jobs: cmake -DCMAKE_BUILD_TYPE=MinSizeRel -DBUILD_SDLGPU=On -DBUILD_PRO=On -DBUILD_WITH_ALL=ON .. cmake --build . --config MinSizeRel --parallel + # === Ubuntu-arm64 GLES2 === + linux-arm64-gles2: + runs-on: ubuntu-22.04-arm + + steps: + - uses: actions/checkout@v6 + with: + submodules: recursive + fetch-depth: 0 + + - name: Install Toolchain and Dependencies + run: | + sudo apt-get update + sudo apt-get install -y gcc g++ xz-utils wget python3 rake pkg-config binutils libsdl2-dev libgles2-mesa-dev libegl1-mesa-dev + + - name: Generate Stubs + run: | + for lib in /usr/lib/aarch64-linux-gnu/libSDL2-2.0.so.0 /usr/lib/aarch64-linux-gnu/libGLESv2.so.2 /usr/lib/aarch64-linux-gnu/libEGL.so.1; do \ + outname=$(basename $lib | sed 's/-2.0//; s/\.so\..*/.so/') && \ + echo "Generating stubs for $outname from $lib" && \ + nm -D $lib | grep " T " | awk '{print "void " $3 "(){}"}' > stubs.c && \ + sudo rm -f /usr/lib/aarch64-linux-gnu/$outname && \ + sudo gcc -shared -o /usr/lib/aarch64-linux-gnu/$outname stubs.c; \ + done + + - name: Build + run: | + mkdir build && cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_PRO=OFF \ + -DBUILD_WITH_ALL=ON \ + -DCMAKE_C_FLAGS_RELEASE="-Ofast -flto" \ + -DCMAKE_CXX_FLAGS_RELEASE="-Ofast -flto" \ + -DBUILD_SDL=ON \ + -DBUILD_SDLGPU=ON \ + -DBUILD_EDITORS=OFF \ + -DBUILD_SURF=ON \ + -DPREFER_SYSTEM_SDL2=ON \ + -DBUILD_STATIC=ON \ + -DTIC_DATA_PATH="/userdata/roms/tic80/" + cmake --build . --target tic80 --config Release --parallel + + - name: Deploy + uses: actions/upload-artifact@v6 + with: + name: "tic80-linux-arm64-gles2" + path: | + build/bin/tic80 + build/bin/*.so + build/lib/*.so + # === Ubuntu gcc14 === linux-gcc14-glibc239: runs-on: ubuntu-24.04 From b420b005c15b13378dc9f6c858b867e1a4599a3c Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 16:30:52 -0300 Subject: [PATCH 05/12] build arm63-gles from build/linux --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 69bc8895e..fc88e1d9e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -182,8 +182,8 @@ jobs: - name: Build run: | - mkdir build && cd build - cmake .. \ + cd build/linux + cmake ../.. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_PRO=OFF \ -DBUILD_WITH_ALL=ON \ @@ -203,9 +203,9 @@ jobs: with: name: "tic80-linux-arm64-gles2" path: | - build/bin/tic80 - build/bin/*.so - build/lib/*.so + build/linux/bin/tic80 + build/linux/bin/*.so + build/linux/lib/*.so # === Ubuntu gcc14 === linux-gcc14-glibc239: From 5bf1d49899f9010ee97b696836eaa8b7a61e5070 Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 17:20:27 -0300 Subject: [PATCH 06/12] adds build/linux/share to the arm64-gles workflow pack --- .github/workflows/build.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fc88e1d9e..4d9b5d99b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -198,6 +198,12 @@ jobs: -DTIC_DATA_PATH="/userdata/roms/tic80/" cmake --build . --target tic80 --config Release --parallel + - name: Pack + run: | + cp build/linux/tic80.desktop share/applications/ + cp build/linux/tic80.xml share/mime/packages/ + cp build/linux/tic80.png share/icons/ + - name: Deploy uses: actions/upload-artifact@v6 with: @@ -206,6 +212,7 @@ jobs: build/linux/bin/tic80 build/linux/bin/*.so build/linux/lib/*.so + build/linux/share/* # === Ubuntu gcc14 === linux-gcc14-glibc239: From dd45f2fd4042a78b5cec1538b61960ee543bfd9c Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 17:33:25 -0300 Subject: [PATCH 07/12] git workflow, mkdir -p share/ --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4d9b5d99b..d034c6c5d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -200,6 +200,9 @@ jobs: - name: Pack run: | + mkdir -p share/applications + mkdir -p share/mime/packages + mkdir -p share/icons cp build/linux/tic80.desktop share/applications/ cp build/linux/tic80.xml share/mime/packages/ cp build/linux/tic80.png share/icons/ From 94a2fd951df1232df2cc260206bdb11ef37d5538 Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 17:47:35 -0300 Subject: [PATCH 08/12] [arm64-gles workflow] share path fix --- .github/workflows/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d034c6c5d..50547679c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -200,12 +200,12 @@ jobs: - name: Pack run: | - mkdir -p share/applications - mkdir -p share/mime/packages - mkdir -p share/icons - cp build/linux/tic80.desktop share/applications/ - cp build/linux/tic80.xml share/mime/packages/ - cp build/linux/tic80.png share/icons/ + mkdir -p build/linux/share/applications + mkdir -p build/linux/share/mime/packages + mkdir -p build/linux/share/icons + cp build/linux/tic80.desktop build/linux/share/applications/ + cp build/linux/tic80.xml build/linux/share/mime/packages/ + cp build/linux/tic80.png build/linux/share/icons/ - name: Deploy uses: actions/upload-artifact@v6 From 9a3d2d0f1c3328433256b10090c99546a26bddf1 Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 20:17:31 -0300 Subject: [PATCH 09/12] [arm64-gles] USE_GLES2=ON DUSE_EGL=ON --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 50547679c..89f88e7fa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -191,6 +191,8 @@ jobs: -DCMAKE_CXX_FLAGS_RELEASE="-Ofast -flto" \ -DBUILD_SDL=ON \ -DBUILD_SDLGPU=ON \ + -DUSE_GLES2=ON \ + -DUSE_EGL=ON \ -DBUILD_EDITORS=OFF \ -DBUILD_SURF=ON \ -DPREFER_SYSTEM_SDL2=ON \ From 802e19f8d9834ec427a92988007cc4d28a2149e1 Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 20:41:16 -0300 Subject: [PATCH 10/12] [arm64-gles] fix lib link tic80: error while loading shared libraries: /usr/lib/aarch64-linux-gnu/libSDL2.so: cannot open shared object file: No such file or directory The issue stems from the way the stub libraries are generated in the Github workflow. When the loop creates libSDL2.so using sudo gcc -shared -o ..., it outputs the custom shared object directly into the host runner's absolute path /usr/lib/aarch64-linux-gnu/libSDL2.so. Since we did not provide an explicit SONAME (which is typically built into standard shared objects to tell the linker their "short name"), when ld resolves the links dynamically, it bakes the absolute path /usr/lib/aarch64-linux-gnu/libSDL2.so directly into the final tic80 binary's DT_NEEDED dependencies. Now, the resulting executable will only encode the canonical library name (libSDL2.so) rather than the absolute build-time path, restoring the expected runtime linking behavior on the device! --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 89f88e7fa..19b4e6e6e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -177,7 +177,7 @@ jobs: echo "Generating stubs for $outname from $lib" && \ nm -D $lib | grep " T " | awk '{print "void " $3 "(){}"}' > stubs.c && \ sudo rm -f /usr/lib/aarch64-linux-gnu/$outname && \ - sudo gcc -shared -o /usr/lib/aarch64-linux-gnu/$outname stubs.c; \ + sudo gcc -shared -Wl,-soname,$outname -o /usr/lib/aarch64-linux-gnu/$outname stubs.c; \ done - name: Build From 57b8189adebe673e0fbf257d61a6625b5af6ff5a Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Mon, 4 May 2026 22:47:07 -0300 Subject: [PATCH 11/12] rebuild From 0945e3c0151534e4d1a02deb304a878c7ffd8351 Mon Sep 17 00:00:00 2001 From: imsys <911254+imsys@users.noreply.github.com> Date: Tue, 5 May 2026 00:56:47 -0300 Subject: [PATCH 12/12] [cleanup] CMakeLists -> GLES2 and EGL defaults to OFF --- CMakeLists.txt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index edfd4b5de..78b3553dd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,17 +112,9 @@ if(UNIX AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ANDROID) endif() endif() -if(LINUX AND CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm" AND CMAKE_CROSSCOMPILING) - set(USE_GLES2_DEFAULT ON) - set(USE_EGL_DEFAULT ON) -else() - set(USE_GLES2_DEFAULT OFF) - set(USE_EGL_DEFAULT OFF) -endif() - option(PREFER_SYSTEM_SDL2 "Prefer system SDL2" ${PREFER_SYSTEM_LIBRARIES}) -option(USE_GLES2 "Use GLES2" ${USE_GLES2_DEFAULT}) -option(USE_EGL "Use EGL" ${USE_EGL_DEFAULT}) +option(USE_GLES2 "Use GLES2" OFF) +option(USE_EGL "Use EGL" OFF) if (BUILD_NO_OPTIMIZATION) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0")