Skip to content

Commit

Permalink
Add a 32-bit AppImage Script for Linux (#1539)
Browse files Browse the repository at this point in the history
  • Loading branch information
sandboxgamedev123 authored Jun 5, 2024
1 parent bfe0966 commit ddb012b
Showing 1 changed file with 157 additions and 0 deletions.
157 changes: 157 additions & 0 deletions shell/linux/make-appimage_32-bit.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
#!/bin/bash

if [ "$#" -ne 3 ]; then
echo "Syntax: $0 <source root dir> <artifact dir> <output dir>"
exit 1
fi

SHLIBS=(
libcurl.so.4
libz.so.1
liblua5.3.so.0
libminiupnpc.so.17
libgomp.so.1
libao.so.4
libpulse.so.0
# libzip.so.5
libnghttp2.so.14
libidn2.so.0
librtmp.so.1
# libssh.so.4
libpsl.so.5
# libssl.so.1.1
# libcrypto.so.1.1
libgssapi_krb5.so.2
# libldap_r-2.4.so.2
# liblber-2.4.so.2
libbrotlidec.so.1
# pulseaudio/libpulsecommon-13.99.so
libdbus-1.so.3
libbz2.so.1.0
libunistring.so.2
libgnutls.so.30
# libhogweed.so.5
# libnettle.so.7
libgmp.so.10
libkrb5.so.3
libk5crypto.so.3
libcom_err.so.2
libkrb5support.so.0
libresolv.so.2
libsasl2.so.2
# libgssapi.so.3
libbrotlicommon.so.1
libxcb.so.1
libsystemd.so.0
libwrap.so.0
libsndfile.so.1
libasyncns.so.0
libapparmor.so.1
libp11-kit.so.0
libtasn1.so.6
libkeyutils.so.1
# libheimntlm.so.0
# libkrb5.so.26
# libasn1.so.8
# libhcrypto.so.4
# libroken.so.18
libXau.so.6
libXdmcp.so.6
liblzma.so.5
liblz4.so.1
libgcrypt.so.20
libnsl.so.1
# libFLAC.so.8
libogg.so.0
libvorbis.so.0
libvorbisenc.so.2
# libffi.so.7
# libwind.so.0
# libheimbase.so.1
# libhx509.so.5
libsqlite3.so.0
libcrypt.so.1
libbsd.so.0
)

if [ ! -f appimagetool-i686.AppImage ]; then
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-i686.AppImage
chmod +x appimagetool-i686.AppImage
fi

SRCDIR=$1
ARTDIR=$2
OUTDIR=$3

rm -rf "$OUTDIR"
mkdir -p "$OUTDIR/usr/bin" "$OUTDIR/usr/lib" "$OUTDIR/usr/lib/pulseaudio" "$OUTDIR/usr/optional"

# echo "Building checkrt"
# mkdir -p "$OUTDIR/tmp"
# pushd "$OUTDIR/tmp"
# git clone https://github.com/darealshinji/linuxdeploy-plugin-checkrt
# cd linuxdeploy-plugin-checkrt
# git checkout ec6237791c5aeb4cbc1fa00a092d1f7befa58988
# cd src
# make
# cp -a checkrt ../../../usr/optional
# cd ../../..
# rm -rf tmp
# popd
# if [ ! -f "$OUTDIR/usr/optional/checkrt" ]; then
# echo "checkrt build failed"
# exit 1
# fi
# "$OUTDIR/usr/optional/checkrt" --copy-libraries

cp -a "$ARTDIR/flycast" "$OUTDIR/usr/bin"
patchelf --set-rpath '$ORIGIN/../lib' "$OUTDIR/usr/bin/flycast"

echo "Copying system shared libraries"
for lib in "${SHLIBS[@]}"; do
blib=$(basename "$lib")
if [ -f "/lib/i386-linux-gnu/$lib" ]; then
cp "/lib/i386-linux-gnu/$lib" "$OUTDIR/usr/lib/$blib"
elif [ -f "$CHROOT/usr/lib/i386-linux-gnu/$lib" ]; then
cp "$CHROOT/usr/lib/i386-linux-gnu/$lib" "$OUTDIR/usr/lib/$blib"
elif [ -f "$CHROOT/lib/$lib" ]; then
cp "$CHROOT/lib/$lib" "$OUTDIR/usr/lib/$blib"
elif [ -f "$CHROOT/usr/lib/$lib" ]; then
cp "$CHROOT/usr/lib/$lib" "$OUTDIR/usr/lib/$blib"
else
echo "*** Failed to find '$blib'"
exit 1
fi

strip "$OUTDIR/usr/lib/$blib"
done

for so in $(find "$OUTDIR/usr/lib" -maxdepth 1); do
if [ -f "$so" ]; then
echo "Patching RPATH in ${so}"
patchelf --set-rpath '$ORIGIN' "$so"
fi
done

cp -a "$SRCDIR/shell/linux/flycast.desktop" "$SRCDIR/shell/linux/flycast.png" "$OUTDIR"

echo "Creating AppRun..."
cat > "$OUTDIR/AppRun" << EOF
#!/bin/sh
APPDIR=\$(dirname "\$0")
grep -qs SteamOS /etc/os-release || \
if [ -x "\$APPDIR/usr/optional/checkrt" ]; then
extra_libs="\$(\$APPDIR/usr/optional/checkrt)"
fi
if [ -n "\$extra_libs" ]; then
export LD_LIBRARY_PATH="\${extra_libs}\${LD_LIBRARY_PATH}"
if [ -e "\$APPDIR/usr/optional/exec.so" ]; then
export LD_PRELOAD="\$APPDIR/usr/optional/exec.so:\${LD_PRELOAD}"
fi
fi
exec "\$APPDIR/usr/bin/flycast" "\$@"
EOF
chmod +x "$OUTDIR/AppRun"

echo "Generate AppImage"
ARCH=i386 ./appimagetool-i686.AppImage -v "$OUTDIR" "flycast-i386.AppImage"

0 comments on commit ddb012b

Please sign in to comment.