From 05bcf18de357a5338a50bb3f4a7a8ad6bd44344b Mon Sep 17 00:00:00 2001 From: apple1417 Date: Mon, 19 May 2025 22:36:28 +1200 Subject: [PATCH 1/4] update cruft --- .clang-tidy | 2 + .cruft.json | 2 +- .devcontainer/.gitignore | 6 ++ .devcontainer/Dockerfile | 65 +++++++++++++++++++++ .devcontainer/clang-cross/devcontainer.json | 7 +++ .devcontainer/llvm-mingw/devcontainer.json | 7 +++ .devcontainer/mingw/devcontainer.json | 7 +++ .gitignore | 5 +- .typos.toml | 9 +++ common_cmake | 2 +- 10 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 .devcontainer/.gitignore create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/clang-cross/devcontainer.json create mode 100644 .devcontainer/llvm-mingw/devcontainer.json create mode 100644 .devcontainer/mingw/devcontainer.json diff --git a/.clang-tidy b/.clang-tidy index 9534cad..78808f9 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -51,4 +51,6 @@ CheckOptions: readability-identifier-naming.NamespaceCase: lower_case readability-identifier-naming.ParameterCase: lower_case readability-identifier-naming.VariableCase: lower_case + + readability-identifier-length.IgnoredVariableNames: _ --- diff --git a/.cruft.json b/.cruft.json index 6904a90..4b26982 100644 --- a/.cruft.json +++ b/.cruft.json @@ -1,6 +1,6 @@ { "template": "git@github.com:bl-sdk/common_dotfiles.git", - "commit": "fb06ff8c773806b3f8cc69dbda60c0a7b481c6de", + "commit": "597ec422d3b5692927f325b9b5c2ae42288e8cc5", "checkout": null, "context": { "cookiecutter": { diff --git a/.devcontainer/.gitignore b/.devcontainer/.gitignore new file mode 100644 index 0000000..670808b --- /dev/null +++ b/.devcontainer/.gitignore @@ -0,0 +1,6 @@ +# Ignore any custom folders outside of our predefined ones, to let you create your own +# One use might be using your own container mapping the install path onto your actual game folder +*/ +!clang-cross +!llvm-mingw +!mingw diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..a9aeee4 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,65 @@ +FROM alpine:latest AS clang-cross +CMD ["/bin/bash"] +RUN < Date: Mon, 19 May 2025 22:47:19 +1200 Subject: [PATCH 2/4] try use devcontainers in ci --- .github/workflows/build.yml | 103 +++++++++++++----------------------- CMakePresets.json | 6 +++ 2 files changed, 42 insertions(+), 67 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1bc4c3..ef10b06 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,10 +11,6 @@ on: type: string required: false -env: - LLVM_MINGW_VERSION: llvm-mingw-20240619-msvcrt-ubuntu-20.04-x86_64 - LLVM_MINGW_DOWNLOAD: https://github.com/mstorsjo/llvm-mingw/releases/download/20240619/llvm-mingw-20240619-msvcrt-ubuntu-20.04-x86_64.tar.xz - jobs: build-windows: runs-on: windows-latest @@ -62,87 +58,60 @@ jobs: name: ${{ matrix.preset }} path: out/install/${{ matrix.preset }}/ + build-ubuntu: - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest strategy: fail-fast: false matrix: - preset: [ - "clang-cross-x86-release", - "clang-cross-x64-release", - "llvm-mingw-x86-release", - "llvm-mingw-x64-release", - "mingw-x86-release", - "mingw-x64-release", - ] + toolchain: + - preset: clang-cross-x86-release + container: clang-cross + - preset: clang-cross-x64-release + container: clang-cross + - preset: llvm-mingw-x86-release + container: llvm-mingw + - preset: llvm-mingw-x64-release + container: llvm-mingw + - preset: mingw-x86-release + container: mingw + - preset: mingw-x64-release + container: mingw steps: - - name: Setup CMake and Ninja - uses: lukka/get-cmake@latest - - - name: Setup apt packages - uses: awalsh128/cache-apt-pkgs-action@latest - with: - packages: msitools - version: ${{ runner.os }}-apt - - - name: Setup LLVM MinGW - if: startswith(matrix.preset, 'llvm-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 - - - name: Setup MinGW - if: startswith(matrix.preset, 'mingw') - uses: egor-tensin/setup-mingw@v2 - with: - platform: ${{ fromJSON('["x86", "x64"]')[contains(matrix.preset, 'x64')] }} - - - name: Setup Clang - if: startswith(matrix.preset, 'clang-cross') - uses: egor-tensin/setup-clang@v1 - - - name: Restore win sdk cache - if: startswith(matrix.preset, 'clang-cross') - uses: actions/cache@v4 - id: cache-win-sdk - with: - path: ~/win-sdk - key: ${{ runner.os }}-win-sdk - - - name: Setup win sdk - if: startswith(matrix.preset, 'clang-cross') && steps.cache-win-sdk.outputs.cache-hit != 'true' - run: | - git clone https://github.com/mstorsjo/msvc-wine.git - msvc-wine/vsdownload.py --accept-license --dest ~/win-sdk Microsoft.VisualStudio.Workload.VCTools - msvc-wine/install.sh ~/win-sdk - rm -r msvc-wine - - name: Checkout repository and submodules uses: actions/checkout@v4 with: submodules: recursive - - name: Configure CMake - working-directory: ${{ env.GITHUB_WORKSPACE }} - # The extra msvc wine arg won't do anything if we're not cross compiling - run: > - cmake . - --preset ${{ matrix.preset }} - -G Ninja - -DMSVC_WINE_ENV_SCRIPT=$(readlink -f ~)/win-sdk/bin/${{ fromJSON('["x86", "x64"]')[contains(matrix.preset, 'x64')] }}/msvcenv.sh + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Build - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: cmake --build out/build/${{ matrix.preset }} --target install + uses: devcontainers/ci@v0.3 + with: + cacheFrom: ghcr.io/bl-sdk/${{ matrix.toolchain.container }}:latest + configFile: .devcontainer/${{ matrix.toolchain.container }}/devcontainer.json + push: never + # The git watcher cmake thinks something's unsafe? Doesn't happen to me locally. + runCmd: | + git config --global --add safe.directory `pwd` + + set -e + + cmake . --preset ${{ matrix.toolchain.preset }} -G Ninja + cmake --build out/build/${{ matrix.toolchain.preset }} --target install - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: ${{ matrix.preset }} - path: out/install/${{ matrix.preset }}/ + name: ${{ matrix.toolchain.preset }} + path: out/install/${{ matrix.toolchain.preset }}/ # ============================================================================== diff --git a/CMakePresets.json b/CMakePresets.json index ecd5b7b..6c184f7 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -37,6 +37,9 @@ "lhs": "${hostSystemName}", "rhs": "Windows" }, + "cacheVariables": { + "MSVC_WINE_ENV_SCRIPT": "/win-sdk/bin/x86/msvcenv.sh" + }, "toolchainFile": "common_cmake/clang-cross-x86.cmake" }, { @@ -47,6 +50,9 @@ "lhs": "${hostSystemName}", "rhs": "Windows" }, + "cacheVariables": { + "MSVC_WINE_ENV_SCRIPT": "/win-sdk/bin/x64/msvcenv.sh" + }, "toolchainFile": "common_cmake/clang-cross-x64.cmake" }, { From dd3dd873c5d3ed336b6fe1f79cc49fcc297e2270 Mon Sep 17 00:00:00 2001 From: apple1417 Date: Mon, 19 May 2025 22:44:35 +1200 Subject: [PATCH 3/4] add missing `WINAPI` to dsound functions --- CMakeLists.txt | 2 +- src/proxy/dsound.cpp | 46 ++++++++++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e20cc20..cdbc8e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.24) -project(pluginloader VERSION 1.0.3) +project(pluginloader VERSION 1.0.4) add_library(_pluginloader_base INTERFACE) set(CMAKE_EXPORT_COMPILE_COMMANDS True) diff --git a/src/proxy/dsound.cpp b/src/proxy/dsound.cpp index 3bac8cf..affb4d8 100644 --- a/src/proxy/dsound.cpp +++ b/src/proxy/dsound.cpp @@ -33,71 +33,75 @@ FARPROC direct_sound_capture_create_8_ptr = nullptr; // #include "dsound.h" -DLL_EXPORT HRESULT DirectSoundCreate(LPCGUID pcGuidDevice, void* ppDS, void* pUnkOuter) { +DLL_EXPORT HRESULT WINAPI DirectSoundCreate(LPCGUID pcGuidDevice, void* ppDS, void* pUnkOuter) { return reinterpret_cast(direct_sound_create_ptr)(pcGuidDevice, ppDS, pUnkOuter); } -DLL_EXPORT HRESULT DirectSoundEnumerateA(void* pDSEnumCallback, LPVOID pContext) { +DLL_EXPORT HRESULT WINAPI DirectSoundEnumerateA(void* pDSEnumCallback, LPVOID pContext) { return reinterpret_cast(direct_sound_enumerate_a_ptr)( pDSEnumCallback, pContext); } -DLL_EXPORT HRESULT DirectSoundEnumerateW(void* pDSEnumCallback, LPVOID pContext) { +DLL_EXPORT HRESULT WINAPI DirectSoundEnumerateW(void* pDSEnumCallback, LPVOID pContext) { return reinterpret_cast(direct_sound_enumerate_w_ptr)( pDSEnumCallback, pContext); } -DLL_EXPORT HRESULT DllCanUnloadNow(void) { +DLL_EXPORT HRESULT WINAPI DllCanUnloadNow(void) { return reinterpret_cast(dll_can_unload_now_ptr)(); } -DLL_EXPORT HRESULT DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { +DLL_EXPORT HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { return reinterpret_cast(dll_get_class_object_ptr)(rclsid, riid, ppv); } -DLL_EXPORT HRESULT DirectSoundCaptureCreate(LPCGUID pcGuidDevice, void** ppDSC, void* pUnkOuter) { +DLL_EXPORT HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID pcGuidDevice, + void** ppDSC, + void* pUnkOuter) { return reinterpret_cast(direct_sound_capture_create_ptr)( pcGuidDevice, ppDSC, pUnkOuter); } -DLL_EXPORT HRESULT DirectSoundCaptureEnumerateA(void* pDSEnumCallback, LPVOID pContext) { +DLL_EXPORT HRESULT WINAPI DirectSoundCaptureEnumerateA(void* pDSEnumCallback, LPVOID pContext) { return reinterpret_cast( direct_sound_capture_enumerate_a_ptr)(pDSEnumCallback, pContext); } -DLL_EXPORT HRESULT DirectSoundCaptureEnumerateW(void* pDSEnumCallback, LPVOID pContext) { +DLL_EXPORT HRESULT WINAPI DirectSoundCaptureEnumerateW(void* pDSEnumCallback, LPVOID pContext) { return reinterpret_cast( direct_sound_capture_enumerate_w_ptr)(pDSEnumCallback, pContext); } -DLL_EXPORT HRESULT GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest) { +DLL_EXPORT HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest) { return reinterpret_cast(get_device_id_ptr)(pGuidSrc, pGuidDest); } -DLL_EXPORT HRESULT DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, - LPCGUID pcGuidRenderDevice, - void* pcDSCBufferDesc, - void* pcDSBufferDesc, - HWND hWnd, - DWORD dwLevel, - void** ppDSFD, - void** ppDSCBuffer8, - void** ppDSBuffer8, - void* pUnkOuter) { +DLL_EXPORT HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, + LPCGUID pcGuidRenderDevice, + void* pcDSCBufferDesc, + void* pcDSBufferDesc, + HWND hWnd, + DWORD dwLevel, + void** ppDSFD, + void** ppDSCBuffer8, + void** ppDSBuffer8, + void* pUnkOuter) { return reinterpret_cast( direct_sound_full_duplex_create_ptr)(pcGuidCaptureDevice, pcGuidRenderDevice, pcDSCBufferDesc, pcDSBufferDesc, hWnd, dwLevel, ppDSFD, ppDSCBuffer8, ppDSBuffer8, pUnkOuter); } -DLL_EXPORT HRESULT DirectSoundCreate8(LPCGUID pcGuidDevice, void** ppDS8, void* pUnkOuter) { +DLL_EXPORT HRESULT WINAPI DirectSoundCreate8(LPCGUID pcGuidDevice, void** ppDS8, void* pUnkOuter) { return reinterpret_cast(direct_sound_create_8_ptr)( pcGuidDevice, ppDS8, pUnkOuter); } -DLL_EXPORT HRESULT DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, void** ppDSC8, void* pUnkOuter) { +DLL_EXPORT HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, + void** ppDSC8, + void* pUnkOuter) { return reinterpret_cast( direct_sound_capture_create_8_ptr)(pcGuidDevice, ppDSC8, pUnkOuter); } From b53615bf2d50ed978c009576956c128fb2b14c93 Mon Sep 17 00:00:00 2001 From: apple1417 Date: Mon, 19 May 2025 22:59:04 +1200 Subject: [PATCH 4/4] ignore another function cast warning --- src/proxy/d3d11.cpp | 7 +++++++ src/proxy/dsound.cpp | 7 +++++++ src/proxy/xinput1_3.cpp | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/src/proxy/d3d11.cpp b/src/proxy/d3d11.cpp index 5bddf26..ffc5f6b 100644 --- a/src/proxy/d3d11.cpp +++ b/src/proxy/d3d11.cpp @@ -24,6 +24,10 @@ FARPROC d3d11_on_12_create_device_ptr = nullptr; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-function-type" #endif +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcast-function-type-mismatch" +#endif DLL_EXPORT HRESULT D3D11CoreCreateDevice(void* fact, void* adapt, @@ -81,6 +85,9 @@ DLL_EXPORT HRESULT D3D11On12CreateDevice(void* pDevice, ppDevice, ppImmediateContext, pChosenFeatureLevel); } +#if defined(__clang__) +#pragma clang diagnostic pop +#endif #if defined(__MINGW32__) #pragma GCC diagnostic pop #endif diff --git a/src/proxy/dsound.cpp b/src/proxy/dsound.cpp index affb4d8..f61c7c2 100644 --- a/src/proxy/dsound.cpp +++ b/src/proxy/dsound.cpp @@ -30,6 +30,10 @@ FARPROC direct_sound_capture_create_8_ptr = nullptr; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-function-type" #endif +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcast-function-type-mismatch" +#endif // #include "dsound.h" @@ -106,6 +110,9 @@ DLL_EXPORT HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, direct_sound_capture_create_8_ptr)(pcGuidDevice, ppDSC8, pUnkOuter); } +#if defined(__clang__) +#pragma clang diagnostic pop +#endif #if defined(__MINGW32__) #pragma GCC diagnostic pop #endif diff --git a/src/proxy/xinput1_3.cpp b/src/proxy/xinput1_3.cpp index 2beb72a..05b0194 100644 --- a/src/proxy/xinput1_3.cpp +++ b/src/proxy/xinput1_3.cpp @@ -34,6 +34,10 @@ FARPROC xinput_power_off_controller_ptr = nullptr; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wcast-function-type" #endif +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcast-function-type-mismatch" +#endif DLL_EXPORT void XInputEnable(BOOL enable) { reinterpret_cast(xinput_enable_ptr)(enable); @@ -93,6 +97,9 @@ DLL_EXPORT DWORD XInputPowerOffController(DWORD dwUserIndex) { dwUserIndex); } +#if defined(__clang__) +#pragma clang diagnostic pop +#endif #if defined(__MINGW32__) #pragma GCC diagnostic pop #endif