mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-09 08:04:45 +00:00
The compose-desktop skiko native shipped under
${app}/lib/app/libskiko-linux-arm64.so declares libEGL.so.1 in
DT_NEEDED — the aarch64 skiko uses EGL alongside GLX, unlike the
x86_64 skiko which only links libGL.so.1.
jpackage --type deb only auto-generates Depends from dpkg-shlibdeps
against the bundled JRE under lib/runtime/, NOT the app payload under
lib/app/. As a result the arm64 .deb produced by the newly-added
linux-arm64 CI leg lists libgl1/libglvnd0/libglx0 in Depends but not
libegl1. On minimal aarch64 installs — Armbian Server + a lightweight
WM, Raspberry Pi OS Lite + LXDE, or any distro base image without an
EGL implementation pulled in transitively — Amethyst desktop crashes
at startup with:
Exception in thread "main" org.jetbrains.skiko.LibraryLoadException:
Failed to loade library …/libskiko-linux-arm64.so
Caused by: java.lang.UnsatisfiedLinkError:
libEGL.so.1: cannot open shared object file: No such file or directory
Neither jpackage nor the Compose Multiplatform 1.11 DSL exposes a way
to add extra deb Depends, so we rewrite the .deb after the fact —
same approach as scripts/relax-deb-libicu.sh (which handles the
libicu SONAME divergence across Debian/Ubuntu releases).
scripts/add-deb-libegl-dep.sh only touches .debs whose payload
actually contains libskiko-linux-arm64.so, and is idempotent (skips
if libegl1 is already listed). The workflow step is gated on
matrix.arch == 'arm64' so the x64 .deb is untouched (its skiko does
NOT NEED libEGL and its GLX-only path stays as-is).
Local validation on Apple Silicon (native linux/arm64 in Docker):
1. Rebuilt v1.13.1 arm64 .deb from a110ce0a30's CI leg.
2. readelf -d libskiko-linux-arm64.so | grep NEEDED
→ confirms libEGL.so.1
3. Ran scripts/add-deb-libegl-dep.sh over the .deb; Depends line
now ends `..., zlib1g, libegl1`. Idempotent on re-run.
4. `apt-get install -y -f ./amethyst_*.deb` in a base
eclipse-temurin:21-jdk-noble aarch64 container (which lacks
libegl1 by default) now pulls libegl1 as a dep.
5. Amethyst launches under Xvfb, `xwininfo -root -tree` shows the
1200×800 "Amethyst" window + Content window + sun-awt-X11-XCanvasPeer
Skia canvas. No UnsatisfiedLinkError.