From 6b22f9981801c7b3f0c2cba2d60daef82622f8cb Mon Sep 17 00:00:00 2001 From: libretroadmin Date: Thu, 8 Oct 2026 13:09:40 +0200 Subject: [PATCH] ci: build the libretro core and the test tools only The tree is built as a libretro core and nothing else, so the standalone frontends lose their lanes: the Visual Studio and UWP solutions, the Android app, iOS, the macOS app bundle, the AppImage and the manual packaging workflows. PPSSPPHeadless and PPSSPPUnitTest stay, built as named targets so a configure no longer pulls the SDL frontend in, and keep feeding the headless, frametest, qemu and Alpine jobs; the Docker image builds the same way. Two lanes cover builds nothing ran before: the core on an arm64 host, and the CMake build of the core on Linux. --- .github/workflows/appimage.yml | 221 ------------------ .github/workflows/build.yml | 267 ++-------------------- .github/workflows/manual_generate_apk.yml | 81 ------- .github/workflows/manual_generate_ipa.yml | 94 -------- .github/workflows/manual_generate_uwp.yml | 121 ---------- Dockerfile | 2 +- 6 files changed, 24 insertions(+), 762 deletions(-) delete mode 100644 .github/workflows/appimage.yml delete mode 100644 .github/workflows/manual_generate_apk.yml delete mode 100644 .github/workflows/manual_generate_ipa.yml delete mode 100644 .github/workflows/manual_generate_uwp.yml diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml deleted file mode 100644 index 9496b35925..0000000000 --- a/.github/workflows/appimage.yml +++ /dev/null @@ -1,221 +0,0 @@ -name: Generate Linux AppImage -on: - push: - branches: - - master - # For testing. - #- test_arch - tags: - - "v*.*" - paths-ignore: - - '*.{txt,md}' - - 'Tools/**' - - '.{editorconfig,gitattributes,gitignore}' - - 'appveyor.yml' - pull_request: - branches: - - master - paths-ignore: - - '*.{txt,md}' - - 'Tools/**' - - '.{editorconfig,gitattributes,gitignore}' - - 'appveyor.yml' - -env: - SDL_AUDIODRIVER: "dummy" #"disk" - #SDL_VIDEODRIVER: "dummy" - #BUILD_CONFIGURATION: Release #RelWithDebInfo - -jobs: - build: - name: build (${{ matrix.id }}) - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-24.04 - id: x86_64 - - os: ubuntu-24.04-arm - id: aarch64 - - runs-on: ${{ matrix.os }} - container: ghcr.io/pkgforge-dev/archlinux:latest - env: - CCACHE_DIR: ${{ github.workspace }}/.ccache - CCACHE_COMPILERCHECK: content - CCACHE_SLOPPINESS: time_macros - steps: - - name: Install git - run: pacman -Syu --noconfirm git - - - uses: actions/checkout@v7 - with: - fetch-depth: 0 - submodules: recursive - - - name: Check Valid Version Tags - id: valid-tags - shell: bash - run: | - # Fix dubious ownership issue when running git describe inside a container - git config --global --add safe.directory "$PWD" # Alternatively, chown -R $(id -u):$(id -g) $PWD - echo "count=$(git tag -l 'v[0-9]*' | wc -l | tr -d ' ')" >> $GITHUB_OUTPUT - - - name: Fetch upstream tags # required for git describe to return a valid version and to preevnt androidGitVersion from crashing on a new fork - if: steps.valid-tags.outputs.count == '0' - run: | - # TODO: should try to fetch tags from whereever this repo was forked from before fetching from official repo - git remote add upstream https://github.com/hrydgard/ppsspp.git # fetching from official repo as a fallback - git fetch --deepen=15000 --no-recurse-submodules --tags --force upstream || exit 0 - - - name: Set up ccache for ${{ matrix.id }} - uses: actions/cache@v6.1.0 - with: - path: ${{ env.CCACHE_DIR }} - key: ${{ runner.os }}-ccache-${{ matrix.id }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-ccache-${{ matrix.id }}- - - - name: Install dependencies - shell: bash - run: | - #sudo su # Why sudo is needed? - #sudo rm -rf /var/lib/apt/lists/lock # due to permisson issue, why there is such issue? - - # Debian-based - #sudo apt-get update -y -qq - #sudo apt-get install -q -y zsync patchelf xvfb strace - #sudo apt-get install -q -y libstdc++6 ffmpeg libvulkan-dev libglew-dev libsdl2-ttf-dev libsdl2-dev libasound2-dev alsa-base alsa-utils libglu1-mesa pulseaudio linux-modules-extra-$(uname -r) #build-essential #plocate - #sudo updatedb # to update locate database - - # Archlinux - set -ex - - ARCH=$(uname -m) - echo "ARCH=$ARCH" >> $GITHUB_ENV # Export ARCH to be reused on other steps - EXTRA_PACKAGES="https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages/refs/heads/main/useful-tools/get-debloated-pkgs.sh" - - echo "Installing build dependencies..." - echo "---------------------------------------------------------------" - pacman -Syu --noconfirm \ - base-devel \ - curl \ - git \ - cmake \ - ninja \ - clang \ - ccache \ - lld \ - libxss \ - fontconfig \ - gcc-libs \ - glibc \ - libc++ \ - libc++abi \ - glew \ - sdl3 \ - sdl3_ttf \ - python \ - patchelf \ - pipewire \ - pipewire-audio \ - pulseaudio \ - pulseaudio-alsa \ - strace \ - wget \ - xorg-server-xvfb \ - zsync \ - vulkan-headers \ - alsa-lib sndio hidapi ibus jack libdecor libgl libpulse libusb \ - libx11 libxcursor libxext libxinerama libxkbcommon libxrandr libxrender libxss libxtst \ - wayland wayland-protocols - - echo "Installing debloated packages..." - echo "---------------------------------------------------------------" - wget --retry-connrefused --tries=30 "$EXTRA_PACKAGES" -O ./get-debloated-pkgs.sh - chmod +x ./get-debloated-pkgs.sh - ./get-debloated-pkgs.sh --add-mesa libxml2-mini opus-mini llvm-libs-nano - - - name: Build Release - id: version - env: - CC: gcc #clang - CXX: g++ #clang++ - CPPFLAGS: -fno-pie -no-pie -static -Wl,-no_pie -Wl,-rpath,'$ORIGIN/../lib' -Wl,--disable-new-dtags -Wl,--no-undefined #-fno-unwind-tables -fno-exceptions -fno-threadsafe-statics -fno-rtti # -static-libgcc -static-libstdc++ # -fno-plt # -fPIC -D_XOPEN_SOURCE=700 #-D_GNU_SOURCE # -fno-split-stack - #CXXFLAGS: -stdlib=libc++ -lc++abi # clang only - LDFLAGS: -no-pie -static-libgcc -static-libstdc++ #-fuse-ld=lld #-static - USE_CCACHE: 1 - APPIMAGE_EXTRACT_AND_RUN: 1 - run: | - echo "Building..." - uname -m - echo "tag=$(git describe --always)" >> $GITHUB_OUTPUT - - # Export ccache env var(s) - export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - export CCACHE_SLOPPINESS=clang_index_store,ivfsoverlay,include_file_ctime,include_file_mtime,modules,system_headers,time_macros - - gcc --version - g++ --version - - #clang --version - #clang++ --version - - # Build ppsspp - #./b.sh --release --no-sdl2 --no-png - mkdir -p build - pushd build - cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_SYSTEM_LIBPNG=OFF -DUSE_SYSTEM_FFMPEG=OFF -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache .. - make -j$(nproc) - popd - ccache -s -v - - - name: Create AppImage - shell: bash - run: | - # Use dummy soundcard - #sudo locate snd-dummy - #sudo modprobe snd-dummy fake_buffer=0 - - # Test for missing modules - ldd ./build/PPSSPPSDL - - # Create AppImage package - echo "Creating AppImage..." - chmod +x ./build/PPSSPPSDL - chmod +x ./scripts/makeappimage_64-bit.sh - VERSION=$([[ ${GITHUB_REF_TYPE} == tag ]] && echo "$GITHUB_REF_NAME" || echo "${{ steps.version.outputs.tag }}") - echo "Version = $VERSION" - ./scripts/makeappimage_64-bit.sh "$VERSION" - - - name: Prepare artifacts - run: | - find . -name "PPSSPPSDL" - find . -name "PPSSPP*.AppImage" -exec chmod +x '{}' \; - find . -name "PPSSPP*.AppBundle" -exec chmod +x '{}' \; - find . -name "PPSSPP*.zsync" - mkdir artifacts - if [ -e ./PPSSPP*.AppImage ]; then - cp -a ./PPSSPP*.AppImage artifacts/ - fi - if [ -e ./PPSSPP*.AppBundle ]; then - cp -a ./PPSSPP*.AppBundle artifacts/ - fi - if [ -e ./PPSSPP*.zsync ]; then - cp ./PPSSPP*.zsync artifacts/ - fi - - - name: Upload artifacts - uses: actions/upload-artifact@v7 - with: - name: linux-${{ steps.version.outputs.tag }}-${{ matrix.id }} AppImage - path: artifacts/ - - - name: Upload release - uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 - if: github.ref_type == 'tag' - with: - token: ${{ secrets.GITHUB_TOKEN }} - files: | - artifacts/*.AppImage - artifacts/*.AppImage.zsync diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index daf80c751c..1cc971666c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,119 +26,9 @@ env: BUILD_CONFIGURATION: Release jobs: - build-windows: - strategy: - fail-fast: false - matrix: - platform: [x64, ARM64] - - runs-on: windows-latest - steps: - - uses: actions/checkout@v7 - with: - submodules: recursive - - - name: Add MSBuild to PATH - uses: microsoft/setup-msbuild@30375c66a4eea26614e0d39710365f22f8b0af57 # v3.0.0 - - - name: Check Valid Version Tags - id: valid-tags - shell: bash - run: | - # This is required for git describe --always to work for git-version.cpp. - git fetch --deepen=15000 --no-recurse-submodules --tags || exit 0 - echo "count=$(git tag -l 'v[0-9]*' | wc -l | tr -d ' ')" >> $GITHUB_OUTPUT # $env:GITHUB_OUTPUT on pwsh - - - name: Fetch upstream tags # Fallback to fetching tags from upstream - if: steps.valid-tags.outputs.count == '0' - shell: bash - run: | - # TODO: should try to fetch tags from whereever this repo was forked from before fetching from official repo - git remote add upstream https://github.com/hrydgard/ppsspp.git - git fetch --deepen=15000 --no-recurse-submodules --tags --force upstream || exit 0 - - - name: Create git-version.cpp for Windows # Not sure why the one at git-version-gen.cmd couldn't get the version properly. - #if: github.ref_type == 'tag' - run: | - $GIT_VERSION=git describe --always - echo "Num of Valid Tags = ${{ steps.valid-tags.outputs.count }}" - echo "Test GitVer = ${{ github.ref_name }} / $GIT_VERSION / ${GITHUB_REF_NAME}" - echo "const char *PPSSPP_GIT_VERSION = `"$GIT_VERSION`";" > git-version.cpp - echo "#define PPSSPP_GIT_VERSION_NO_UPDATE 1" >> git-version.cpp - - # Generate Windows/win-version.h too. - if ($GIT_VERSION.StartsWith("v")) { - $WIN_VERSION_COMMA=$GIT_VERSION -replace '^v', '' -replace '-g[0-9a-f]+$', '' -replace '[-\.]', ',' - echo "Test WinVer = $WIN_VERSION_COMMA" - echo "#define PPSSPP_WIN_VERSION_STRING `"$GIT_VERSION`"" > Windows/win-version.h - echo "#define PPSSPP_WIN_VERSION_COMMA $WIN_VERSION_COMMA" >> Windows/win-version.h - echo "#define PPSSPP_WIN_VERSION_NO_UPDATE 1" >> Windows/win-version.h - } - - - name: Build Windows - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: msbuild /m /p:TrackFileAccess=false /p:Configuration=${{ env.BUILD_CONFIGURATION }} /p:Platform=${{ matrix.platform }} Windows/PPSSPP.sln - - - name: Package build - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: | - mkdir ppsspp - cp PPSSPP*.exe ppsspp/ - cp *.pdb ppsspp/ - cp Windows/*.bat ppsspp/ - cp -r assets ppsspp/assets - - - name: Package headless (non-Win32) - if: matrix.platform != 'Win32' - run: cp Windows/${{ matrix.platform }}/Release/*.exe ppsspp/ - - - name: Package headless (Win32) - if: matrix.platform == 'Win32' - run: cp Windows/Release/*.exe ppsspp/ - - - name: Upload build - uses: actions/upload-artifact@v7 - with: - name: Windows ${{ matrix.platform }} build - path: ppsspp/ - - - name: Create release - if: github.ref_type == 'tag' - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: | - rm ppsspp/PPSSPPHeadless* - rm ppsspp/UnitTest* - rm ppsspp/*.pdb - mkdir releases - Compress-Archive -Path "ppsspp/*" -Update -DestinationPath "releases/PPSSPP-${{ github.ref_name }}-Windows-${{ matrix.platform }}.zip" - - - name: Upload release - uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 - if: github.ref_type == 'tag' - with: - files: releases/*.zip - - build-uwp: - runs-on: windows-latest - steps: - - uses: actions/checkout@v7 - with: - submodules: recursive - - - name: Add MSBuild to PATH - uses: microsoft/setup-msbuild@30375c66a4eea26614e0d39710365f22f8b0af57 # v3.0.0 - - - name: Restore NuGet packages - working-directory: ${{ github.workspace }}/UWP - run: nuget restore PPSSPP_UWP.sln - - - name: Build UWP - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: msbuild /m /p:TrackFileAccess=false /p:Configuration=${{ env.BUILD_CONFIGURATION }} /p:Platform=x64 /p:AppxPackageSigningEnabled=false UWP/PPSSPP_UWP.sln - # Mirrors the two Windows jobs in libretro's own GitLab CI (see .gitlab-ci.yml). The libretro core - # is built by GNU make driving cl.exe/link.exe from an MSYS2 shell, not by the VS solution, so it - # catches MSVC-specific errors that neither build-windows nor the Linux/Android libretro builds do + # is built by GNU make driving cl.exe/link.exe from an MSYS2 shell, so it catches MSVC-specific + # errors that the Linux/Android libretro builds don't # - duplicate symbols in particular, since MSVC emits inline functions that gcc/clang inline away. build-libretro-windows: name: build-libretro-windows (${{ matrix.arch }}) @@ -203,34 +93,6 @@ jobs: shell: msys2 {0} run: make -C libretro -f Makefile -j4 platform=win - test-windows: - runs-on: windows-latest - needs: build-windows - timeout-minutes: 30 - steps: - - uses: actions/checkout@v7 - with: - submodules: false - - - name: Fetch tests - working-directory: ${{ env.GITHUB_WORKSPACE }} - # Doing this to avoid ffmpeg and other large submodules. - run: git submodule update --init pspautotests assets/lang - - - name: Download build - uses: actions/download-artifact@v8 - with: - name: Windows x64 build - path: ppsspp/ - - - name: Execute unit tests - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: ppsspp\\UnitTest.exe ALL - - - name: Execute headless tests - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: python test.py -g --graphics=software - build: name: build (${{ matrix.id }}) strategy: @@ -241,12 +103,12 @@ jobs: extra: test cc: clang cxx: clang++ - args: ./b.sh --headless --unittest + args: ./b.sh --headless --unittest PPSSPPHeadless PPSSPPUnitTest id: clang-normal - os: ubuntu-26.04 cc: gcc cxx: g++ - args: ./b.sh --headless --unittest + args: ./b.sh --headless --unittest PPSSPPHeadless PPSSPPUnitTest id: gcc-normal # Gives the headless tests an arm64 host to run the CPU backends on - the arm64 JIT is a @@ -255,33 +117,9 @@ jobs: extra: test cc: clang cxx: clang++ - args: ./b.sh --headless --unittest + args: ./b.sh --headless --unittest PPSSPPHeadless PPSSPPUnitTest id: clang-arm64 - - os: ubuntu-26.04 - extra: android - cc: clang - cxx: clang++ - args: cd android && ./ab.sh APP_ABI=arm64-v8a UNITTEST=1 HEADLESS=1 - id: android-arm64 - - os: ubuntu-26.04 - extra: android - cc: clang - cxx: clang++ - args: cd android && ./ab.sh APP_ABI=armeabi-v7a UNITTEST=1 HEADLESS=1 - id: android-arm32 - - os: ubuntu-26.04 - extra: android - cc: clang - cxx: clang++ - args: cd android && ./ab.sh APP_ABI=x86_64 UNITTEST=1 HEADLESS=1 - id: android-x86_64 - - os: ubuntu-26.04 - extra: android - cc: clang - cxx: clang++ - args: cd android && ./ab.sh APP_ABI=arm64-v8a OPENXR=1 - id: android-vr - os: ubuntu-26.04 extra: android cc: clang @@ -301,6 +139,20 @@ jobs: cxx: clang++ args: make -C libretro -f Makefile -j2 id: clang-libretro + # The core on an arm64 host: the arm64 JIT and the NEON paths in the codecs. + - os: ubuntu-26.04-arm + extra: libretro + cc: gcc + cxx: g++ + args: make -C libretro -f Makefile -j2 + id: gcc-libretro-arm64 + # The CMake build of the core on Linux, which nothing else here builds. + - os: ubuntu-26.04 + extra: libretro + cc: gcc + cxx: g++ + args: ./b.sh --libretro ppsspp_libretro + id: cmake-libretro - os: ubuntu-26.04 extra: loongarch64 @@ -320,7 +172,7 @@ jobs: extra: test cc: clang cxx: clang++ - args: ./b.sh --headless --unittest --no-png + args: ./b.sh --headless --unittest PPSSPPHeadless PPSSPPUnitTest id: macos - os: macos-latest extra: libretro_mac @@ -328,12 +180,6 @@ jobs: cxx: clang++ args: ./b.sh --libretro id: macos-libretro - - os: macos-latest - extra: ios - cc: clang - cxx: clang++ - args: ./b-ios.sh - id: ios runs-on: ${{ matrix.os }} steps: @@ -371,27 +217,6 @@ jobs: sudo apt-get install -y gcc-14-${{ matrix.extra }}-linux-gnu g++-14-${{ matrix.extra }}-linux-gnu binutils-${{ matrix.extra }}-linux-gnu libgl-dev libglu1-mesa-dev qemu-user sudo cmake/scripts/setup-cross.sh ${{ matrix.extra }} - - name: Install iOS dependencies - if: matrix.id == 'ios' - run: | - brew install ldid dpkg pillow - # Check Xcode version - xcodebuild -version - - - name: Create iOS Version.txt file - if: matrix.id == 'ios' - run: | - # Create Version.txt file (should probably do this during building process) - mkdir -p build-ios/PPSSPP.app - GIT_VERSION=$(git describe --always --tags) - echo ${GIT_VERSION#v} > build-ios/PPSSPP.app/Version.txt - - - name: Create macOS & iOS git-version.cpp for tagged release - if: github.ref_type == 'tag' && (matrix.id == 'macos' || matrix.id == 'ios') - run: | - echo "const char *PPSSPP_GIT_VERSION = \"${GITHUB_REF_NAME}\";" > git-version.cpp - echo "#define PPSSPP_GIT_VERSION_NO_UPDATE 1" >> git-version.cpp - - name: Setup ccache uses: hendrikmuhs/ccache-action@f09c25b45002a07be2955cbe52e8cee55643f89d # v1.2.24 # Disable ccache on macos for now, it's become buggy for some reason. @@ -445,29 +270,10 @@ jobs: python3 test.py -g --graphics=software --cpu=jit-ir --timeout=60 \ --known-failures=${{ matrix.extra }} - - name: Package build - if: matrix.extra == 'test' || matrix.id == 'ios' + - name: Package test tools + if: matrix.extra == 'test' run: | mkdir -p ppsspp - if [ -e build*/$BUILD_CONFIGURATION/PPSSPPSDL ]; then - cp build*/$BUILD_CONFIGURATION/PPSSPPSDL ppsspp/ - elif [ -e build*/PPSSPPSDL.app ]; then - cp -a build*/PPSSPPSDL.app ppsspp/ - # GitHub Actions zipping kills symlinks and permissions. - pushd ppsspp - zip -qry PPSSPPSDL.zip PPSSPPSDL.app - rm -rf PPSSPPSDL.app - popd - elif [ -e build-ios/PPSSPP.app ]; then - # Get the final files generated by b-ios.h script - find build -name 'PPSSPP*.ipa' -exec cp -a '{}' ppsspp/ \; - find build -name 'PPSSPP*.xcarchive' -exec cp -a '{}' ppsspp/ \; - find build -name 'PPSSPP*.deb' -exec cp -a '{}' ppsspp/ \; - find build -name 'org.ppsspp*.deb' -exec cp -a '{}' ppsspp/ \; - elif [ -e build*/PPSSPPSDL ]; then - cp build*/PPSSPPSDL ppsspp/ - cp -r assets ppsspp/assets - fi if [ -e build*/$BUILD_CONFIGURATION/PPSSPPHeadless ]; then cp build*/$BUILD_CONFIGURATION/PPSSPPHeadless ppsspp/ elif [ -e build*/PPSSPPHeadless ]; then @@ -486,33 +292,6 @@ jobs: name: ${{ matrix.os }} build path: ppsspp/ - - name: Upload iOS build - uses: actions/upload-artifact@v7 - if: matrix.id == 'ios' - with: - name: ${{ matrix.id }} build - path: ppsspp/ - - - name: Create macOS release - if: github.ref_type == 'tag' && matrix.id == 'macos' - working-directory: ppsspp - run: mv PPSSPPSDL.zip PPSSPPSDL-macOS-${GITHUB_REF_NAME}.zip - - - name: Upload macOS & iOS release - uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 - if: github.ref_type == 'tag' && (matrix.id == 'macos' || matrix.id == 'ios') - with: - files: | - ppsspp/*.zip - ppsspp/*.ipa - ppsspp/*.deb - body: > - PPSSPP is a cross-platform PSP emulator. - Visit PPSSPP [official website](https://ppsspp.org) - for a [full changelog](https://ppsspp.org/index.html#news) - as well as the [downloads section](https://ppsspp.org/downloads.html) - for other platforms. - test: strategy: fail-fast: false @@ -623,7 +402,7 @@ jobs: - name: Build for testing run: | - ./b.sh --headless --unittest + ./b.sh --headless --unittest PPSSPPHeadless PPSSPPUnitTest - name: Execute unit tests run: | diff --git a/.github/workflows/manual_generate_apk.yml b/.github/workflows/manual_generate_apk.yml deleted file mode 100644 index c2a06e9474..0000000000 --- a/.github/workflows/manual_generate_apk.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: Manual Generate Android APK -on: - workflow_dispatch: - inputs: - - buildVariant: - type: choice - description: 'Build Variant' - required: true - default: 'NormalOptimized' - options: - - NormalOptimized - - NormalDebug - - VROptimized - - VRDebug - - LegacyOptimized - -jobs: - - apk: - name: Generate ${{ github.event.inputs.buildVariant }} APK - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v7 - with: - fetch-depth: 0 - submodules: recursive - - - name: Check Valid Version Tags - id: valid-tags - shell: bash - run: | - echo "count=$(git tag -l 'v[0-9]*' | wc -l | tr -d ' ')" >> $GITHUB_OUTPUT - - - name: Fetch upstream tags # required for git describe to return a valid version and to preevnt androidGitVersion from crashing on a new fork - if: steps.valid-tags.outputs.count == '0' - run: | - # TODO: should try to fetch tags from whereever this repo was forked from before fetching from official repo - git remote add upstream https://github.com/hrydgard/ppsspp.git # fetching from official repo as a fallback - git fetch --deepen=15000 --no-recurse-submodules --tags --force upstream || exit 0 - - - name: Setup JDK - uses: actions/setup-java@v6.0.1 - with: - distribution: 'temurin' - java-version: '17' - cache: 'gradle' - - #- name: Setup SDK # gradlew will install SDK automatically, thus this step not needed - # uses: android-actions/setup-android@v3 - - #- name: Setup NDK # gradle will install NDK (side by side) automatically, thus explictly seting up NDK here will cause not enough storage issue when building debug variant - # uses: nttld/setup-ndk@v1 - # with: - # ndk-version: r21e - - - name: Test androidGitVersion - run: | - echo "count=${{steps.valid-tags.outputs.count}}" - gradle --quiet androidGitVersion - - - name: Assemble APK - run: ./gradlew assemble${{ github.event.inputs.buildVariant }} --stacktrace - - #- name: Gradle Test - # run: bash ./gradlew test${{ github.event.inputs.buildVariant }}UnitTest --stacktrace - - - name: Package build - run: | - find . -name "*.apk" - mkdir ppsspp - if [ -e android/build/*/apk/*/*/*.apk ]; then - cp android/build/*/apk/*/*/*.apk ppsspp/ - fi - - - name: Upload artifact - uses: actions/upload-artifact@v7 - with: - name: android-${{ github.event.inputs.buildVariant }} build - path: ppsspp/ diff --git a/.github/workflows/manual_generate_ipa.yml b/.github/workflows/manual_generate_ipa.yml deleted file mode 100644 index 0decea4490..0000000000 --- a/.github/workflows/manual_generate_ipa.yml +++ /dev/null @@ -1,94 +0,0 @@ -name: Manual Generate iOS IPA/DEB -on: - workflow_dispatch: {} - -jobs: - ios: - name: Generate IPA & DEB - runs-on: macos-latest - - steps: - - uses: actions/checkout@v7 - with: - fetch-depth: 0 - submodules: recursive - - - name: Check Valid Version Tags - id: valid-tags - shell: bash - run: | - echo "count=$(git tag -l 'v[0-9]*' | wc -l | tr -d ' ')" >> $GITHUB_OUTPUT - - - name: Fetch upstream tags # required for git describe to return a valid version on a new fork - if: steps.valid-tags.outputs.count == '0' - run: | - # TODO: should try to fetch tags from whereever this repo was forked from before fetching from official repo - git remote add upstream https://github.com/hrydgard/ppsspp.git # fetching from official repo as a fallback - git fetch --deepen=15000 --no-recurse-submodules --tags --force upstream || exit 0 - - - name: Set Env Var(s) - run: | - echo "GIT_VERSION=$(git describe --always)" >> $GITHUB_ENV - - - name: Install iOS dependencies - run: | - brew install ldid dpkg pillow - # Check Xcode version - xcodebuild -version - # List available Xcode versions - ls /Applications | grep Xcode - # Select a specific Xcode version. The recommended Xcode version is 9.4.1 according to https://github.com/Halo-Michael/ppsspp-builder - #sudo xcode-select -s /Applications/Xcode_15.2.app/Contents/Developer - - - name: Create git-version.cpp & Version.txt - run: | - echo "const char *PPSSPP_GIT_VERSION = \"${GIT_VERSION}\";" > git-version.cpp - echo "#define PPSSPP_GIT_VERSION_NO_UPDATE 1" >> git-version.cpp - # Create Version.txt file (should probably do this during building process) - mkdir -p build-ios/PPSSPP.app - echo ${GIT_VERSION#v} > build-ios/PPSSPP.app/Version.txt - - - name: Setup ccache - uses: hendrikmuhs/ccache-action@f09c25b45002a07be2955cbe52e8cee55643f89d # v1.2.24 - with: - key: ios - create-symlink: true - - - name: Execute build - env: - CC: clang - CXX: clang++ - USE_CCACHE: 1 - run: | - export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - export CCACHE_SLOPPINESS=pch_defines,clang_index_store,ivfsoverlay,include_file_ctime,include_file_mtime,modules,system_headers,time_macros - export CCACHE_FILECLONE=true - export CCACHE_DEPEND=true - export CCACHE_COMPILERCHECK=content - ./b-ios.sh - - - name: Prepare artifacts - run: | - # Testing file location ... - find . -name "*.app" - mkdir ppsspp - if [ -e build-ios/PPSSPP.app ]; then - # Get the final files generated by b-ios.h script - find build -name 'PPSSPP*.ipa' -exec cp -a '{}' ppsspp/ \; - find build -name 'PPSSPP*.xcarchive' -exec cp -a '{}' ppsspp/ \; - find build -name 'PPSSPP*.deb' -exec cp -a '{}' ppsspp/ \; - find build -name 'org.ppsspp*.deb' -exec cp -a '{}' ppsspp/ \; - fi - - - name: Upload IPA artifact - uses: actions/upload-artifact@v7 - with: - name: iOS-IPA build - path: ppsspp/*.ipa - - - name: Upload DEB artifact - uses: actions/upload-artifact@v7 - with: - name: iOS-DEB build - path: ppsspp/*.deb - diff --git a/.github/workflows/manual_generate_uwp.yml b/.github/workflows/manual_generate_uwp.yml deleted file mode 100644 index 8995d81ce1..0000000000 --- a/.github/workflows/manual_generate_uwp.yml +++ /dev/null @@ -1,121 +0,0 @@ -name: Manual Generate UWP MSIX/MSIXBundle -on: - workflow_dispatch: - inputs: - - buildConfiguration: - type: choice - description: 'Build Configuration' - required: true - default: 'Release' - options: - - Release - - Debug - - buildPlatform: - type: choice - description: 'Build Platform' - required: true - default: 'Bundle' - options: - - Bundle - - x64 - - ARM64 - - signedPackage: - type: boolean - description: 'Signed Package' - required: true - default: true - -jobs: - - build-uwp: - name: Generate ${{ github.event.inputs.buildConfiguration }} ${{ github.event.inputs.buildPlatform }} UWP - runs-on: windows-latest - - steps: - - uses: actions/checkout@v7 - with: - fetch-depth: 0 - submodules: recursive - - - name: Check Valid Version Tags - id: valid-tags - shell: bash - run: | - echo "count=$(git tag -l 'v[0-9]*' | wc -l | tr -d ' ')" >> $GITHUB_OUTPUT # $env:GITHUB_OUTPUT on pwsh - - - name: Fetch upstream tags # required for git describe to return a valid version on a new fork - if: steps.valid-tags.outputs.count == '0' - run: | - # TODO: should try to fetch tags from whereever this repo was forked from before fetching from official repo - git remote add upstream https://github.com/hrydgard/ppsspp.git # fetching from official repo as a fallback - git fetch --deepen=15000 --no-recurse-submodules --tags --force upstream || exit 0 - - - name: Add MSBuild to PATH - uses: microsoft/setup-msbuild@30375c66a4eea26614e0d39710365f22f8b0af57 # v3.0.0 - - #- name: Setup cache # We probably need something like MSBuildCache for MSBuild to be able to use cache properly - # id: cache-uwp - # uses: actions/cache@v3 - # with: - # path: | - # UWP/${{ github.event.inputs.buildPlatform }}/${{ github.event.inputs.buildConfiguration }}/** - # key: uwp-${{ github.event.inputs.buildConfiguration }}-${{ github.event.inputs.buildPlatform }} - - - name: Testing values - run: | - # Testing values ... - #env - echo "Content of [env.GITHUB_WORKSPACE] = ${env.GITHUB_WORKSPACE}" - echo "Content of [[env.GITHUB_WORKSPACE]] = ${{env.GITHUB_WORKSPACE}}" - echo "Content of [env:GITHUB_WORKSPACE] = ${env:GITHUB_WORKSPACE}" - echo "Content of [github.workspace] = ${github.workspace}" - echo "Content of [[github.workspace]] = ${{github.workspace}}" - echo "double ${{ github.event.inputs.buildConfiguration }}" - echo ${{github.workspace}} - echo "count=${{steps.valid-tags.outputs.count}}" - echo "single ${ github.event.inputs.buildConfiguration }" - echo $env:GITHUB_WORKSPACE - - - name: Restore NuGet packages - working-directory: ${{ github.workspace }}/UWP - run: | - nuget restore PPSSPP_UWP.sln - - - name: Execute MSIX build - working-directory: ${{ github.workspace }} - env: - INCLUDE_SYMBOLS: ${{ github.event.inputs.buildConfiguration == 'Debug' && 'true' || 'false' }} - if: github.event.inputs.buildPlatform != 'Bundle' - run: | - echo "include symbols = ${{ env.INCLUDE_SYMBOLS }}" - msbuild UWP/PPSSPP_UWP.sln /m /p:TrackFileAccess=false /p:Configuration=${{ github.event.inputs.buildConfiguration }} /p:Platform=${{ github.event.inputs.buildPlatform }} /p:IncludeSymbols=${{ env.INCLUDE_SYMBOLS }} /p:AppxSymbolPackageEnabled=${{ env.INCLUDE_SYMBOLS }} /p:AppxPackageSigningEnabled=${{ github.event.inputs.signedPackage }} /p:PackageCertificateKeyFile=PPSSPP_UWP_TemporaryKey.pfx /p:AppxBundle=Never /p:UapAppxPackageBuildMode=SideloadOnly /p:AppxBundlePlatforms="${{ github.event.inputs.buildPlatform }}" - - - name: Execute MSIXBundle build - working-directory: ${{ github.workspace }} - env: - INCLUDE_SYMBOLS: ${{ github.event.inputs.buildConfiguration == 'Debug' && 'true' || 'false' }} - if: github.event.inputs.buildPlatform == 'Bundle' - run: | - echo "include symbols = ${{ env.INCLUDE_SYMBOLS }}" - msbuild UWP/PPSSPP_UWP.sln /m /p:TrackFileAccess=false /p:Configuration=${{ github.event.inputs.buildConfiguration }} /p:Platform=x64 /p:IncludeSymbols=${{ env.INCLUDE_SYMBOLS }} /p:AppxSymbolPackageEnabled=${{ env.INCLUDE_SYMBOLS }} /p:AppxPackageSigningEnabled=${{ github.event.inputs.signedPackage }} /p:PackageCertificateKeyFile=PPSSPP_UWP_TemporaryKey.pfx /p:AppxBundle=Always /p:UapAppxPackageBuildMode=SideloadOnly /p:AppxBundlePlatforms="x64|ARM64" - - - name: Package build - working-directory: ${{ github.workspace }} - run: | - # Testing file location ... - #find . -name "PPSSPP*.exe" - #find . -name "*.appx*" - #find . -name "*.msix*" - mkdir ppsspp - #ls UWP/AppPackages/PPSSPP_UWP - cp -r UWP/AppPackages/PPSSPP_UWP/*.* ppsspp/ - #ls ppsspp - - - name: Upload artifact - uses: actions/upload-artifact@v7 - with: - name: UWP-${{ github.event.inputs.buildConfiguration }}-${{ github.event.inputs.buildPlatform }} build - path: ppsspp/ diff --git a/Dockerfile b/Dockerfile index f19491406f..c26162bf42 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ COPY . /src RUN apk add build-base wget git bash cmake python3 glu-dev sdl3-dev sdl3_ttf-dev RUN cd src/ffmpeg && ./linux_x86-64.sh -RUN cd src && ./b.sh --headless +RUN cd src && ./b.sh --headless PPSSPPHeadless # Second stage FROM alpine:latest