diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4b1e5248..a52e5bc4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -429,13 +429,13 @@ jobs: - name: Cache APT packages uses: awalsh128/cache-apt-pkgs-action@latest with: - packages: clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick + packages: clang cmake meson ninja-build pkg-config nasm libgtk-3-dev libevdev-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick version: 1.1 - name: Install Linux dependencies run: | sudo apt-get update - sudo apt-get install -y clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick + sudo apt-get install -y clang cmake meson ninja-build pkg-config nasm libgtk-3-dev libevdev-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick - name: Cache libmpv build id: libmpv-cache @@ -537,13 +537,13 @@ jobs: - name: Cache APT packages uses: awalsh128/cache-apt-pkgs-action@latest with: - packages: clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick + packages: clang cmake meson ninja-build pkg-config nasm libgtk-3-dev libevdev-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick version: 1.1 - name: Install Linux dependencies run: | sudo apt-get update - sudo apt-get install -y clang cmake meson ninja-build pkg-config nasm libgtk-3-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick + sudo apt-get install -y clang cmake meson ninja-build pkg-config nasm libgtk-3-dev libevdev-dev liblzma-dev libstdc++-12-dev libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev libepoxy-dev libegl-dev libgl-dev libgnutls28-dev libpipewire-0.3-dev libva-dev libvdpau-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev libxpresent-dev libxkbcommon-dev libpulse-dev libdbus-1-dev libdrm-dev libgbm-dev libwayland-dev wayland-protocols liblcms2-dev ruby ruby-dev rubygems build-essential rpm libarchive-tools imagemagick - name: Cache libmpv build id: libmpv-cache diff --git a/linux/packaging/build-packages.py b/linux/packaging/build-packages.py index f985c5b1..87ff0e7a 100755 --- a/linux/packaging/build-packages.py +++ b/linux/packaging/build-packages.py @@ -43,6 +43,7 @@ DISTROS = { "libmpv2 | libmpv1", "libepoxy0", "libasound2", + "libevdev2", "libglib2.0-0", ], }, @@ -56,6 +57,7 @@ DISTROS = { "mpv-libs", "libepoxy", "alsa-lib", + "libevdev", "glib2", ], }, @@ -69,6 +71,7 @@ DISTROS = { "mpv", "libepoxy", "alsa-lib", + "libevdev", "glib2", ], }, diff --git a/pubspec.lock b/pubspec.lock index 24fda279..1dc9759c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1263,10 +1263,10 @@ packages: dependency: "direct main" description: name: universal_gamepad - sha256: ab16fd55ad164101cd36ff5ea2252006aa2ba2a4929c63e6e68206795ef16084 + sha256: afd3106195aa2052ec23fe61069cad8d0caed255c7e2e6ed33a403e0a94f365e url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.4.4" url_launcher: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 675bd827..0a8db13c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: path: wakelock_plus path_provider: ^2.1.0 path: ^1.9.0 - universal_gamepad: ^1.1.1 + universal_gamepad: ^1.4.4 drift: ^2.28.2 sqlite3_flutter_libs: ^0.5.41 workmanager: ^0.9.0+3 diff --git a/scripts/bundle_steam.sh b/scripts/bundle_steam.sh index 2c39297d..38650212 100644 --- a/scripts/bundle_steam.sh +++ b/scripts/bundle_steam.sh @@ -10,31 +10,37 @@ LIBMPV_DIR=$(dirname "$(find /build/libmpv-prefix -name libmpv.so | head -1)") cp -a "$LIBMPV_DIR"/libmpv.so* "$BUNDLE_LIB/" cp -a /build/libmpv-prefix/lib/libshaderc_shared.so* "$BUNDLE_LIB/" -# Bundle libmpv's runtime deps that the Steam Runtime doesn't ship. +# Bundle runtime deps that the Steam Runtime doesn't ship. # /steam-rt-libs.txt was snapshot before we built anything (see Dockerfile). +# Iteratively resolve the main binary + all bundled .so files until no new deps appear. echo "" -echo "==> Bundling libmpv runtime dependencies..." +echo "==> Bundling runtime dependencies..." RT_LIBS="/steam-rt-libs.txt" -ldd "$LIBMPV_DIR/libmpv.so" 2>/dev/null | grep "=> /" | awk '{print $3}' | while read dep; do - dep_name=$(basename "$dep") - if ! grep -qF "$dep_name" "$RT_LIBS"; then - if [ ! -f "$BUNDLE_LIB/$dep_name" ]; then - echo " Bundling $dep_name" - cp -a "$dep" "$BUNDLE_LIB/" - # Also copy any symlink variants - dep_dir=$(dirname "$dep") - dep_base=$(echo "$dep_name" | sed 's/\.so.*//') - cp -a "$dep_dir"/${dep_base}.so* "$BUNDLE_LIB/" 2>/dev/null || true +while true; do + new_count=0 + while read dep; do + dep_name=$(basename "$dep") + if ! grep -qF "$dep_name" "$RT_LIBS"; then + if [ ! -f "$BUNDLE_LIB/$dep_name" ]; then + echo " Bundling $dep_name" + cp -a "$dep" "$BUNDLE_LIB/" + dep_dir=$(dirname "$dep") + dep_base=$(echo "$dep_name" | sed 's/\.so.*//') + cp -a "$dep_dir"/${dep_base}.so* "$BUNDLE_LIB/" 2>/dev/null || true + new_count=$((new_count + 1)) + fi fi + done < <({ ldd "$BUNDLE/plezy" 2>/dev/null; find "$BUNDLE_LIB" -name '*.so*' -type f -exec ldd {} \; 2>/dev/null; } | grep "=> /" | awk '{print $3}' | sort -u) + if [ "$new_count" -eq 0 ]; then + break fi + echo " Bundled $new_count new libraries, re-scanning..." done # Verify all deps resolve echo "" echo "==> Checking dependencies..." -MISSING=$(LD_LIBRARY_PATH="$BUNDLE_LIB" ldd "$BUNDLE/plezy" 2>&1 | grep "not found" || true) -MISSING_MPV=$(LD_LIBRARY_PATH="$BUNDLE_LIB" ldd "$BUNDLE_LIB/libmpv.so" 2>&1 | grep "not found" || true) -MISSING="$MISSING$MISSING_MPV" +MISSING=$({ LD_LIBRARY_PATH="$BUNDLE_LIB" ldd "$BUNDLE/plezy" 2>&1; find "$BUNDLE_LIB" -name '*.so*' -type f -exec env LD_LIBRARY_PATH="$BUNDLE_LIB" ldd {} \; 2>&1; } | grep "not found" | sort -u || true) if [[ -n "$MISSING" ]]; then echo "WARNING: Unresolved dependencies (will need Steam runtime):" echo "$MISSING" diff --git a/scripts/steam.Dockerfile b/scripts/steam.Dockerfile index b6a875bd..c720b6c1 100644 --- a/scripts/steam.Dockerfile +++ b/scripts/steam.Dockerfile @@ -8,7 +8,7 @@ COPY --from=runtime-snapshot /steam-rt-libs.txt /steam-rt-libs.txt # ─── Layer 1: apt deps (cached unless this block changes) ───────────────────── RUN apt-get update -qq && apt-get install -y -qq \ clang cmake meson ninja-build pkg-config nasm git curl unzip xz-utils \ - libgtk-3-dev liblzma-dev \ + libgtk-3-dev libevdev-dev liblzma-dev \ libasound2-dev libass-dev libfreetype-dev libfontconfig-dev libfribidi-dev libharfbuzz-dev \ libepoxy-dev libegl-dev libgl-dev libgnutls28-dev \ libpipewire-0.3-dev libva-dev libvdpau-dev \