name: generate-builds on: push: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: generate-soh-otr: runs-on: ${{ (vars.LINUX_RUNNER && fromJSON(vars.LINUX_RUNNER)) || 'ubuntu-latest' }} steps: - uses: actions/checkout@v3 with: submodules: true - name: ccache uses: hendrikmuhs/ccache-action@v1.2.11 with: key: ${{ runner.os }}-otr-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-otr-ccache-${{ github.ref }} ${{ runner.os }}-otr-ccache- - name: Install dependencies if: ${{ !vars.LINUX_RUNNER }} run: | sudo apt-get update sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) - name: Cache build folders uses: actions/cache@v4 with: key: ${{ runner.os }}-otr-build-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-otr-build-${{ github.ref }} ${{ runner.os }}-otr-build- path: | build-cmake SDL2-2.28.5 - name: Install latest SDL if: ${{ !vars.LINUX_RUNNER }} run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "SDL2-2.28.5" ]; then wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz tar -xzf SDL2-2.28.5.tar.gz fi cd SDL2-2.28.5 ./configure --enable-hidapi-libusb make -j 10 sudo make install sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ - name: Install latest tinyxml2 run: | sudo apt-get remove libtinyxml2-dev export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "tinyxml2-10.0.0" ]; then wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz tar -xzf 10.0.0.tar.gz fi cd tinyxml2-10.0.0 mkdir build cd build cmake .. make sudo make install - name: Generate soh.otr run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release cmake --build build-cmake --config Release --target GenerateSohOtr - uses: actions/upload-artifact@v4 with: name: soh.otr path: soh.otr retention-days: 1 build-macos: needs: generate-soh-otr runs-on: ${{ (vars.MAC_RUNNER && fromJSON(vars.MAC_RUNNER)) || 'macos-12' }} steps: - uses: actions/checkout@v3 with: submodules: true - name: ccache uses: hendrikmuhs/ccache-action@v1.2.11 with: key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-ccache-${{ github.ref }} ${{ runner.os }}-ccache- - name: Install gtar wrapper if: ${{ !vars.MAC_RUNNER }} run: | sudo mv /usr/local/bin/gtar /usr/local/bin/gtar.orig sudo cp .github/workflows//gtar /usr/local/bin/gtar sudo chmod +x /usr/local/bin/gtar - name: Cache MacPorts id: cache-macports if: ${{ !vars.MAC_RUNNER }} uses: actions/cache@v2 with: path: /opt/local/ key: ${{ runner.os }}-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }} restore-keys: | ${{ runner.os }}-macports- - name: Install MacPorts (if necessary) if: ${{ !vars.MAC_RUNNER }} run: | if [ -d /opt/local/ ]; then echo "MacPorts already installed" else wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-12-Monterey.pkg sudo installer -pkg ./MacPorts-2.9.3-12-Monterey.pkg -target / fi echo "/opt/local/bin:/opt/local/sbin" >> $GITHUB_PATH - name: Install dependencies if: ${{ !vars.MAC_RUNNER }} run: | brew uninstall --ignore-dependencies libpng libzip sudo port install $(cat .github/workflows/macports-deps.txt) brew install ninja - name: Download soh.otr uses: actions/download-artifact@v4 with: name: soh.otr - name: Build SoH run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DBUILD_REMOTE_CONTROL=1 cmake --build build-cmake --config Release --parallel 10 mv soh.otr build-cmake/soh (cd build-cmake && cpack) mv _packages/*.dmg SoH.dmg mv README.md readme.txt - name: Upload build uses: actions/upload-artifact@v4 with: name: soh-mac path: | SoH.dmg readme.txt build-linux: needs: generate-soh-otr strategy: fail-fast: true matrix: include: - os: ubuntu-20.04 gcc: 10 archive-suffix: compatibility - os: ubuntu-22.04 gcc: 12 archive-suffix: performance runs-on: ${{ (matrix.os == 'ubuntu-20.04' && ((vars.LINUX_COMPATIBILITY_RUNNER && fromJSON(vars.LINUX_COMPATIBILITY_RUNNER)) || matrix.os)) || (matrix.os == 'ubuntu-22.04' && ((vars.LINUX_PERFORMANCE_RUNNER && fromJSON(vars.LINUX_PERFORMANCE_RUNNER)) || matrix.os)) }} steps: - uses: actions/checkout@v3 with: submodules: true - name: Install dependencies if: ${{ (matrix.os == 'ubuntu-20.04' && !vars.LINUX_COMPATIBILITY_RUNNER) || (matrix.os == 'ubuntu-22.04' && !vars.LINUX_PERFORMANCE_RUNNER) }} run: | sudo apt-get update sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) - name: ccache uses: hendrikmuhs/ccache-action@v1.2.11 with: key: ${{ matrix.os }}-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ matrix.os }}-ccache-${{ github.ref }} ${{ matrix.os }}-ccache- - name: Cache build folders uses: actions/cache@v4 with: key: ${{ matrix.os }}-build-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ matrix.os }}-build-${{ github.ref }} ${{ matrix.os }}-build- path: | SDL2-2.28.5 SDL2_net-2.2.0 - name: Install latest SDL if: ${{ (matrix.os == 'ubuntu-20.04' && !vars.LINUX_COMPATIBILITY_RUNNER) || (matrix.os == 'ubuntu-22.04' && !vars.LINUX_PERFORMANCE_RUNNER) }} run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "SDL2-2.28.5" ]; then wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz tar -xzf SDL2-2.28.5.tar.gz fi cd SDL2-2.28.5 ./configure --enable-hidapi-libusb make -j 10 sudo make install sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ - name: Install latest libzip if: ${{ (matrix.os == 'ubuntu-20.04' && !vars.LINUX_COMPATIBILITY_RUNNER) }} run: | sudo apt-get remove libzip-dev zipcmp zipmerge ziptool export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "libzip-1.10.1" ]; then wget https://libzip.org/download/libzip-1.10.1.tar.gz tar -xzvf libzip-1.10.1.tar.gz fi cd libzip-1.10.1 mkdir build cd build cmake .. make sudo make install - name: Install latest nlohmann if: ${{ (matrix.os == 'ubuntu-20.04' && !vars.LINUX_COMPATIBILITY_RUNNER) }} run: | sudo apt-get remove nlohmann-json3-dev export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "json-3.11.3" ]; then wget https://github.com/nlohmann/json/archive/refs/tags/v3.11.3.tar.gz tar -xzvf v3.11.3.tar.gz fi cd json-3.11.3 mkdir build cd build cmake .. make sudo make install - name: Install latest tinyxml2 if: ${{ (matrix.os == 'ubuntu-20.04' && !vars.LINUX_COMPATIBILITY_RUNNER) || (matrix.os == 'ubuntu-22.04' && !vars.LINUX_PERFORMANCE_RUNNER) }} run: | sudo apt-get remove libtinyxml2-dev export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "tinyxml2-10.0.0" ]; then wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz tar -xzf 10.0.0.tar.gz fi cd tinyxml2-10.0.0 mkdir build cd build cmake .. make sudo make install - name: Install latest SDL_net if: ${{ (matrix.os == 'ubuntu-20.04' && !vars.LINUX_COMPATIBILITY_RUNNER) || (matrix.os == 'ubuntu-22.04' && !vars.LINUX_PERFORMANCE_RUNNER) }} run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" if [ ! -d "SDL2_net-2.2.0" ]; then wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz tar -xzf SDL2_net-2.2.0.tar.gz fi cd SDL2_net-2.2.0 ./configure make -j 10 sudo make install sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/ - name: Download soh.otr uses: actions/download-artifact@v4 with: name: soh.otr - name: Build SoH run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_REMOTE_CONTROL=1 cmake --build build-cmake --config Release -j3 (cd build-cmake && cpack -G External) mv README.md readme.txt mv build-cmake/*.appimage soh.appimage env: CC: gcc-${{ matrix.gcc }} CXX: g++-${{ matrix.gcc }} - name: Upload build uses: actions/upload-artifact@v4 with: name: soh-linux-${{ matrix.archive-suffix }} path: | soh.appimage readme.txt build-windows: needs: generate-soh-otr runs-on: ${{ (vars.WINDOWS_RUNNER && fromJSON(vars.WINDOWS_RUNNER)) || 'windows-latest' }} steps: - name: Install dependencies if: ${{ !vars.WINDOWS_RUNNER }} run: | choco install ninja Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue - uses: actions/checkout@v3 with: submodules: true - name: ccache uses: hendrikmuhs/ccache-action@v1.2.11 with: variant: sccache max-size: "1G" key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-ccache-${{ github.ref }} ${{ runner.os }}-ccache- - name: Cache build folder uses: actions/cache@v4 with: save-always: true key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-build-${{ github.ref }} ${{ runner.os }}-build- path: | build-windows vcpkg - name: Configure Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1 - name: Build SoH env: VCPKG_ROOT: ${{github.workspace}}/vcpkg run: | set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DBUILD_REMOTE_CONTROL=1 cmake --build build-windows --config Release --parallel 10 mkdir soh-windows mv ./x64/Release/soh.exe ./soh-windows/soh.exe mkdir soh-windows/debug mkdir soh-windows/mods New-Item soh-windows/mods/custom_otr_files_go_here.txt -type file mv ./x64/Release/soh.pdb ./soh-windows/debug/soh.pdb mv ./README.md ./soh-windows/readme.txt mv ./build-windows/gamecontrollerdb.txt ./soh-windows/gamecontrollerdb.txt mv ./x64/Release/assets ./soh-windows - name: Download soh.otr uses: actions/download-artifact@v4 with: name: soh.otr path: soh-windows - name: Upload build uses: actions/upload-artifact@v4 with: name: soh-windows path: soh-windows