From 01d78b71fea2386560018fb1f7ed2321ae34c3b6 Mon Sep 17 00:00:00 2001 From: nmzik Date: Tue, 28 Jul 2026 19:33:21 +0200 Subject: [PATCH] CI: release Windows and macOS archives (#119) * ci: release Windows and macOS archives * docs: note experimental macOS support --- .github/workflows/build-macos.yml | 86 ------------------ .github/workflows/build.yml | 145 +++++++++++++++++++++++++++--- README.md | 17 ++-- 3 files changed, 143 insertions(+), 105 deletions(-) delete mode 100644 .github/workflows/build-macos.yml diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml deleted file mode 100644 index 1a34c1e..0000000 --- a/.github/workflows/build-macos.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: Build KytyPS5 (macOS) - -on: - workflow_dispatch: - push: - branches: [ main, master ] - pull_request: - -jobs: - build: - runs-on: macos-15 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - submodules: recursive - - - name: Select Xcode 26 - shell: bash - run: | - xcode_path="$(ls -d /Applications/Xcode_26*.app | tail -n 1)" - test -n "$xcode_path" - sudo xcode-select --switch "$xcode_path/Contents/Developer" - xcodebuild -version - - - name: Install build dependencies - shell: bash - run: brew install glslang ninja - - - name: Install Qt 6.10.3 - uses: jurplel/install-qt-action@v4 - with: - version: "6.10.3" - host: mac - target: desktop - arch: clang_64 - cache: true - - - name: Verify toolchain - shell: bash - run: | - git --version - cmake --version - ninja --version - clang++ --version - glslangValidator --version - echo "Host architecture: $(uname -m)" - echo "QT_ROOT_DIR=$QT_ROOT_DIR" - - - name: Configure - shell: bash - run: | - cmake -S src -B _Build/macos \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_OSX_ARCHITECTURES=x86_64 \ - -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER=clang++ \ - -DCMAKE_PREFIX_PATH="$QT_ROOT_DIR" - - - name: Build - shell: bash - run: | - cmake --build _Build/macos --target launcher --parallel - - - name: Install - shell: bash - run: | - cmake --install _Build/macos --prefix _Build/macos/install - - - name: Verify artifacts - shell: bash - run: | - file _Build/macos/install/launcher - file _Build/macos/install/kyty_emulator - lipo _Build/macos/install/launcher -verify_arch x86_64 - lipo _Build/macos/install/kyty_emulator -verify_arch x86_64 - codesign --verify --strict _Build/macos/install/kyty_emulator - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: KytyPS5-macOS-x86_64 - path: _Build/macos/install/** - if-no-files-found: error diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 42ff4ae..450e653 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build KytyPS5 +name: Build and Release KytyPS5 on: workflow_dispatch: @@ -7,7 +7,7 @@ on: pull_request: jobs: - build: + windows: runs-on: windows-2022 steps: @@ -89,45 +89,166 @@ jobs: run: | cmake --install _Build/windows --prefix _Build/windows/install - - name: Upload Artifacts + - name: Upload Windows artifacts uses: actions/upload-artifact@v4 with: - name: KytyPS5 + name: KytyPS5-Windows-x64 path: _Build/windows/install/** if-no-files-found: error + macos: + runs-on: macos-15 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Select Xcode 26 + shell: bash + run: | + xcode_path="$(ls -d /Applications/Xcode_26*.app | tail -n 1)" + test -n "$xcode_path" + sudo xcode-select --switch "$xcode_path/Contents/Developer" + xcodebuild -version + + - name: Install build dependencies + shell: bash + run: brew install glslang ninja + + - name: Install Qt 6.10.3 + uses: jurplel/install-qt-action@v4 + with: + version: "6.10.3" + host: mac + target: desktop + arch: clang_64 + cache: true + + - name: Verify toolchain + shell: bash + run: | + git --version + cmake --version + ninja --version + clang++ --version + glslangValidator --version + echo "Host architecture: $(uname -m)" + echo "QT_ROOT_DIR=$QT_ROOT_DIR" + + - name: Configure + shell: bash + run: | + cmake -S src -B _Build/macos \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_PREFIX_PATH="$QT_ROOT_DIR" + + - name: Build + shell: bash + run: | + cmake --build _Build/macos --target launcher --parallel + + - name: Install + shell: bash + run: | + cmake --install _Build/macos --prefix _Build/macos/install + + - name: Bundle MoltenVK + shell: bash + env: + MOLTENVK_VERSION: v1.4.2 + MOLTENVK_SHA256: f95765a6229cb7b915990a2890ce12ebe36a730b021545d3d52ae69ce4c4024e + run: | + archive="$RUNNER_TEMP/MoltenVK-macos.tar" + package="$RUNNER_TEMP/MoltenVK" + curl --fail --location --retry 3 \ + --output "$archive" \ + "https://github.com/KhronosGroup/MoltenVK/releases/download/$MOLTENVK_VERSION/MoltenVK-macos.tar" + echo "$MOLTENVK_SHA256 $archive" | shasum -a 256 --check + tar -xf "$archive" -C "$RUNNER_TEMP" + install -m 755 \ + "$package/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib" \ + _Build/macos/install/libMoltenVK.dylib + install -m 644 "$package/LICENSE" _Build/macos/install/LICENSE.MoltenVK + codesign --force --sign - --timestamp=none _Build/macos/install/libMoltenVK.dylib + + - name: Verify artifacts + shell: bash + run: | + file _Build/macos/install/launcher + file _Build/macos/install/kyty_emulator + file _Build/macos/install/libMoltenVK.dylib + lipo _Build/macos/install/launcher -verify_arch x86_64 + lipo _Build/macos/install/kyty_emulator -verify_arch x86_64 + lipo _Build/macos/install/libMoltenVK.dylib -verify_arch x86_64 + codesign --verify --strict _Build/macos/install/kyty_emulator + codesign --verify --strict _Build/macos/install/libMoltenVK.dylib + + - name: Upload macOS artifacts + uses: actions/upload-artifact@v4 + with: + name: KytyPS5-macOS-x86_64 + path: _Build/macos/install/** + if-no-files-found: error + release: if: github.event_name == 'push' - needs: build + needs: [windows, macos] runs-on: ubuntu-latest permissions: contents: write steps: - - name: Download build + - name: Download builds uses: actions/download-artifact@v4 with: - name: KytyPS5 - path: KytyPS5 + path: artifacts - name: Set release name shell: bash run: | echo "RELEASE_NAME=KytyPS5-$(date -u +'%Y-%m-%d')-${GITHUB_SHA::7}" >> "$GITHUB_ENV" - - name: Package build + - name: Package builds shell: bash - run: zip -r "$RELEASE_NAME.zip" KytyPS5 + run: | + windows_dir="artifacts/KytyPS5-Windows-x64" + macos_dir="artifacts/KytyPS5-macOS-x86_64" + test -d "$windows_dir" + test -d "$macos_dir" + chmod a+x \ + "$macos_dir/launcher" \ + "$macos_dir/kyty_emulator" \ + "$macos_dir/libMoltenVK.dylib" + ( + cd "$windows_dir" + zip -r "$GITHUB_WORKSPACE/$RELEASE_NAME-Windows-x64.zip" . + ) + ( + cd "$macos_dir" + zip -r "$GITHUB_WORKSPACE/$RELEASE_NAME-macOS-x86_64.zip" . + ) - name: Create release shell: bash env: GH_TOKEN: ${{ github.token }} run: | + assets=( + "$RELEASE_NAME-Windows-x64.zip" + "$RELEASE_NAME-macOS-x86_64.zip" + ) if gh release view "$RELEASE_NAME" --repo "$GITHUB_REPOSITORY" > /dev/null 2>&1; then - gh release upload "$RELEASE_NAME" "$RELEASE_NAME.zip" --clobber --repo "$GITHUB_REPOSITORY" + gh release upload "$RELEASE_NAME" "${assets[@]}" \ + --clobber \ + --repo "$GITHUB_REPOSITORY" else - gh release create "$RELEASE_NAME" "$RELEASE_NAME.zip" \ + gh release create "$RELEASE_NAME" "${assets[@]}" \ --generate-notes \ --repo "$GITHUB_REPOSITORY" \ --target "$GITHUB_SHA" \ diff --git a/README.md b/README.md index 34251a6..0e468c7 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ [![Windows Build](https://github.com/KytyPS5/KytyPS5/actions/workflows/build.yml/badge.svg)](https://github.com/KytyPS5/KytyPS5/actions/workflows/build.yml) [![Linux Build](https://github.com/KytyPS5/KytyPS5/actions/workflows/build-linux.yml/badge.svg)](https://github.com/KytyPS5/KytyPS5/actions/workflows/build-linux.yml) -[![macOS Build](https://github.com/KytyPS5/KytyPS5/actions/workflows/build-macos.yml/badge.svg)](https://github.com/KytyPS5/KytyPS5/actions/workflows/build-macos.yml) -[![Platform](https://img.shields.io/badge/platform-Windows%20x64-0078D4.svg)](#system-requirements) +[![macOS Build](https://github.com/KytyPS5/KytyPS5/actions/workflows/build.yml/badge.svg)](https://github.com/KytyPS5/KytyPS5/actions/workflows/build.yml) +[![Platform](https://img.shields.io/badge/platform-Windows%20x64%20%7C%20macOS%20x86__64-0078D4.svg)](#system-requirements) [![Status](https://img.shields.io/badge/status-early%20development-orange.svg)](#current-status) [![License](https://img.shields.io/badge/license-GPL--2.0-blue.svg)](LICENSE) -KytyPS5 is a free and open-source PlayStation 5 emulator written in C++ for Windows. It is based on -a heavily modified version of [Kyty](https://github.com/InoriRus/Kyty). The project is in an early -stage of development, so compatibility is limited and behavior may change significantly between -builds. +KytyPS5 is a free and open-source PlayStation 5 emulator written in C++ for Windows, with +experimental macOS support. It is based on a heavily modified version of +[Kyty](https://github.com/InoriRus/Kyty). The project is in an early stage of development, so +compatibility is limited and behavior may change significantly between builds. > [!IMPORTANT] > KytyPS5 is not affiliated with Sony Interactive Entertainment or PlayStation. The project does @@ -24,7 +24,10 @@ KytyPS5 can boot 2D games and a selection of 3D games, including titles built wi Development is focused on compatibility and boot reliability. -Linux support is planned, but Windows is the only supported platform at this time. +Linux support is planned. Windows remains the primary supported platform. + +macOS support is experimental. Compatibility with the same games on Windows and macOS has not yet +been tested. ## Bugs and Issues