add xinput1_3.dll
proxy
#3
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: CI | |
on: [ | |
push, | |
pull_request, | |
workflow_dispatch | |
] | |
env: | |
# Important to pin the clang version, cause we also use it for linting | |
CLANG_VERSION: 17 | |
CLANG_TIDY_JOBS: 4 | |
# Since we use rather new c++ features, we need a rather new version of MinGW | |
# LLVM MinGW seems to be the newest prebuilt binaries around | |
LLVM_MINGW_VERSION: llvm-mingw-20230919-msvcrt-ubuntu-20.04-x86_64 | |
LLVM_MINGW_DOWNLOAD: https://github.com/mstorsjo/llvm-mingw/releases/download/20230919/llvm-mingw-20230919-msvcrt-ubuntu-20.04-x86_64.tar.xz | |
# xwin settings | |
XWIN_VERSION: xwin-0.3.1-x86_64-unknown-linux-musl | |
XWIN_DOWNLOAD: https://github.com/Jake-Shadle/xwin/releases/download/0.3.1/xwin-0.3.1-x86_64-unknown-linux-musl.tar.gz | |
jobs: | |
cache-clang: | |
runs-on: windows-latest | |
steps: | |
- name: Cache Clang | |
uses: actions/cache@v3 | |
id: cache-clang | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
lookup-only: true | |
- name: Setup Clang | |
if: steps.cache-clang.outputs.cache-hit != 'true' | |
uses: egor-tensin/setup-clang@v1 | |
with: | |
version: ${{ env.CLANG_VERSION }} | |
# ============================================================================== | |
build-windows: | |
runs-on: windows-latest | |
needs: cache-clang | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"clang-x86-release", | |
"clang-x64-release", | |
"msvc-x86-release", | |
"msvc-x64-release", | |
] | |
steps: | |
- name: Restore Clang Cache | |
if: contains(matrix.preset, 'clang') | |
uses: actions/cache/restore@v3 | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
fail-on-cache-miss: true | |
- name: Add MSVC to PATH | |
if: contains(matrix.preset, 'msvc') | |
uses: TheMrMilchmann/setup-msvc-dev@v2 | |
with: | |
arch: ${{ fromJSON('["x86", "x64"]')[contains(matrix.preset, 'x64')] }} | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake . --preset ${{ matrix.preset }} | |
- name: Build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake --build out/build/${{ matrix.preset }} --target install | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.preset }} | |
path: out/install/${{ matrix.preset }}/ | |
build-ubuntu: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"mingw-x86-release", | |
"mingw-x64-release", | |
"clang-cross-x86-release", | |
"clang-cross-x64-release", | |
] | |
steps: | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
# Both Clang and MinGW install quick enough that it's not worth caching | |
# Caching would also lose the +x - so we'd have to tar before caching/untar after, making it | |
# even slower | |
- name: Setup Clang | |
if: contains(matrix.preset, 'clang') | |
run: | | |
wget https://apt.llvm.org/llvm.sh | |
chmod +x llvm.sh | |
sudo ./llvm.sh ${{ env.CLANG_VERSION }} | |
sudo update-alternatives --install \ | |
/usr/bin/clang \ | |
clang \ | |
/usr/bin/clang-${{ env.CLANG_VERSION }} \ | |
200 | |
sudo update-alternatives --install \ | |
/usr/bin/clang++ \ | |
clang++ \ | |
/usr/bin/clang++-${{ env.CLANG_VERSION }} \ | |
200 | |
sudo update-alternatives --install \ | |
/usr/bin/llvm-rc \ | |
llvm-rc \ | |
/usr/bin/llvm-rc-${{ env.CLANG_VERSION }} \ | |
200 | |
- name: Setup MinGW | |
if: contains(matrix.preset, 'mingw') | |
run: | | |
wget -nv ${{ env.LLVM_MINGW_DOWNLOAD }} | |
tar -xf ${{ env.LLVM_MINGW_VERSION }}.tar.xz -C ~/ | |
echo $(readlink -f ~/${{ env.LLVM_MINGW_VERSION }}/bin) >> $GITHUB_PATH | |
# xwin does take long enough that caching's worth it | |
- name: Restore xwin cache | |
if: contains(matrix.preset, 'cross') | |
uses: actions/cache@v3 | |
id: cache-xwin | |
with: | |
path: ~/xwin | |
key: ${{ runner.os }}-xwin | |
- name: Setup xwin | |
if: contains(matrix.preset, 'cross') && steps.cache-xwin.outputs.cache-hit != 'true' | |
run: | | |
wget -nv ${{ env.XWIN_DOWNLOAD }} | |
tar -xf ${{ env.XWIN_VERSION }}.tar.gz | |
${{ env.XWIN_VERSION }}/xwin \ | |
--accept-license \ | |
--arch x86,x86_64 \ | |
splat \ | |
--include-debug-libs \ | |
--output ~/xwin | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
# The extra xwin dir arg won't do anything if we're not cross compiling | |
run: > | |
cmake . | |
--preset ${{ matrix.preset }} | |
-G Ninja | |
-DXWIN_DIR=$(readlink -f ~)/xwin | |
- name: Build | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake --build out/build/${{ matrix.preset }} --target install | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.preset }} | |
path: out/install/${{ matrix.preset }}/ | |
# ============================================================================== | |
clang-tidy: | |
runs-on: windows-latest | |
needs: cache-clang | |
strategy: | |
fail-fast: false | |
matrix: | |
preset: [ | |
"clang-x86-release", | |
"clang-x64-release", | |
] | |
steps: | |
- name: Restore Clang Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
fail-on-cache-miss: true | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
# Needed for clang tidy to enable `-export-fixes` | |
- name: Install pyyaml | |
run: pip install pyyaml | |
- name: Checkout repository and submodules | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Configure CMake | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: cmake . --preset ${{ matrix.preset }} -DCMAKE_DISABLE_PRECOMPILE_HEADERS=On | |
- name: Run clang-tidy | |
working-directory: ${{ env.GITHUB_WORKSPACE }} | |
run: | | |
python (Get-Command run-clang-tidy).Source ` | |
-j ${{ env.CLANG_TIDY_JOBS }} ` | |
-p "out\build\${{ matrix.preset }}" ` | |
-export-fixes clang-tidy-fixes.yml ` | |
$([Regex]::Escape("$pwd\src") + ".+\.(c|cpp|h|hpp)$") | |
- name: Process clang-tidy warnings | |
uses: asarium/clang-tidy-action@v1 | |
with: | |
fixesFile: clang-tidy-fixes.yml | |
clang-format: | |
runs-on: windows-latest | |
needs: cache-clang | |
steps: | |
- name: Restore Clang Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: C:\Program Files\LLVM | |
key: ${{ runner.os }}-clang-${{ env.CLANG_VERSION }} | |
fail-on-cache-miss: true | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Run clang-format | |
run: | | |
clang-format ` | |
-n -Werror ` | |
$(Get-ChildItem ` | |
src ` | |
-File ` | |
-Recurse ` | |
-Include ("*.c", "*.cpp", "*.h", "*.hpp") ` | |
| % FullName) | |
spelling: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Check spelling | |
uses: crate-ci/typos@master |