name: Build on: push: branches: [master] pull_request: branches: [master] env: WOWEE_AMD_FSR2_REPO: https://github.com/GPUOpen-Effects/FidelityFX-FSR2.git WOWEE_AMD_FSR2_REF: master WOWEE_FFX_SDK_REPO: https://github.com/Kelsidavis/FidelityFX-SDK.git WOWEE_FFX_SDK_REF: main jobs: build: name: Build (${{ matrix.arch }}) runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - arch: x86-64 runner: ubuntu-24.04 deb_arch: amd64 - arch: arm64 runner: ubuntu-24.04-arm deb_arch: arm64 steps: - name: Checkout uses: actions/checkout@v4 with: submodules: true - name: Cache apt packages uses: actions/cache@v4 with: path: /var/cache/apt/archives/*.deb key: apt-${{ matrix.arch }}-${{ hashFiles('.github/workflows/build.yml') }} restore-keys: apt-${{ matrix.arch }}- - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y \ cmake \ build-essential \ pkg-config \ libsdl2-dev \ libglew-dev \ libglm-dev \ libssl-dev \ zlib1g-dev \ libvulkan-dev \ vulkan-tools \ glslc \ libavformat-dev \ libavcodec-dev \ libswscale-dev \ libavutil-dev \ libunicorn-dev \ libx11-dev sudo apt-get install -y libstorm-dev || true - name: Fetch AMD FSR2 SDK run: | rm -rf extern/FidelityFX-FSR2 git clone --depth 1 --branch "${WOWEE_AMD_FSR2_REF}" "${WOWEE_AMD_FSR2_REPO}" extern/FidelityFX-FSR2 rm -rf extern/FidelityFX-SDK git clone --depth 1 --branch "${WOWEE_FFX_SDK_REF}" "${WOWEE_FFX_SDK_REPO}" extern/FidelityFX-SDK - name: Check AMD FSR2 Vulkan permutation headers run: | set -euo pipefail SDK_DIR="$PWD/extern/FidelityFX-FSR2" OUT_DIR="$SDK_DIR/src/ffx-fsr2-api/vk/shaders" if [ -f "$OUT_DIR/ffx_fsr2_accumulate_pass_permutations.h" ]; then echo "AMD FSR2 Vulkan permutation headers detected." else echo "AMD FSR2 Vulkan permutation headers not found in SDK checkout." echo "WoWee CMake will bootstrap vendored headers." fi - name: Check FidelityFX-SDK Vulkan framegen files run: | set -euo pipefail SDK_DIR="$PWD/extern/FidelityFX-SDK/sdk" test -f "$SDK_DIR/include/FidelityFX/host/ffx_frameinterpolation.h" if [ -f "$SDK_DIR/include/FidelityFX/gpu/frameinterpolation/ffx_frameinterpolation_callbacks_glsl.h" ] \ && [ -f "$SDK_DIR/include/FidelityFX/gpu/opticalflow/ffx_opticalflow_callbacks_glsl.h" ] \ && [ -f "$SDK_DIR/src/backends/vk/CMakeShadersFrameinterpolation.txt" ] \ && [ -f "$SDK_DIR/src/backends/vk/CMakeShadersOpticalflow.txt" ]; then echo "FidelityFX-SDK Vulkan framegen files detected." else echo "FidelityFX-SDK Vulkan framegen files are missing in this checkout; build continues." fi - name: Configure (AMD ON) run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWOWEE_ENABLE_AMD_FSR2=ON - name: Assert AMD FSR2 target run: cmake --build build --target wowee_fsr2_amd_vk --parallel $(nproc) - name: Assert AMD FSR3 framegen probe target run: cmake --build build --target wowee_fsr3_framegen_amd_vk_probe --parallel $(nproc) - name: Build run: cmake --build build --parallel $(nproc) - name: Package (DEB) run: cd build && cpack -G DEB - name: Upload DEB uses: actions/upload-artifact@v4 with: name: wowee-linux-${{ matrix.arch }}-deb path: build/wowee-*.deb if-no-files-found: error build-macos: name: Build (macOS ${{ matrix.arch }}) runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - arch: arm64 runner: macos-15 steps: - name: Checkout uses: actions/checkout@v4 with: submodules: true - name: Install dependencies run: | brew install cmake pkg-config sdl2 glew glm openssl@3 zlib ffmpeg unicorn \ stormlib vulkan-loader vulkan-headers shaderc dylibbundler || true # dylibbundler may not be in all brew mirrors; install separately to not block others brew install dylibbundler 2>/dev/null || true - name: Fetch AMD FSR2 SDK run: | rm -rf extern/FidelityFX-FSR2 git clone --depth 1 --branch "${WOWEE_AMD_FSR2_REF}" "${WOWEE_AMD_FSR2_REPO}" extern/FidelityFX-FSR2 rm -rf extern/FidelityFX-SDK git clone --depth 1 --branch "${WOWEE_FFX_SDK_REF}" "${WOWEE_FFX_SDK_REPO}" extern/FidelityFX-SDK - name: Configure run: | BREW=$(brew --prefix) export PKG_CONFIG_PATH="$BREW/lib/pkgconfig:$(brew --prefix ffmpeg)/lib/pkgconfig:$(brew --prefix openssl@3)/lib/pkgconfig:$(brew --prefix vulkan-loader)/lib/pkgconfig:$(brew --prefix shaderc)/lib/pkgconfig" cmake -S . -B build \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH="$BREW" \ -DOPENSSL_ROOT_DIR="$(brew --prefix openssl@3)" \ -DWOWEE_ENABLE_AMD_FSR2=ON - name: Assert AMD FSR2 target run: cmake --build build --target wowee_fsr2_amd_vk --parallel $(sysctl -n hw.logicalcpu) - name: Assert AMD FSR3 framegen probe target run: cmake --build build --target wowee_fsr3_framegen_amd_vk_probe --parallel $(sysctl -n hw.logicalcpu) - name: Build run: cmake --build build --parallel $(sysctl -n hw.logicalcpu) - name: Create .app bundle run: | mkdir -p Wowee.app/Contents/{MacOS,Frameworks,Resources} # Wrapper launch script — cd to MacOS/ so ./assets/ resolves correctly printf '#!/bin/bash\ncd "$(dirname "$0")"\nexec ./wowee_bin "$@"\n' \ > Wowee.app/Contents/MacOS/wowee chmod +x Wowee.app/Contents/MacOS/wowee # Actual binary cp build/bin/wowee Wowee.app/Contents/MacOS/wowee_bin # Assets (exclude proprietary music) rsync -a --exclude='Original Music' build/bin/assets/ \ Wowee.app/Contents/MacOS/assets/ # Bundle dylibs (if dylibbundler available) if command -v dylibbundler &>/dev/null; then dylibbundler -od -b \ -x Wowee.app/Contents/MacOS/wowee_bin \ -d Wowee.app/Contents/Frameworks/ \ -p @executable_path/../Frameworks/ fi # Info.plist cat > Wowee.app/Contents/Info.plist << 'EOF' CFBundleExecutablewowee CFBundleIdentifiercom.wowee.app CFBundleNameWowee CFBundleVersion1.0.0 CFBundleShortVersionString1.0.0 CFBundlePackageTypeAPPL EOF # Ad-hoc codesign (allows running on the local machine) codesign --force --deep --sign - Wowee.app - name: Create DMG run: hdiutil create -volname Wowee -srcfolder Wowee.app -ov -format UDZO Wowee.dmg - name: Upload DMG uses: actions/upload-artifact@v4 with: name: wowee-macos-${{ matrix.arch }}-dmg path: Wowee.dmg if-no-files-found: error build-windows-arm: name: Build (windows-arm64) runs-on: windows-11-arm steps: - name: Checkout uses: actions/checkout@v4 with: submodules: true - name: Set up MSYS2 uses: msys2/setup-msys2@v2 with: msystem: CLANGARM64 update: true install: >- mingw-w64-clang-aarch64-cmake mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-ninja mingw-w64-clang-aarch64-pkgconf mingw-w64-clang-aarch64-SDL2 mingw-w64-clang-aarch64-glew mingw-w64-clang-aarch64-glm mingw-w64-clang-aarch64-openssl mingw-w64-clang-aarch64-zlib mingw-w64-clang-aarch64-ffmpeg mingw-w64-clang-aarch64-unicorn mingw-w64-clang-aarch64-vulkan-loader mingw-w64-clang-aarch64-vulkan-headers mingw-w64-clang-aarch64-shaderc git - name: Build StormLib from source shell: msys2 {0} run: | git clone --depth 1 https://github.com/ladislav-zezula/StormLib.git /tmp/StormLib # Disable x86 inline asm in bundled libtomcrypt (bswapl/movl) — # __MINGW32__ is defined on CLANGARM64 which incorrectly enables x86 asm cmake -S /tmp/StormLib -B /tmp/StormLib/build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_C_FLAGS="-DLTC_NO_BSWAP" \ -DCMAKE_CXX_FLAGS="-DLTC_NO_BSWAP" cmake --build /tmp/StormLib/build --parallel $(nproc) cmake --install /tmp/StormLib/build - name: Fetch AMD FSR2 SDK shell: msys2 {0} run: | rm -rf extern/FidelityFX-FSR2 git clone --depth 1 --branch "${WOWEE_AMD_FSR2_REF}" "${WOWEE_AMD_FSR2_REPO}" extern/FidelityFX-FSR2 rm -rf extern/FidelityFX-SDK git clone --depth 1 --branch "${WOWEE_FFX_SDK_REF}" "${WOWEE_FFX_SDK_REPO}" extern/FidelityFX-SDK - name: Configure shell: msys2 {0} run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWOWEE_ENABLE_AMD_FSR2=ON - name: Assert AMD FSR2 target shell: msys2 {0} run: cmake --build build --target wowee_fsr2_amd_vk --parallel $(nproc) - name: Assert AMD FSR3 framegen probe target shell: msys2 {0} run: cmake --build build --target wowee_fsr3_framegen_amd_vk_probe --parallel $(nproc) - name: Build shell: msys2 {0} run: cmake --build build --parallel $(nproc) - name: Bundle DLLs shell: msys2 {0} run: | ldd build/bin/wowee.exe \ | awk '/=> \// { print $3 }' \ | grep -iv '^/c/Windows' \ | xargs -I{} sh -c 'cp -n "{}" build/bin/ 2>/dev/null || true' - name: Package (ZIP) shell: msys2 {0} run: cd build && cpack -G ZIP - name: Upload ZIP uses: actions/upload-artifact@v4 with: name: wowee-windows-arm64-zip path: build/wowee-*.zip if-no-files-found: error build-windows: name: Build (windows-x86-64) runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v4 with: submodules: true - name: Set up MSYS2 uses: msys2/setup-msys2@v2 with: msystem: MINGW64 update: false install: >- mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc mingw-w64-x86_64-ninja mingw-w64-x86_64-pkgconf mingw-w64-x86_64-SDL2 mingw-w64-x86_64-glew mingw-w64-x86_64-glm mingw-w64-x86_64-openssl mingw-w64-x86_64-zlib mingw-w64-x86_64-ffmpeg mingw-w64-x86_64-unicorn mingw-w64-x86_64-vulkan-loader mingw-w64-x86_64-vulkan-headers mingw-w64-x86_64-shaderc mingw-w64-x86_64-nsis git - name: Build StormLib from source shell: msys2 {0} run: | git clone --depth 1 https://github.com/ladislav-zezula/StormLib.git /tmp/StormLib cmake -S /tmp/StormLib -B /tmp/StormLib/build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" \ -DBUILD_SHARED_LIBS=OFF cmake --build /tmp/StormLib/build --parallel $(nproc) cmake --install /tmp/StormLib/build - name: Fetch AMD FSR2 SDK shell: msys2 {0} run: | rm -rf extern/FidelityFX-FSR2 git clone --depth 1 --branch "${WOWEE_AMD_FSR2_REF}" "${WOWEE_AMD_FSR2_REPO}" extern/FidelityFX-FSR2 rm -rf extern/FidelityFX-SDK git clone --depth 1 --branch "${WOWEE_FFX_SDK_REF}" "${WOWEE_FFX_SDK_REPO}" extern/FidelityFX-SDK - name: Configure shell: msys2 {0} run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DWOWEE_ENABLE_AMD_FSR2=ON - name: Assert AMD FSR2 target shell: msys2 {0} run: cmake --build build --target wowee_fsr2_amd_vk --parallel $(nproc) - name: Assert AMD FSR3 framegen probe target shell: msys2 {0} run: cmake --build build --target wowee_fsr3_framegen_amd_vk_probe --parallel $(nproc) - name: Build shell: msys2 {0} run: cmake --build build --parallel $(nproc) - name: Bundle DLLs shell: msys2 {0} run: | ldd build/bin/wowee.exe \ | awk '/=> \// { print $3 }' \ | grep -iv '^/c/Windows' \ | xargs -I{} sh -c 'cp -n "{}" build/bin/ 2>/dev/null || true' - name: Package (NSIS) shell: msys2 {0} run: cd build && cpack -G NSIS - name: Upload installer uses: actions/upload-artifact@v4 with: name: wowee-windows-x86-64-installer path: build/wowee-*.exe if-no-files-found: error