CI: Only build Qt frontend for cross jobs

This commit is contained in:
Stenzek
2026-03-13 17:34:31 +10:00
parent ec5e676511
commit fedd294bde
3 changed files with 115 additions and 137 deletions

View File

@@ -84,14 +84,13 @@ jobs:
- name: Generate CMake - name: Generate CMake
shell: bash shell: bash
run: | run: |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_TOOLCHAIN_FILE="$HOME/toolchain.cmake" -DHOST_MIN_PAGE_SIZE=4096 -DHOST_MAX_PAGE_SIZE=16384 -DHOST_CACHE_LINE_SIZE=64 -DBUILD_QT_FRONTEND=ON -DBUILD_MINI_FRONTEND=ON cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_TOOLCHAIN_FILE="$HOME/toolchain.cmake" -DHOST_MIN_PAGE_SIZE=4096 -DHOST_MAX_PAGE_SIZE=16384 -DHOST_CACHE_LINE_SIZE=64
- name: Compile Build - name: Compile Build
shell: bash shell: bash
run: | run: |
cmake --build build --parallel cmake --build build --parallel
scripts/appimage/make-cross-appimage.sh duckstation-qt ${{ matrix.arch }} "$(realpath build)" "/${{ matrix.arch }}-chroot" scripts/appimage/make-cross-appimage.sh "${{ matrix.arch }}" "$(realpath build)" "/${{ matrix.arch }}-chroot"
scripts/appimage/make-cross-appimage.sh duckstation-mini ${{ matrix.arch }} "$(realpath build)" "/${{ matrix.arch }}-chroot"
- name: Upload AppImages - name: Upload AppImages
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v6

View File

@@ -71,9 +71,7 @@ jobs:
./artifacts/DuckStation-x64.AppImage ./artifacts/DuckStation-x64.AppImage
./artifacts/DuckStation-x64-SSE2.AppImage ./artifacts/DuckStation-x64-SSE2.AppImage
./artifacts/DuckStation-arm64.AppImage ./artifacts/DuckStation-arm64.AppImage
./artifacts/DuckStation-Mini-arm64.AppImage
./artifacts/DuckStation-armhf.AppImage ./artifacts/DuckStation-armhf.AppImage
./artifacts/DuckStation-Mini-armhf.AppImage
./artifacts/duckstation-mac-release.zip ./artifacts/duckstation-mac-release.zip
- name: Create Rolling Release - name: Create Rolling Release
@@ -97,7 +95,5 @@ jobs:
./artifacts/DuckStation-x64.AppImage ./artifacts/DuckStation-x64.AppImage
./artifacts/DuckStation-x64-SSE2.AppImage ./artifacts/DuckStation-x64-SSE2.AppImage
./artifacts/DuckStation-arm64.AppImage ./artifacts/DuckStation-arm64.AppImage
./artifacts/DuckStation-Mini-arm64.AppImage
./artifacts/DuckStation-armhf.AppImage ./artifacts/DuckStation-armhf.AppImage
./artifacts/DuckStation-Mini-armhf.AppImage
./artifacts/duckstation-mac-release.zip ./artifacts/duckstation-mac-release.zip

View File

