name: Build Cemu on: pull_request_target: paths-ignore: - "*.md" types: - opened - synchronize - reopened push: paths-ignore: - "*.md" branches: - main workflow_call: inputs: deploymode: required: false type: string env: VCPKG_ROOT: "${{github.workspace}}/dependencies/vcpkg" VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite' jobs: build-ubuntu: runs-on: ubuntu-20.04 env: install_vulkan_folder: "$GITHUB_WORKSPACE/vulkan_sdk" install_vulkan_version: "1.3.216.0" steps: - name: "Checkout repo" uses: actions/checkout@v3 with: submodules: "recursive" - name: Setup release mode parameters (for deploy) if: ${{ inputs.deploymode == 'release' }} run: | echo "BUILD_MODE=release" >> $GITHUB_ENV echo "BUILD_FLAGS=-DPUBLIC_RELEASE=ON" >> $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: "Install system dependencies" run: | sudo apt update -qq sudo apt install -y ninja-build cmake libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev freeglut3-dev clang-12 nasm wget https://sdk.lunarg.com/sdk/download/${{ env.install_vulkan_version }}/linux/vulkansdk-linux-x86_64-${{ env.install_vulkan_version }}.tar.gz -q -O vulkansdk.tar.gz mkdir -p "${{ env.install_vulkan_folder }}" tar -xf vulkansdk.tar.gz --directory ${{ env.install_vulkan_folder }} - name: "Bootstrap vcpkg" run: | export VULKAN_SDK="${{ env.install_vulkan_folder }}/${{ env.install_vulkan_version }}/x86_64" 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: | export VULKAN_SDK="${{ env.install_vulkan_folder }}/${{ env.install_vulkan_version }}/x86_64" mkdir -p build cd build cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja - name: "Build Cemu" run: | cd build ninja - name: Upload artifact uses: actions/upload-artifact@v3 if: ${{ inputs.deploymode == 'release' }} with: name: cemu-bin-linux-x64 path: ./bin/Cemu build-windows: runs-on: windows-2022 env: install_vulkan_folder: "$GITHUB_WORKSPACE/vulkan_sdk" install_vulkan_version: "1.3.216.0" steps: - name: "Checkout repo" uses: actions/checkout@v3 with: submodules: "recursive" - 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=-DPUBLIC_RELEASE=ON" | 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: Prepare Vulkan SDK uses: humbletim/setup-vulkan-sdk@v1.2.0 with: vulkan-query-version: 1.3.216.0 vulkan-components: Vulkan-Headers, Vulkan-Loader vulkan-use-cache: false - name: Workaround run: | Set-Location "C:\Program Files (x86)\Microsoft Visual Studio\Installer\" $InstallPath = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise" $componentsToRemove= @( "Microsoft.VisualStudio.Component.VC.14.32.17.2.ARM" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ARM.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ARM64" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ARM64.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.x86.x64" "Microsoft.VisualStudio.Component.VC.14.32.17.2.x86.x64.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ATL" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ATL.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ATL.ARM" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ATL.ARM.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ATL.ARM64" "Microsoft.VisualStudio.Component.VC.14.32.17.2.ATL.ARM64.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.MFC" "Microsoft.VisualStudio.Component.VC.14.32.17.2.MFC.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.MFC.ARM" "Microsoft.VisualStudio.Component.VC.14.32.17.2.MFC.ARM.Spectre" "Microsoft.VisualStudio.Component.VC.14.32.17.2.MFC.ARM64" "Microsoft.VisualStudio.Component.VC.14.32.17.2.MFC.ARM64.Spectre" ) [string]$workloadArgs = $componentsToRemove | ForEach-Object {" --remove " + $_} $Arguments = ('/c', "vs_installer.exe", 'modify', '--installPath', "`"$InstallPath`"",$workloadArgs, '--quiet', '--norestart', '--nocache') # should be run twice $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden - name: Configure MSVC uses: ilammy/msvc-dev-cmd@v1 with: arch: amd64 toolset: 14.33.31629 spectre: false - 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 cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} - name: "Build Cemu" run: | cd build cmake --build . --config ${{ env.BUILD_MODE }} -j 2 - name: Upload artifact uses: actions/upload-artifact@v3 if: ${{ inputs.deploymode == 'release' }} with: name: cemu-bin-windows-x64 path: ./bin/Cemu.exe