Update build.yml #1408
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Cemu | |
| on: | |
| push: | |
| workflow_call: | |
| inputs: | |
| next_version_major: | |
| required: false | |
| type: string | |
| next_version_minor: | |
| required: false | |
| type: string | |
| env: | |
| VCPKG_ROOT: "${{github.workspace}}/dependencies/vcpkg" | |
| VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite' | |
| VCPKG_FORCE_DOWNLOADED_BINARIES: true | |
| jobs: | |
| build-ubuntu: | |
| if: false | |
| 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: "Bootstrap vcpkg" | |
| run: | | |
| bash ./dependencies/vcpkg/bootstrap-vcpkg.sh | |
| - name: 'Setup NuGet Credentials for vcpkg' | |
| shell: 'bash' | |
| run: | | |
| mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ | |
| sources add \ | |
| -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
| -storepasswordincleartext \ | |
| -name "GitHub" \ | |
| -username "${{ github.repository_owner }}" \ | |
| -password "${{ secrets.GITHUB_TOKEN }}" | |
| mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ | |
| setapikey "${{ secrets.GITHUB_TOKEN }}" \ | |
| -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" | |
| - 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: | |
| if: true | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: windows-2022 | |
| arch: x64 | |
| - os: windows-11-arm | |
| arch: arm64 | |
| name: build-windows-${{ matrix.arch }} | |
| runs-on: ${{ matrix.os }} | |
| 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: "Bootstrap vcpkg" | |
| run: | | |
| ./dependencies/vcpkg/bootstrap-vcpkg.bat | |
| - name: 'Setup NuGet Credentials for vcpkg' | |
| shell: 'bash' | |
| run: | | |
| `./dependencies/vcpkg/vcpkg.exe fetch nuget | tail -n 1` \ | |
| sources add \ | |
| -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
| -storepasswordincleartext \ | |
| -name "GitHub" \ | |
| -username "${{ github.repository_owner }}" \ | |
| -password "${{ secrets.GITHUB_TOKEN }}" | |
| `./dependencies/vcpkg/vcpkg.exe fetch nuget | tail -n 1` \ | |
| setapikey "${{ secrets.GITHUB_TOKEN }}" \ | |
| -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" | |
| - 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 | |
| #if: matrix.os == 'windows-2025' | |
| shell: cmd | |
| run: | | |
| cd src\resource | |
| makensis /DPRODUCT_VERSION=${{ inputs.next_version_major }}.${{ inputs.next_version_minor }} /DARCH=${{ matrix.arch }} installer.nsi | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: cemu-bin-windows-${{ matrix.arch }} | |
| path: ./bin/Cemu.exe | |
| - name: Upload NSIS Installer | |
| #if: matrix.os == 'windows-2025' | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: cemu-installer-windows-${{ matrix.arch }} | |
| path: ./src/resource/cemu-${{ inputs.next_version_major }}.${{ inputs.next_version_minor }}-windows-${{ matrix.arch }}-installer.exe | |
| build-macos: | |
| if: false | |
| 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: | | |
| 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: "Bootstrap vcpkg" | |
| run: | | |
| bash ./dependencies/vcpkg/bootstrap-vcpkg.sh | |
| - name: 'Setup NuGet Credentials for vcpkg' | |
| shell: 'bash' | |
| run: | | |
| mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ | |
| sources add \ | |
| -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
| -storepasswordincleartext \ | |
| -name "GitHub" \ | |
| -username "${{ github.repository_owner }}" \ | |
| -password "${{ secrets.GITHUB_TOKEN }}" | |
| mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` \ | |
| setapikey "${{ secrets.GITHUB_TOKEN }}" \ | |
| -source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" | |
| - 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 |