@@ -19,15 +19,14 @@ function retry_command {
done done
} }
if [ "$#" -ne 4 ]; then if [ "$#" -ne 3 ]; then
echo "Syntax: $0 <duckstation-qt|duckstation-mini> <target arch> <path to build directory> <chroot dir>" echo "Syntax: $0 <target arch> <path to build directory> <chroot dir>"
exit 1 exit 1
fi fi
BINARY=$1 ARCH=$1
ARCH=$2 BUILDDIR=$2
BUILDDIR=$3 CHROOTDIR=$3
CHROOTDIR=$4
STRIP=llvm-strip STRIP=llvm-strip
@@ -44,19 +43,7 @@ else
exit 1 exit 1
fi fi
if [ "$BINARY" == "duckstation-qt" ]; then APPIMAGENAME="DuckStation-${ARCH}"
echo "Building Qt AppImage."
ADD_QT_LIBS=true
APPIMAGENAME="DuckStation-${ARCH}"
elif [ "$BINARY" == "duckstation-mini" ]; then
echo "Building Mini AppImage."
ADD_QT_LIBS=false
APPIMAGENAME="DuckStation-Mini-${ARCH}"
else
echo "Unknown binary $BINARY"
exit 1
fi
APPDIRNAME="${APPIMAGENAME}.AppDir" APPDIRNAME="${APPIMAGENAME}.AppDir"
declare -a SYSLIBS=( declare -a SYSLIBS=(
@@ -120,95 +107,93 @@ declare -a DEPLIBS=(
#"libva.so.2" #"libva.so.2"
) )
if [ "${ADD_QT_LIBS}" == true ]; then SYSLIBS+=(
SYSLIBS+=( "libatk-1.0.so.0"
"libatk-1.0.so.0" "libatk-bridge-2.0.so.0"
"libatk-bridge-2.0.so.0" "libatspi.so.0"
"libatspi.so.0" "libblkid.so.1"
"libblkid.so.1" "libcairo-gobject.so.2"
"libcairo-gobject.so.2" "libcairo.so.2"
"libcairo.so.2" "libcap.so.2"
"libcap.so.2" "libdatrie.so.1"
"libdatrie.so.1" "libdeflate.so.0"
"libdeflate.so.0" "libdbus-1.so.3"
"libdbus-1.so.3" "libepoxy.so.0"
"libepoxy.so.0" "libgcrypt.so.20"
"libgcrypt.so.20" "libgdk-3.so.0"
"libgdk-3.so.0" "libgdk_pixbuf-2.0.so.0"
"libgdk_pixbuf-2.0.so.0" "libgio-2.0.so.0"
"libgio-2.0.so.0" "libglib-2.0.so.0"
"libglib-2.0.so.0" "libgmodule-2.0.so.0"
"libgmodule-2.0.so.0" "libgobject-2.0.so.0"
"libgobject-2.0.so.0" "libgraphite2.so.3"
"libgraphite2.so.3" "libgtk-3.so.0"
"libgtk-3.so.0" "libjbig.so.0"
"libjbig.so.0" "liblz4.so.1"
"liblz4.so.1" "liblzma.so.5"
"liblzma.so.5" "libmd.so.0"
"libmd.so.0" "libmount.so.1"
"libmount.so.1" "libpango-1.0.so.0"
"libpango-1.0.so.0" "libpangocairo-1.0.so.0"
"libpangocairo-1.0.so.0" "libpangoft2-1.0.so.0"
"libpangoft2-1.0.so.0" "libpcre2-16.so.0"
"libpcre2-16.so.0" "libpcre2-8.so.0"
"libpcre2-8.so.0" "libpcre.so.3"
"libpcre.so.3" "libpixman-1.so.0"
"libpixman-1.so.0" "libselinux.so.1"
"libselinux.so.1" "libsystemd.so.0"
"libsystemd.so.0" "libtiff.so.5"
"libtiff.so.5" "libXau.so.6"
"libXau.so.6" "libxcb-cursor.so.0"
"libxcb-cursor.so.0" "libxcb-glx.so.0"
"libxcb-glx.so.0" "libxcb-icccm.so.4"
"libxcb-icccm.so.4" "libxcb-image.so.0"
"libxcb-image.so.0" "libxcb-keysyms.so.1"
"libxcb-keysyms.so.1" "libxcb-randr.so.0"
"libxcb-randr.so.0" "libxcb-render.so.0"
"libxcb-render.so.0" "libxcb-render-util.so.0"
"libxcb-render-util.so.0" "libxcb-shape.so.0"
"libxcb-shape.so.0" "libxcb-shm.so.0"
"libxcb-shm.so.0" "libxcb-sync.so.1"
"libxcb-sync.so.1" "libxcb-util.so.1"
"libxcb-util.so.1" "libxcb-xfixes.so.0"
"libxcb-xfixes.so.0" "libxcb-xkb.so.1"
"libxcb-xkb.so.1" "libXcomposite.so.1"
"libXcomposite.so.1" "libXcursor.so.1"
"libXcursor.so.1" "libXdamage.so.1"
"libXdamage.so.1" "libXdmcp.so.6"
"libXdmcp.so.6" "libXext.so.6"
"libXext.so.6" "libXfixes.so.3"
"libXfixes.so.3" "libXinerama.so.1"
"libXinerama.so.1" "libXi.so.6"
"libXi.so.6" "libxkbcommon.so.0"
"libxkbcommon.so.0" "libxkbcommon-x11.so.0"
"libxkbcommon-x11.so.0" "libXrandr.so.2"
"libXrandr.so.2" "libXrender.so.1"
"libXrender.so.1" )
)
declare -a QTLIBS=( declare -a QTLIBS=(
"libQt6Core.so.6" "libQt6Core.so.6"
"libQt6DBus.so.6" "libQt6DBus.so.6"
"libQt6Gui.so.6" "libQt6Gui.so.6"
"libQt6OpenGL.so.6" "libQt6OpenGL.so.6"
"libQt6Svg.so.6" "libQt6Svg.so.6"
"libQt6WaylandClient.so.6" "libQt6WaylandClient.so.6"
"libQt6Widgets.so.6" "libQt6Widgets.so.6"
"libQt6XcbQpa.so.6" "libQt6XcbQpa.so.6"
) )
declare -a QTPLUGINS=( declare -a QTPLUGINS=(
"plugins/iconengines" "plugins/iconengines"
"plugins/imageformats" "plugins/imageformats"
"plugins/platforminputcontexts" "plugins/platforminputcontexts"
"plugins/platforms" "plugins/platforms"
"plugins/platformthemes" "plugins/platformthemes"
"plugins/wayland-decoration-client" "plugins/wayland-decoration-client"
"plugins/wayland-graphics-integration-client" "plugins/wayland-graphics-integration-client"
"plugins/wayland-shell-integration" "plugins/wayland-shell-integration"
"plugins/xcbglintegrations" "plugins/xcbglintegrations"
) )
fi
set -e set -e
IFS=" IFS="
@@ -234,11 +219,11 @@ mkdir "$OUTDIR"
mkdir -p "$OUTDIR/usr/bin" "$OUTDIR/usr/lib" mkdir -p "$OUTDIR/usr/bin" "$OUTDIR/usr/lib"
echo "Copying binary and resources..." echo "Copying binary and resources..."
cp -a "$BUILDDIR/bin/$BINARY" "$BUILDDIR/bin/resources" "$BUILDDIR/bin/translations" "$OUTDIR/usr/bin" cp -a "$BUILDDIR/bin/duckstation-qt" "$BUILDDIR/bin/resources" "$BUILDDIR/bin/translations" "$OUTDIR/usr/bin"
# Patch RPATH so the binary goes hunting for shared libraries in the AppDir instead of system. # Patch RPATH so the binary goes hunting for shared libraries in the AppDir instead of system.
echo "Patching RPATH in ${BINARY}..." echo "Patching RPATH in duckstation-qt..."
patchelf --set-rpath '$ORIGIN/../lib' "$OUTDIR/usr/bin/$BINARY" patchelf --set-rpath '$ORIGIN/../lib' "$OUTDIR/usr/bin/duckstation-qt"
# Libraries we pull in from the system. # Libraries we pull in from the system.
echo "Copying system libraries..." echo "Copying system libraries..."
@@ -275,34 +260,32 @@ for lib in "${DEPLIBS[@]}"; do
"$STRIP" "$OUTDIR/usr/lib/$blib" "$STRIP" "$OUTDIR/usr/lib/$blib"
done done
if [ "${ADD_QT_LIBS}" == true ]; then echo "Copying Qt libraries..."
echo "Copying Qt libraries..." for lib in "${QTLIBS[@]}"; do
for lib in "${QTLIBS[@]}"; do cp -avL "$DEPSDIR/lib/$lib" "$OUTDIR/usr/lib"
cp -avL "$DEPSDIR/lib/$lib" "$OUTDIR/usr/lib" "$STRIP" "$OUTDIR/usr/lib/$lib"
"$STRIP" "$OUTDIR/usr/lib/$lib" done
done
echo "Copying Qt plugins..." echo "Copying Qt plugins..."
mkdir -p $OUTDIR/usr/lib/plugins mkdir -p $OUTDIR/usr/lib/plugins
for plugin in "${QTPLUGINS[@]}"; do for plugin in "${QTPLUGINS[@]}"; do
mkdir -p "$OUTDIR/usr/lib/$plugin" mkdir -p "$OUTDIR/usr/lib/$plugin"
cp -avL "$DEPSDIR/$plugin/"*.so "$OUTDIR/usr/lib/$plugin/" cp -avL "$DEPSDIR/$plugin/"*.so "$OUTDIR/usr/lib/$plugin/"
done done
for so in $(find $OUTDIR/usr/lib/plugins -iname '*.so'); do for so in $(find $OUTDIR/usr/lib/plugins -iname '*.so'); do
# This is ../../ because it's usually plugins/group/name.so # This is ../../ because it's usually plugins/group/name.so
echo "Patching RPATH in ${so}..." echo "Patching RPATH in ${so}..."
patchelf --set-rpath '$ORIGIN/../..' "$so" patchelf --set-rpath '$ORIGIN/../..' "$so"
"$STRIP" "$so" "$STRIP" "$so"
done done
echo "Creating qt.conf..." echo "Creating qt.conf..."
cat > "$OUTDIR/usr/bin/qt.conf" << EOF cat > "$OUTDIR/usr/bin/qt.conf" << EOF
[Paths] [Paths]
Plugins = ../lib/plugins Plugins = ../lib/plugins
EOF EOF
fi
for so in $(find $OUTDIR/usr/lib -maxdepth 1); do for so in $(find $OUTDIR/usr/lib -maxdepth 1); do
if [ -f "$so" ]; then if [ -f "$so" ]; then
@@ -326,7 +309,7 @@ mkdir -p "$OUTDIR/usr/share/metainfo"
"$SCRIPTDIR/generate-metainfo.sh" "$OUTDIR/usr/share/metainfo" "$SCRIPTDIR/generate-metainfo.sh" "$OUTDIR/usr/share/metainfo"
# Link AppRun to main binary. # Link AppRun to main binary.
ln -s "usr/bin/$BINARY" "$OUTDIR/AppRun" ln -s "usr/bin/duckstation-qt" "$OUTDIR/AppRun"
echo "Generating AppImage..." echo "Generating AppImage..."
rm -f "$APPIMAGENAME.AppImage" rm -f "$APPIMAGENAME.AppImage"