name: Build Cemu on: 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' jobs: build-ubuntu: runs-on: ubuntu-22.04 steps: - name: "Checkout repo" uses: actions/checkout@v4 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 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 run: mv bin/Cemu_release bin/Cemu - name: Upload artifact uses: actions/upload-artifact@v4 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 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 - 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: 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: Upload artifact uses: actions/upload-artifact@v4 with: name: cemu-bin-windows-x64 path: ./bin/Cemu.exe build-macos: runs-on: macos-14 steps: - name: "Checkout repo" uses: actions/checkout@v4 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 ninja nasm automake libtool - name: "Install molten-vk" run: | curl -L -O https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-macos.tar tar xf MoltenVK-macos.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=x86_64 \ -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 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 with: name: cemu-bin-macos-x64 path: ./bin/Cemu.dmg