Add handling of unused keys and mouse buttons, rewrite numpad input #2695
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Binaries | |
on: | |
workflow_dispatch: | |
inputs: | |
build-debug-info: | |
description: 'Profile and debug the build process' | |
required: false | |
default: false | |
type: boolean | |
use-ccache: | |
description: 'Enable ccache/sccache' | |
required: false | |
default: true | |
type: boolean | |
pull_request: | |
push: | |
branches: | |
- '**' # every branch | |
- '!no-build-**' # unless marked as no-build | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: Windows | |
os: windows-latest | |
id: win | |
host_id: win | |
extra_flags: '' | |
package_cmd: 'makensis -WX -V3 ./installer/windows/installer.nsi' | |
installer_path: './installer/windows/geode-installer-win.exe' | |
- name: macOS | |
os: macos-latest | |
id: mac | |
host_id: mac | |
extra_flags: > | |
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 | |
-DGEODE_DONT_BUILD_TEST_MODS=1 | |
-DGEODE_DISABLE_PRECOMPILED_HEADERS=OFF | |
package_cmd: './installer/mac/package.sh ./bin/nightly ./installer/mac/geode-installer-mac.pkg' | |
installer_path: './installer/mac/geode-installer-mac.pkg' | |
- name: Android32 | |
os: ubuntu-latest | |
id: android32 | |
host_id: linux | |
extra_flags: > | |
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake | |
-DANDROID_ABI=armeabi-v7a | |
-DANDROID_PLATFORM=android-23 | |
-DGEODE_DONT_BUILD_TEST_MODS=1 | |
package_cmd: '' | |
installer_path: '' | |
- name: Android64 | |
os: ubuntu-latest | |
id: android64 | |
host_id: linux | |
extra_flags: > | |
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake | |
-DANDROID_ABI=arm64-v8a | |
-DANDROID_PLATFORM=android-23 | |
-DGEODE_DONT_BUILD_TEST_MODS=1 | |
package_cmd: '' | |
installer_path: '' | |
name: Build ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
env: | |
CPM_SOURCE_CACHE: ${{ github.workspace }}/cpm-cache | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Prepare for Build Debug Info | |
shell: bash | |
run: | | |
mkdir ./build-debug-info | |
${{ matrix.config.id == 'win' && 'echo "REAL_BASH=C:/Program Files/Git/bin/bash.exe" >> $GITHUB_ENV' || 'echo "REAL_BASH=$BASH" >> $GITHUB_ENV' }} | |
echo "SCCACHE_ERROR_LOG=$GITHUB_WORKSPACE/build-debug-info/sccache-log.txt" >> $GITHUB_ENV | |
echo "SCCACHE_LOG=debug" >> $GITHUB_ENV | |
echo "RUST_BACKTRACE=1" >> $GITHUB_ENV | |
if: inputs.build-debug-info | |
# https://github.com/mozilla/sccache/issues/2090 | |
- name: Download custom sccache | |
uses: robinraju/[email protected] | |
with: | |
repository: cgytrus/sccache | |
latest: true | |
fileName: 'sccache-*-x86_64-apple-darwin.zip' | |
tarBall: false | |
zipBall: false | |
out-file-path: "epic-sccache" | |
if: ${{ matrix.config.id == 'mac' && (github.event_name != 'workflow_dispatch' || inputs.use-ccache) }} | |
- name: Setup custom sccache | |
run: | | |
7z x "epic-sccache/sccache-*-x86_64-apple-darwin.zip" -o"epic-sccache" | |
echo "$GITHUB_WORKSPACE/epic-sccache" >> $GITHUB_PATH | |
chmod +x "epic-sccache/sccache" | |
if: ${{ matrix.config.id == 'mac' && (github.event_name != 'workflow_dispatch' || inputs.use-ccache) }} | |
# https://github.com/hendrikmuhs/ccache-action/pull/182 | |
- name: Setup sccache | |
uses: chirag-droid/ccache-action@main | |
with: | |
variant: sccache | |
key: ${{ matrix.config.id }}-v1 | |
if: ${{ github.event_name != 'workflow_dispatch' || inputs.use-ccache }} | |
- name: Setup CPM Cache | |
uses: actions/cache@v4 | |
with: | |
path: cpm-cache | |
key: cpm-${{ matrix.config.id }}-v1-${{ hashFiles('**/CMakeLists.txt', '**/*.cmake') }} | |
restore-keys: | | |
cpm-${{ matrix.config.id }}-v1- | |
- name: Setup info.rc Cache | |
uses: actions/cache@v4 | |
with: | |
path: build/**/info.rc* | |
key: rc-${{ matrix.config.id }}-v1-${{ hashFiles('VERSION', 'loader/CMakeLists.txt', 'loader/src/platform/windows/info.rc.in') }} | |
if: matrix.config.id == 'win' | |
- name: Install Ninja | |
shell: bash | |
run: | | |
curl -L https://github.com/ninja-build/ninja/releases/latest/download/ninja-${{ matrix.config.host_id }}.zip -o ninja.zip | |
7z x ninja.zip -o"$GITHUB_WORKSPACE/ninja" | |
echo "$GITHUB_WORKSPACE/ninja" >> $GITHUB_PATH | |
- name: Update LLVM | |
shell: bash | |
run: | | |
curl -L https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/LLVM-17.0.6-win64.exe -o llvm-inst.exe | |
7z x llvm-inst.exe -ollvm bin/clang.exe bin/clang++.exe bin/lld-link.exe bin/llvm-rc.exe bin/*.dll lib/clang/*/include/* | |
echo "$GITHUB_WORKSPACE/llvm/bin" >> $GITHUB_PATH | |
if: matrix.config.id == 'win' | |
- name: Download CLI | |
uses: robinraju/[email protected] | |
with: | |
repository: geode-sdk/cli | |
latest: true | |
fileName: '*-${{ matrix.config.host_id }}.zip' | |
tarBall: false | |
zipBall: false | |
out-file-path: "cli" | |
- name: Setup CLI | |
shell: bash | |
run: | | |
7z x "cli/*-${{ matrix.config.host_id }}.zip" -ocli | |
chmod +x cli/geode | |
- name: Setup Breakpad Tools | |
uses: ./.github/actions/setup-dump-sym | |
id: breakpad-tools | |
if: matrix.config.id == 'android32' || matrix.config.id == 'android64' | |
- name: Checkout ninjatracing | |
uses: actions/checkout@v4 | |
with: | |
repository: 'nico/ninjatracing' | |
path: ninjatracing | |
submodules: recursive | |
if: inputs.build-debug-info | |
- name: Configure | |
run: > | |
cmake -B build | |
-DCLI_PATH=${{ github.workspace }}/cli | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo | |
-DCMAKE_C_COMPILER=clang | |
-DCMAKE_CXX_COMPILER=clang++ | |
-DGEODE_CODEGEN_CMAKE_ARGS="-DCMAKE_C_COMPILER=clang;-DCMAKE_CXX_COMPILER=clang++;-G Ninja" | |
-G Ninja | |
${{ inputs.build-debug-info && '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON' || '' }} | |
${{ matrix.config.extra_flags }} | |
${{ inputs.build-debug-info && 'cp ./build/compile_commands.json ./build-debug-info/' || '' }} | |
- name: Build | |
run: | | |
cmake --build build --config RelWithDebInfo --parallel | |
rm bin/nightly/resources/.geode_cache | |
${{ inputs.build-debug-info && 'python3 ./ninjatracing/ninjatracing ./build/.ninja_log > ./build-debug-info/ninja-trace.json' || '' }} | |
${{ inputs.build-debug-info && inputs.use-ccache && 'sccache --show-adv-stats' || '' }} | |
# hardcoding toolchain path :( | |
- name: Post Build | |
run: | | |
${{ steps.breakpad-tools.outputs.binary-path }} ./bin/nightly/Geode.${{ matrix.config.id }}.so -o ./bin/nightly/Geode.${{ matrix.config.id }}.so.sym | |
$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip ./bin/nightly/Geode.${{ matrix.config.id }}.so | |
if: matrix.config.id == 'android32' || matrix.config.id == 'android64' | |
- name: Upload Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: geode-${{ matrix.config.id }} | |
path: ./bin/nightly | |
- name: Package Installer | |
run: ${{ matrix.config.package_cmd }} | |
if: matrix.config.package_cmd != '' | |
- name: Upload Installer | |
uses: actions/upload-artifact@v4 | |
with: | |
name: geode-installer-${{ matrix.config.id }} | |
path: ${{ matrix.config.installer_path }} | |
if: matrix.config.installer_path != '' | |
- name: Preprocess | |
shell: bash | |
run: | | |
mkdir build-debug-info-preprocessed | |
cd build | |
sed 's/\\\\/\//g' compile_commands.json | sed 's/D:\//\/d\//' > uni_compile_commands.json | |
pip install compile-commands | |
compile-commands --file=uni_compile_commands.json --filter_files='.*info\.rc.*' --filter='(.*) -o (.*)((?:/|\\).*)\.(?:obj|o) -c (.*)' --replacement="$REAL_BASH"' --noprofile --norc -c "mkdir -p ../build-debug-info-preprocessed/\g<2> && \g<1> -o ../build-debug-info-preprocessed/\g<2>\g<3>.i -E \g<4>"' -o ../build-debug-info/preprocess_commands.json --run --verbose | |
if: inputs.build-debug-info | |
- name: Upload Build Debug Info | |
uses: actions/upload-artifact@v4 | |
with: | |
name: geode-build-debug-info-${{ matrix.config.id }} | |
path: ./build-debug-info/* | |
if: inputs.build-debug-info && (success() || failure()) | |
- name: Upload Preprocessed Files | |
uses: actions/upload-artifact@v4 | |
with: | |
name: geode-build-debug-info-preprocessed-${{ matrix.config.id }} | |
path: ./build-debug-info-preprocessed/* | |
if: inputs.build-debug-info && (success() || failure()) | |
publish: | |
name: Publish | |
runs-on: ubuntu-latest | |
needs: build | |
if: github.ref == 'refs/heads/main' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Declare Version Variables | |
id: ref | |
shell: bash | |
run: | | |
echo "version=$(cat VERSION | xargs)" >> $GITHUB_OUTPUT | |
echo "hash=$(git rev-parse --short "$GITHUB_SHA")" >> $GITHUB_OUTPUT | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
- name: Move Installers | |
run: | | |
mv geode-installer-mac/geode-installer-mac.pkg geode-installer-${{ steps.ref.outputs.hash }}-mac.pkg | |
mv geode-installer-win/geode-installer-win.exe geode-installer-${{ steps.ref.outputs.hash }}-win.exe | |
- name: Zip MacOS Artifacts | |
uses: vimtor/[email protected] | |
with: | |
files: geode-mac/Geode.dylib geode-mac/GeodeBootstrapper.dylib | |
dest: geode-${{ steps.ref.outputs.hash }}-mac.zip | |
- name: Zip Windows Artifacts | |
uses: vimtor/[email protected] | |
with: | |
files: geode-win/XInput9_1_0.dll geode-win/Geode.dll geode-win/GeodeUpdater.exe geode-win/Geode.lib geode-win/Geode.pdb | |
dest: geode-${{ steps.ref.outputs.hash }}-win.zip | |
- name: Zip Android32 Artifacts | |
uses: vimtor/[email protected] | |
with: | |
files: geode-android32/Geode.android32.so geode-android32/Geode.android32.so.sym | |
dest: geode-${{ steps.ref.outputs.hash }}-android32.zip | |
- name: Zip Android64 Artifacts | |
uses: vimtor/[email protected] | |
with: | |
files: geode-android64/Geode.android64.so geode-android64/Geode.android64.so.sym | |
dest: geode-${{ steps.ref.outputs.hash }}-android64.zip | |
- name: Zip Resources | |
uses: vimtor/[email protected] | |
with: | |
files: geode-android64/resources | |
dest: resources.zip | |
- name: Update Development Release | |
uses: andelf/nightly-release@main | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: nightly | |
name: 'Development Release' | |
body: | | |
Geode development release for commit ${{ github.sha }}. Since this is not a regular release, Geode will not install the resources automatically, so you should use the installer if you want them. | |
files: | | |
./geode-installer-${{ steps.ref.outputs.hash }}-win.exe | |
./geode-installer-${{ steps.ref.outputs.hash }}-mac.pkg | |
./geode-${{ steps.ref.outputs.hash }}-win.zip | |
./geode-${{ steps.ref.outputs.hash }}-mac.zip | |
./geode-${{ steps.ref.outputs.hash }}-android32.zip | |
./geode-${{ steps.ref.outputs.hash }}-android64.zip | |
./resources.zip |