From a1087ddec8f3fdeef2424cf82a4c70574a7b78c7 Mon Sep 17 00:00:00 2001 From: crueter Date: Sat, 28 Jun 2025 22:11:38 -0400 Subject: [PATCH] Updated CI for GH Actions Builds Signed-off-by: crueter --- .ci/android/build.sh | 2 - .ci/linux/build.sh | 55 ++++++++++++------- .ci/linux/package.sh | 49 ++++++++++++----- .../{build-bqt.bat => build-amd64.bat} | 1 + .ci/windows/build-arm64.bat | 27 +++++++++ .ci/windows/build.sh | 41 ++++++++++++++ .ci/windows/package.sh | 13 +++++ .github/workflows/build.yml | 18 +++--- .github/workflows/trigger_release.yml | 11 ++-- 9 files changed, 166 insertions(+), 51 deletions(-) rename .ci/windows/{build-bqt.bat => build-amd64.bat} (96%) create mode 100755 .ci/windows/build-arm64.bat create mode 100644 .ci/windows/build.sh create mode 100644 .ci/windows/package.sh diff --git a/.ci/android/build.sh b/.ci/android/build.sh index 8e2d904986..1fb721b3b2 100755 --- a/.ci/android/build.sh +++ b/.ci/android/build.sh @@ -16,8 +16,6 @@ chmod +x ./gradlew ./gradlew assembleRelease ./gradlew bundleRelease -ccache -s -v - if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then rm "${ANDROID_KEYSTORE_FILE}" fi diff --git a/.ci/linux/build.sh b/.ci/linux/build.sh index 02d62193c5..745f8244b7 100755 --- a/.ci/linux/build.sh +++ b/.ci/linux/build.sh @@ -1,36 +1,53 @@ -#!/bin/bash -ex +#!/bin/bash -e # SPDX-FileCopyrightText: 2025 eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later export ARCH="$(uname -m)" -if [ "$ARCH" = 'x86_64' ]; then - if [ "$1" = 'v3' ]; then - echo "Making x86-64-v3 optimized build of eden" - ARCH="${ARCH}_v3" - ARCH_FLAGS="-march=x86-64-v3 -O3" - else - echo "Making x86-64 generic build of eden" - ARCH_FLAGS="-march=x86-64 -mtune=generic -O3" - fi +case "$1" in + amd64|"") + echo "Making amd64-v3 optimized build of Eden" + ARCH="amd64_v3" + ARCH_FLAGS="-march=x86-64-v3" + ;; + steamdeck) + echo "Making Steam Deck (Zen 2) optimized build of Eden" + ARCH="steamdeck" + ARCH_FLAGS="-march=znver2 -mtune=znver2" + ;; + rog-ally|allyx) + echo "Making ROG Ally X (Zen 4) optimized build of Eden" + ARCH="rog-ally-x" + ARCH_FLAGS="-march=znver3 -mtune=znver4" # GH actions runner is a Zen 3 CPU, so a small workaround + ;; + legacy) + echo "Making amd64 generic build of Eden" + ARCH=amd64 + ARCH_FLAGS="-march=x86-64 -mtune=generic" + ;; + aarch64) + echo "Making armv8-a build of Eden" + ARCH=aarch64 + ARCH_FLAGS="-march=armv8-a -mtune=generic -w" + ;; + armv9) + echo "Making armv9-a build of Eden" + ARCH=armv9 + ARCH_FLAGS="-march=armv9-a -mtune=generic -w" + ;; +esac - if [ "$1" != '' ]; then - shift - fi -else - echo "Making aarch64 build of eden" - ARCH_FLAGS="-march=armv8-a -mtune=generic -O3" -fi +export ARCH_FLAGS="$ARCH_FLAGS -O3" - -NPROC="$1" +NPROC="$2" if [ -z "$NPROC" ]; then NPROC="$(nproc)" else shift fi +if [ "$1" != "" ]; then shift; fi if [ "$TARGET" = "appimage" ]; then export EXTRA_CMAKE_FLAGS=(-DCMAKE_INSTALL_PREFIX=/usr -DYUZU_ROOM=ON -DYUZU_ROOM_STANDALONE=OFF -DYUZU_CMD=OFF) diff --git a/.ci/linux/package.sh b/.ci/linux/package.sh index 5e8c73d816..21fd72cb08 100755 --- a/.ci/linux/package.sh +++ b/.ci/linux/package.sh @@ -1,4 +1,4 @@ -#!/bin/sh -ex +#!/bin/sh -e # SPDX-FileCopyrightText: 2025 eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later @@ -7,18 +7,38 @@ export APPIMAGE_EXTRACT_AND_RUN=1 export BASE_ARCH="$(uname -m)" -export ARCH="$BASE_ARCH" - -export BUILDDIR="$2" SHARUN="https://github.com/VHSgunzo/sharun/releases/latest/download/sharun-${BASE_ARCH}-aio" URUNTIME="https://github.com/VHSgunzo/uruntime/releases/latest/download/uruntime-appimage-dwarfs-${BASE_ARCH}" -if [ "$ARCH" = 'x86_64' ]; then - if [ "$1" = 'v3' ]; then - ARCH="${ARCH}_v3" - fi -fi +case "$1" in + amd64|"") + echo "Packaging amd64-v3 optimized build of Eden" + ARCH="amd64_v3" + ;; + steamdeck) + echo "Packaging Steam Deck (Zen 2) optimized build of Eden" + ARCH="steamdeck" + ;; + rog-ally|allyx) + echo "Packaging ROG Ally X (Zen 4) optimized build of Eden" + ARCH="rog-ally-x" + ;; + legacy) + echo "Packaging amd64 generic build of Eden" + ARCH=amd64 + ;; + aarch64) + echo "Packaging armv8-a build of Eden" + ARCH=aarch64 + ;; + armv9) + echo "Packaging armv9-a build of Eden" + ARCH=armv9 + ;; +esac + +export BUILDDIR="$2" if [ "$BUILDDIR" = '' ] then @@ -26,7 +46,7 @@ then fi EDEN_TAG=$(git describe --tags --abbrev=0) -echo "Making stable \"$EDEN_TAG\" build" +echo "Making \"$EDEN_TAG\" build" # git checkout "$EDEN_TAG" VERSION="$(echo "$EDEN_TAG")" @@ -39,14 +59,13 @@ cp ../dist/org.eden_emu.eden.svg . ln -sf ./org.eden_emu.eden.svg ./.DirIcon -# TODO(crueter): Nightly +UPINFO='gh-releases-zsync|eden-emulator|Releases|latest|*.AppImage.zsync' + if [ "$DEVEL" = 'true' ]; then sed -i 's|Name=Eden|Name=Eden Nightly|' ./org.eden_emu.eden.desktop - UPINFO="$(echo "$UPINFO" | sed 's|latest|nightly|')" + UPINFO="$(echo "$UPINFO" | sed 's|Releases|nightly|')" fi -UPINFO='gh-releases-zsync|eden-emulator|Releases|latest|*.AppImage.zsync' - LIBDIR="/usr/lib" # Workaround for Gentoo @@ -68,7 +87,7 @@ chmod +x ./sharun-aio xvfb-run -a ./sharun-aio l -p -v -e -s -k \ ../$BUILDDIR/bin/eden* \ $LIBDIR/lib*GL*.so* \ - $LIBDIR/libSDL2*.so* \ + $LIBDIR/libSDL2*.so* \ $LIBDIR/dri/* \ $LIBDIR/vdpau/* \ $LIBDIR/libvulkan* \ diff --git a/.ci/windows/build-bqt.bat b/.ci/windows/build-amd64.bat similarity index 96% rename from .ci/windows/build-bqt.bat rename to .ci/windows/build-amd64.bat index 11f8fc8ee2..ec49240596 100755 --- a/.ci/windows/build-bqt.bat +++ b/.ci/windows/build-amd64.bat @@ -18,6 +18,7 @@ CALL cmake -S . -B build\%chain% ^ -DYUZU_USE_BUNDLED_VCPKG=ON ^ -DYUZU_USE_BUNDLED_SDL2=ON ^ -DYUZU_ENABLE_LTO=ON ^ +-DUSE_CCACHE=ON ^ -G "Ninja" ^ -DYUZU_TESTS=OFF diff --git a/.ci/windows/build-arm64.bat b/.ci/windows/build-arm64.bat new file mode 100755 index 0000000000..dc6fbf0862 --- /dev/null +++ b/.ci/windows/build-arm64.bat @@ -0,0 +1,27 @@ +@echo off + +REM TODO: make this a shell script... + +set chain=%1 + +if not defined DevEnvDir ( + CALL "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" %chain% +) + +CALL mkdir build + +CALL cmake -S . -B build\%chain% ^ +-DCMAKE_BUILD_TYPE=Release ^ +-DENABLE_QT_TRANSLATION=ON ^ +-DUSE_DISCORD_PRESENCE=ON ^ +-DYUZU_USE_BUNDLED_QT=ON ^ +-DYUZU_USE_QT_MULTIMEDIA=ON ^ +-DYUZU_USE_QT_WEB_ENGINE=ON ^ +-DYUZU_USE_BUNDLED_VCPKG=ON ^ +-DYUZU_USE_BUNDLED_SDL2=OFF ^ +-DYUZU_USE_EXTERNAL_SDL2=ON ^ +-DYUZU_ENABLE_LTO=ON ^ +-G "Ninja" ^ +-DYUZU_TESTS=OFF + +CALL cmake --build build\%chain% diff --git a/.ci/windows/build.sh b/.ci/windows/build.sh new file mode 100644 index 0000000000..8346f87378 --- /dev/null +++ b/.ci/windows/build.sh @@ -0,0 +1,41 @@ +#!/bin/bash -e + +# SPDX-FileCopyrightText: 2025 eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later + +if [ "$DEVEL" != "true" ]; then + export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON) +fi + +if [ "$CCACHE" = "true" ]; then + export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DUSE_CCACHE=ON) +fi + +if [ "$BUNDLE_QT" = "true" ]; then + export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_BUNDLED_QT=ON) +else + export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_BUNDLED_QT=OFF) +fi + +export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@) + +mkdir -p build && cd build +cmake .. -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_QT_TRANSLATION=ON \ + -DUSE_DISCORD_PRESENCE=ON \ + -DYUZU_USE_BUNDLED_SDL2=OFF \ + -DYUZU_USE_EXTERNAL_SDL2=ON \ + -DYUZU_TESTS=OFF \ + -DYUZU_CMD=OFF \ + -DYUZU_ROOM_STANDALONE=OFF \ + -DYUZU_USE_QT_MULTIMEDIA=ON \ + -DYUZU_USE_QT_WEB_ENGINE=ON \ + -DYUZU_ENABLE_LTO=ON \ + "${EXTRA_CMAKE_FLAGS[@]}" + +ninja + +windeployqt6 --release --no-compiler-runtime --no-opengl-sw --no-system-dxc-compiler --no-system-d3d-compiler --dir pkg bin/eden.exe + +find pkg -type f -name "*.pdb" -exec rm -fv {} + \ No newline at end of file diff --git a/.ci/windows/package.sh b/.ci/windows/package.sh new file mode 100644 index 0000000000..090697882f --- /dev/null +++ b/.ci/windows/package.sh @@ -0,0 +1,13 @@ +GITDATE=$(git show -s --date=short --format='%ad' | tr -d "-") +GITREV=$(git show -s --format='%h') + +ZIP_NAME="Eden-Windows-${ARCH}-${GITDATE}-${GITREV}.zip" + +mkdir -p artifacts +mkdir -p pack + +cp -r build/pkg/* pack + +cp LICENSE* README* pack/ + +7z a -tzip artifacts/$ZIP_NAME pack/* \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ce113e9ea9..8cf03bfc6c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,13 +69,14 @@ jobs: run: ./.ci/windows/cygwin.bat - name: Configure & Build - id: cmake - shell: cmd - run: ./.ci/windows/build-bqt.bat amd64 yes + shell: bash + run: DEVEL=true ./.ci/windows/build.sh - name: Package artifacts - shell: powershell - run: ./.ci/windows/package.ps1 amd64 yes + shell: bash + run: | + export PATH="${PATH}:/c/Qt/6.9.0/msvc2022_64/bin" + ./.ci/windows/package.sh - name: Upload Windows artifacts uses: forgejo/upload-artifact@v4 @@ -100,10 +101,10 @@ jobs: fetch-tags: true - name: Build - run: TARGET=appimage DEVEL=true ./.ci/linux/build.sh v3 8 + run: TARGET=appimage DEVEL=true ./.ci/linux/build.sh - name: Package AppImage - run: DEVEL=true ./.ci/linux/package.sh v3 &> /dev/null + run: DEVEL=true ./.ci/linux/package.sh &> /dev/null - name: Upload Linux artifacts uses: forgejo/upload-artifact@v4 @@ -116,9 +117,6 @@ jobs: runs-on: android env: - CCACHE_DIR: /home/runner/.cache/ccache - CCACHE_COMPILERCHECK: content - CCACHE_SLOPPINESS: time_macros OS: android TARGET: universal diff --git a/.github/workflows/trigger_release.yml b/.github/workflows/trigger_release.yml index 46ec4d0134..638ab3424b 100644 --- a/.github/workflows/trigger_release.yml +++ b/.github/workflows/trigger_release.yml @@ -64,13 +64,14 @@ jobs: run: ./.ci/windows/cygwin.bat - name: Configure & Build - id: cmake - shell: cmd - run: ./.ci/windows/build-bqt.bat amd64 no + shell: bash + run: DEVEL=false ./.ci/windows/build.sh - name: Package artifacts - shell: powershell - run: ./.ci/windows/package.ps1 amd64 no + shell: bash + run: | + export PATH="${PATH}:/c/Qt/6.9.0/msvc2022_64/bin" + ./.ci/windows/package.sh - name: Upload Windows artifacts uses: forgejo/upload-artifact@v4