diff --git a/services/wolf.sh b/services/wolf.sh index e06049f..3d21cc2 100644 --- a/services/wolf.sh +++ b/services/wolf.sh @@ -945,9 +945,12 @@ UDEV # TI-99/4A emulator, a separate non-Wolf service) is deliberately not # used here — it's not something ES-DE can launch as a system. # - # ti99sim-sdl (billzajac/ti99sim) is the real target — genuine SDL2 - # joystick/gamepad support, confirmed against its own README — but it's - # source-only with no AppImage, so unlike Azahar/PCSX2/Dolphin/Cemu this + # ti99sim-sdl is the real target — genuine SDL2 joystick/gamepad + # support (v0.16.0 from the original author, mrousseau.org — the same + # source RetroPie's own ti99sim.sh scriptmodule builds from; an older + # GitHub fork under a different account turned out to still target + # SDL 1.2 and was dropped after failing to compile against SDL2) — but + # it's source-only with no AppImage, so unlike Azahar/PCSX2/Dolphin/Cemu this # installer can't just download a working binary. Building it against the # HOST's glibc/SDL2 risks a mismatch against the ES-DE container's own # (different) runtime, so instead it's built INSIDE a throwaway container @@ -1003,34 +1006,31 @@ XMLEOF # it (copies to /opt/ti99sim/bin, symlinks into # /usr/local/bin), so use that instead of guessing the exact # build subpath. - # ti99sim's own Makefile.linux calls the old SDL 1.x `sdl-config` - # tool, which no longer exists — modern libsdl2-dev ships only - # pkg-config .pc files (and sometimes sdl2-config, itself already - # a thin wrapper over pkg-config). Confirmed live: without this, - # every sdl-config call silently returns nothing, so the compile - # gets no -I/-L flags at all and fails on "SDL.h: No such file or - # directory" — not a real incompatibility, just a stale tool - # name. A tiny shim mapping the handful of flags this build - # actually uses (--cflags/--libs/--version) onto pkg-config sdl2 - # fixes it without patching the project's own Makefiles. + # billzajac/ti99sim on GitHub (used in the two previous attempts) + # turned out to be a stale fork whose SDL frontend still targets + # the real SDL 1.2 API — confirmed live, it fails to compile + # against SDL2 outright on symbols SDL2 removed. RetroPie's own + # ti99sim.sh scriptmodule doesn't build from that fork at all: + # it fetches upstream v0.16.0 directly from the original + # author's own site (mrousseau.org), applies exactly one trivial + # patch (a missing #include for modern g++), and + # builds straight against libsdl2-dev + libssl-dev with no SDL1 + # compatibility layer — confirming v0.16.0 genuinely supports + # SDL2 natively, unlike the old fork. Verified the download URL + # actually serves the real tarball, and the patch content, + # before using either. if docker run --rm -u root --entrypoint /bin/bash \ -v "$GAME_STORAGE_DIR/emulators:/output" \ ghcr.io/games-on-whales/es-de:edge -c ' set -e apt-get update -qq - apt-get install -y -qq git build-essential libsdl2-dev pkgconf ca-certificates - cat > /usr/local/bin/sdl-config << "SDLCFG" -#!/bin/sh -case "$1" in - --cflags) exec pkg-config sdl2 --cflags ;; - --libs) exec pkg-config sdl2 --libs ;; - --version) exec pkg-config sdl2 --modversion ;; - *) exec pkg-config sdl2 --cflags --libs ;; -esac -SDLCFG - chmod +x /usr/local/bin/sdl-config - git clone -q https://github.com/billzajac/ti99sim.git /tmp/ti99sim + apt-get install -y -qq build-essential libsdl2-dev libssl-dev ca-certificates curl xz-utils + mkdir -p /tmp/ti99sim + curl -fsSL -o /tmp/ti99sim.tar.xz \ + https://www.mrousseau.org/programs/ti99sim/archives/ti99sim-0.16.0.src.tar.xz + tar -xJf /tmp/ti99sim.tar.xz -C /tmp/ti99sim --strip-components 1 cd /tmp/ti99sim + sed -i "s/#include /#include \n#include /" src/core/device-support.cpp make make install cp /usr/local/bin/ti99sim-sdl /output/ti99sim-sdl @@ -3527,18 +3527,20 @@ service, which is browser-based and isn't something ES-DE can launch as a system. The emulator itself, \`ti99sim-sdl\` (real SDL2 gamepad support), has no -AppImage — so instead of a plain host build (which risks a glibc/SDL2 -mismatch against the ES-DE container's own runtime), this installer builds -it inside a throwaway container running the exact same image ES-DE itself -runs (\`ghcr.io/games-on-whales/es-de:edge\`), guaranteeing compatibility, -and drops the result at \`emulators/ti99sim-sdl\` automatically. Re-run -\`sudo ./setup.sh wolf\` if the build ever needs retrying (network hiccup, -etc.) — it skips the build if the binary's already there. +AppImage — this installer builds it from source (v0.16.0, the original +author's own release — the same one RetroPie's own ti99sim.sh +scriptmodule builds from) inside a throwaway container running the exact +same image ES-DE itself runs (\`ghcr.io/games-on-whales/es-de:edge\`), +guaranteeing compatibility, and drops the result at +\`emulators/ti99sim-sdl\` automatically. Re-run \`sudo ./setup.sh wolf\` if +the build ever needs retrying (network hiccup, etc.) — it skips the build +if the binary's already there. The one thing this can't do for you: your own TI-99/4A console ROM + GROM dump — same legal situation as any other console BIOS, and not something -any installer can supply — ti99sim-sdl's own README covers exactly where -it expects that once you have it. Then just drop \`.ctg\`/\`.rpk\`/\`.bin\` +any installer can supply. Per RetroPie's own documentation for this exact +emulator, it expects that combined into a single cartridge file named +\`TI-994A.ctg\` (case-sensitive). Then just drop \`.ctg\`/\`.rpk\`/\`.bin\` cartridge files into \`roms/ti994a/\`. ## MAME: sample packs showing up as games