name: Build Cemu on: workflow_call: inputs: deploymode: required: false type: string experimentalversion: required: false type: string env: VCPKG_ROOT: "${{github.workspace}}/dependencies/vcpkg" VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite' jobs: build-ubuntu: runs-on: ubuntu-22.04 steps: - name: "Checkout repo" uses: actions/checkout@v4 with: submodules: "recursive" fetch-depth: 0 - name: "Fetch full history for vcpkg submodule" run: | cd dependencies/vcpkg git fetch --unshallow - name: Setup release mode parameters (for deploy) if: ${{ inputs.deploymode == 'release' }} run: | echo "BUILD_MODE=release" >> $GITHUB_ENV echo "BUILD_FLAGS=" >> $GITHUB_ENV echo "Build mode is release" - name: Setup debug mode parameters (for continous build) if: ${{ inputs.deploymode != 'release' }} run: | echo "BUILD_MODE=debug" >> $GITHUB_ENV echo "BUILD_FLAGS=" >> $GITHUB_ENV echo "Build mode is debug" - name: Setup version for experimental if: ${{ inputs.experimentalversion != '' }} run: | echo "[INFO] Experimental version ${{ inputs.experimentalversion }}" echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEXPERIMENTAL_VERSION=${{ inputs.experimentalversion }}" >> $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 - 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: | 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 if: ${{ inputs.deploymode == 'release' }} run: mv bin/Cemu_release bin/Cemu - name: Upload artifact uses: actions/upload-artifact@v4 if: ${{ inputs.deploymode == 'release' }} with: name: cemu-bin-linux-x64 path: ./bin/Cemu build-appimage: runs-on: ubuntu-22.04 needs: build-ubuntu steps: - name: Checkout Upstream Repo uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: name: cemu-bin-linux-x64 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 - name: "Build AppImage" run: | export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" export DEPLOY_GTK_VERSION=3 dist/linux/appimage.sh - name: Upload artifact uses: actions/upload-artifact@v4 with: name: cemu-appimage-x64 path: artifacts build-windows: runs-on: windows-2022 steps: - name: "Checkout repo" uses: actions/checkout@v4 with: submodules: "recursive" - name: "Fetch full history for vcpkg submodule" run: | cd dependencies/vcpkg git fetch --unshallow - name: Setup release mode parameters (for deploy) if: ${{ inputs.deploymode == 'release' }} 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 debug mode parameters (for continous build) if: ${{ inputs.deploymode != 'release' }} run: | echo "BUILD_MODE=debug" | 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 debug" - name: Setup version for experimental if: ${{ inputs.experimentalversion != '' }} run: | echo "[INFO] Experimental version ${{ inputs.experimentalversion }}" echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEXPERIMENTAL_VERSION=${{ inputs.experimentalversion }}" | 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 if: ${{ inputs.deploymode == 'release' }} run: Rename-Item bin/Cemu_release.exe Cemu.exe - name: Upload artifact uses: actions/upload-artifact@v4 if: ${{ inputs.deploymode == 'release' }} with: name: cemu-bin-windows-x64 path: ./bin/Cemu.exe build-macos: runs-on: macos-12 steps: - name: "Checkout repo" uses: actions/checkout@v4 with: submodules: "recursive" - name: "Fetch full history for vcpkg submodule" run: | cd dependencies/vcpkg git fetch --unshallow - name: Setup release mode parameters (for deploy) if: ${{ inputs.deploymode == 'release' }} run: | echo "BUILD_MODE=release" >> $GITHUB_ENV echo "BUILD_FLAGS=" >> $GITHUB_ENV echo "Build mode is release" - name: Setup debug mode parameters (for continous build) if: ${{ inputs.deploymode != 'release' }} run: | echo "BUILD_MODE=debug" >> $GITHUB_ENV echo "BUILD_FLAGS=" >> $GITHUB_ENV echo "Build mode is debug" - name: Setup version for experimental if: ${{ inputs.experimentalversion != '' }} run: | echo "[INFO] Experimental version ${{ inputs.experimentalversion }}" echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEXPERIMENTAL_VERSION=${{ inputs.experimentalversion }}" >> $GITHUB_ENV - name: "Install system dependencies" run: | brew update brew install llvm@15 ninja nasm molten-vk automake libtool - 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 }} \ -DMACOS_BUNDLE=ON \ -DCMAKE_C_COMPILER=/usr/local/opt/llvm@15/bin/clang \ -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm@15/bin/clang++ \ -G Ninja - name: "Build Cemu" run: | cmake --build build - name: Prepare artifact if: ${{ inputs.deploymode == 'release' }} 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 chmod a+x bin/Cemu_app/Cemu.app/Contents/MacOS/{Cemu,update.sh} 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@v4 if: ${{ inputs.deploymode == 'release' }} with: name: cemu-bin-macos-x64 path: ./bin/Cemu.dmg