diff --git a/shell/linux/make-appimage_32-bit.sh b/shell/linux/make-appimage_32-bit.sh new file mode 100644 index 000000000..d9f10365e --- /dev/null +++ b/shell/linux/make-appimage_32-bit.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +if [ "$#" -ne 3 ]; then + echo "Syntax: $0 " + 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"