mirror of
https://github.com/cemu-project/Cemu.git
synced 2026-07-10 01:24:41 -06:00
328 lines
11 KiB
YAML
328 lines
11 KiB
YAML
name: Build Cemu
|
||
|
||
on:
|
||
workflow_call:
|
||
inputs:
|
||
next_version_major:
|
||
required: false
|
||
type: string
|
||
next_version_minor:
|
||
required: false
|
||
type: string
|
||
|
||
secrets:
|
||
android_store_file_base64:
|
||
required: false
|
||
android_key_store_password:
|
||
required: false
|
||
android_key_alias:
|
||
required: false
|
||
|
||
env:
|
||
VCPKG_ROOT: "${{github.workspace}}/dependencies/vcpkg"
|
||
VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite'
|
||
VCPKG_FORCE_DOWNLOADED_BINARIES: true
|
||
|
||
jobs:
|
||
build-ubuntu:
|
||
continue-on-error: true
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- os: ubuntu-22.04
|
||
arch: x64
|
||
- os: ubuntu-22.04-arm
|
||
arch: arm
|
||
|
||
name: build-ubuntu-${{ matrix.arch }}
|
||
runs-on: ${{ matrix.os }}
|
||
steps:
|
||
- name: "Checkout repo"
|
||
uses: actions/checkout@v6
|
||
with:
|
||
submodules: "recursive"
|
||
fetch-depth: 0
|
||
|
||
- name: Setup release mode parameters
|
||
run: |
|
||
echo "BUILD_MODE=release" >> $GITHUB_ENV
|
||
echo "BUILD_FLAGS=" >> $GITHUB_ENV
|
||
echo "Build mode is release"
|
||
|
||
- name: Setup build flags for version
|
||
if: ${{ inputs.next_version_major != '' }}
|
||
run: |
|
||
echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}"
|
||
echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" >> $GITHUB_ENV
|
||
|
||
- name: "Install system dependencies"
|
||
run: |
|
||
sudo apt update -qq
|
||
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libudev-dev nasm ninja-build libbluetooth-dev
|
||
|
||
- name: Setup vcpkg binary cache
|
||
uses: ./.github/actions/set-up-vcpkg-binary-cache-action
|
||
with:
|
||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||
|
||
- name: "cmake"
|
||
run: |
|
||
cmake -S . -B build ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DCMAKE_C_COMPILER=/usr/bin/clang-15 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-15 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja
|
||
|
||
- name: "Build Cemu"
|
||
run: |
|
||
cmake --build build
|
||
|
||
- name: Prepare artifact
|
||
run: mv bin/Cemu_release bin/Cemu
|
||
|
||
- name: Upload artifact
|
||
uses: actions/upload-artifact@v6
|
||
with:
|
||
name: cemu-bin-linux-${{ matrix.arch }}
|
||
path: ./bin/Cemu
|
||
|
||
build-appimage:
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- os: ubuntu-22.04
|
||
arch: x64
|
||
- os: ubuntu-22.04-arm
|
||
arch: arm
|
||
|
||
name: build-appimage-${{ matrix.arch }}
|
||
runs-on: ${{ matrix.os }}
|
||
needs: build-ubuntu
|
||
steps:
|
||
- name: Checkout Upstream Repo
|
||
uses: actions/checkout@v6
|
||
|
||
- uses: actions/download-artifact@v8
|
||
with:
|
||
name: cemu-bin-linux-${{ matrix.arch }}
|
||
path: bin
|
||
|
||
- name: "Install system dependencies"
|
||
run: |
|
||
sudo apt update -qq
|
||
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev nasm ninja-build appstream libbluetooth-dev
|
||
|
||
- name: "Build AppImage"
|
||
run: |
|
||
export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
|
||
export DEPLOY_GTK_VERSION=3
|
||
dist/linux/appimage.sh ${{ runner.arch }}
|
||
|
||
- name: Upload artifact
|
||
uses: actions/upload-artifact@v6
|
||
with:
|
||
name: cemu-appimage-${{ matrix.arch }}
|
||
path: artifacts
|
||
|
||
build-windows:
|
||
runs-on: windows-2022
|
||
steps:
|
||
- name: "Checkout repo"
|
||
uses: actions/checkout@v6
|
||
with:
|
||
submodules: "recursive"
|
||
|
||
- name: Setup release mode parameters
|
||
run: |
|
||
echo "BUILD_MODE=release" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||
echo "BUILD_FLAGS=" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||
echo "Build mode is release"
|
||
|
||
- name: Setup build flags for version
|
||
if: ${{ inputs.next_version_major != '' }}
|
||
run: |
|
||
echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}"
|
||
echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||
|
||
- name: "Setup cmake"
|
||
uses: jwlawson/actions-setup-cmake@v2
|
||
with:
|
||
cmake-version: '3.29.0'
|
||
|
||
- name: Setup vcpkg binary cache
|
||
uses: ./.github/actions/set-up-vcpkg-binary-cache-action
|
||
with:
|
||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||
|
||
- name: "cmake"
|
||
run: |
|
||
mkdir -p build
|
||
cd build
|
||
echo "[INFO] BUILD_FLAGS: ${{ env.BUILD_FLAGS }}"
|
||
echo "[INFO] BUILD_MODE: ${{ env.BUILD_MODE }}"
|
||
cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DVCPKG_INSTALL_OPTIONS="--clean-after-build"
|
||
|
||
- name: "Build Cemu"
|
||
run: |
|
||
cd build
|
||
cmake --build . --config ${{ env.BUILD_MODE }}
|
||
|
||
- name: Prepare artifact
|
||
run: Rename-Item bin/Cemu_release.exe Cemu.exe
|
||
|
||
- name: Build NSIS Installer
|
||
shell: cmd
|
||
run: |
|
||
cd src\resource
|
||
makensis /DPRODUCT_VERSION=${{ inputs.next_version_major }}.${{ inputs.next_version_minor }} installer.nsi
|
||
|
||
- name: Upload artifact
|
||
uses: actions/upload-artifact@v6
|
||
with:
|
||
name: cemu-bin-windows-x64
|
||
path: ./bin/Cemu.exe
|
||
|
||
- name: Upload NSIS Installer
|
||
uses: actions/upload-artifact@v6
|
||
with:
|
||
name: cemu-installer-windows-x64
|
||
path: ./src/resource/cemu-${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}-windows-x64-installer.exe
|
||
|
||
build-macos:
|
||
runs-on: macos-14
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arch: [x86_64, arm64]
|
||
steps:
|
||
- name: "Checkout repo"
|
||
uses: actions/checkout@v6
|
||
with:
|
||
submodules: "recursive"
|
||
|
||
- name: Setup release mode parameters
|
||
run: |
|
||
echo "BUILD_MODE=release" >> $GITHUB_ENV
|
||
echo "BUILD_FLAGS=" >> $GITHUB_ENV
|
||
echo "Build mode is release"
|
||
|
||
- name: Setup build flags for version
|
||
if: ${{ inputs.next_version_major != '' }}
|
||
run: |
|
||
echo "[INFO] Version ${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}"
|
||
echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEMULATOR_VERSION_MAJOR=${{ inputs.next_version_major }} -DEMULATOR_VERSION_MINOR=${{ inputs.next_version_minor }}" >> $GITHUB_ENV
|
||
|
||
- name: "Install system dependencies"
|
||
run: |
|
||
# Removing azure/bicep and aws to silence warnings in Github Actions
|
||
brew uninstall bicep
|
||
brew untap aws/tap azure/bicep
|
||
brew update
|
||
brew install nasm automake libtool
|
||
|
||
- name: "Install molten-vk"
|
||
run: |
|
||
curl -L -O https://github.com/KhronosGroup/MoltenVK/releases/download/v1.4.1/MoltenVK-macos-privateapi.tar
|
||
tar xf MoltenVK-macos-privateapi.tar
|
||
sudo mkdir -p /usr/local/lib
|
||
sudo cp MoltenVK/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib /usr/local/lib
|
||
|
||
- name: "Setup cmake"
|
||
uses: jwlawson/actions-setup-cmake@v2
|
||
with:
|
||
cmake-version: '3.29.0'
|
||
|
||
- name: Setup vcpkg binary cache
|
||
uses: ./.github/actions/set-up-vcpkg-binary-cache-action
|
||
with:
|
||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||
|
||
- name: "cmake"
|
||
run: |
|
||
mkdir build
|
||
cd build
|
||
cmake .. ${{ env.BUILD_FLAGS }} \
|
||
-DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} \
|
||
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \
|
||
-DMACOS_BUNDLE=ON \
|
||
-G Ninja
|
||
|
||
- name: "Build Cemu"
|
||
run: |
|
||
cmake --build build
|
||
|
||
- name: Prepare artifact
|
||
run: |
|
||
mkdir bin/Cemu_app
|
||
mv bin/Cemu_release.app bin/Cemu_app/Cemu.app
|
||
mv bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu_release bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu
|
||
sed -i '' 's/Cemu_release/Cemu/g' bin/Cemu_app/Cemu.app/Contents/Info.plist
|
||
codesign --entitlements ${{github.workspace}}/src/resource/cemu.macos.entitlements --force --deep --preserve-metadata=entitlements,requirements,flags,runtime --sign - --timestamp --options runtime bin/Cemu_app/Cemu.app/Contents/MacOS/Cemu
|
||
ln -s /Applications bin/Cemu_app/Applications
|
||
hdiutil create ./bin/tmp.dmg -ov -volname "Cemu" -fs HFS+ -srcfolder "./bin/Cemu_app"
|
||
hdiutil convert ./bin/tmp.dmg -format UDZO -o bin/Cemu.dmg
|
||
rm bin/tmp.dmg
|
||
|
||
- name: Upload artifact
|
||
uses: actions/upload-artifact@v6
|
||
with:
|
||
name: cemu-bin-macos-${{ matrix.arch }}
|
||
path: ./bin/Cemu.dmg
|
||
|
||
build-android:
|
||
runs-on: ubuntu-24.04
|
||
|
||
steps:
|
||
- name: Checkout repo
|
||
uses: actions/checkout@v6
|
||
with:
|
||
submodules: "recursive"
|
||
fetch-depth: 0
|
||
|
||
- name: Install system dependencies
|
||
run: |
|
||
sudo apt update -qq
|
||
sudo apt install -y gettext mono-complete
|
||
|
||
- name: Uncompile message catalogs
|
||
run: |
|
||
for mo_file in bin/resources/*/cemu.mo
|
||
do
|
||
echo $mo_file
|
||
language_code=$(basename $(dirname $mo_file))
|
||
po_file=src/android/app/src/main/assets/translations/$language_code/cemu.po
|
||
mkdir -p $(dirname $po_file)
|
||
msgunfmt $mo_file -o $po_file || echo "Failed to uncompile message catalog from $mo_file"
|
||
done
|
||
|
||
- name: Setup vcpkg binary cache
|
||
uses: ./.github/actions/set-up-vcpkg-binary-cache-action
|
||
with:
|
||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||
|
||
- name: Build Cemu
|
||
env:
|
||
ANDROID_STORE_FILE_BASE64: ${{ secrets.android_store_file_base64 }}
|
||
ANDROID_KEY_STORE_PASSWORD: ${{ secrets.android_key_store_password }}
|
||
ANDROID_KEY_ALIAS: ${{ secrets.android_key_alias }}
|
||
EMULATOR_VERSION_MAJOR: ${{ inputs.next_version_major }}
|
||
EMULATOR_VERSION_MINOR: ${{ inputs.next_version_minor }}
|
||
run: |
|
||
export JAVA_HOME=$JAVA_HOME_21_X64
|
||
|
||
cd ./src/android
|
||
|
||
if [[ -n "$ANDROID_STORE_FILE_BASE64" ]]; then
|
||
base64 --decode <<< "${ANDROID_STORE_FILE_BASE64}" > store.jks
|
||
export ANDROID_STORE_FILE=$(pwd)/store.jks
|
||
echo "Android signing store file has been set up."
|
||
else
|
||
echo "No Android signing store file provided. The APK will not be signed with a release key."
|
||
fi
|
||
|
||
./gradlew assembleRelease
|
||
|
||
- name: Upload artifact
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: cemu-bin-android
|
||
path: ./src/android/app/build/outputs/apk/*/*.apk
|