Build ModelExtras #34
This file contains hidden or 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
| # Based on CanerKaraca23 build script | |
| name: Build ModelExtras | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Setup xmake | |
| uses: xmake-io/github-action-setup-xmake@v1 | |
| with: | |
| xmake-version: latest | |
| actions-cache-folder: .xmake-cache | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y clang-19 g++-mingw-w64-i686 | |
| - name: Get latest plugin-sdk commit | |
| id: plugin-sdk-ref | |
| run: | | |
| echo "sha=$(git ls-remote https://github.com/user-grinch/plugin-sdk-mingw.git HEAD | cut -f1)" >> "$GITHUB_OUTPUT" | |
| - name: Restore plugin-sdk cache | |
| id: plugin-sdk-cache | |
| uses: actions/cache@v5 | |
| with: | |
| path: plugin-sdk | |
| key: plugin-sdk-${{ steps.plugin-sdk-ref.outputs.sha }}-i686-w64-mingw32 | |
| - name: Build plugin-sdk | |
| if: steps.plugin-sdk-cache.outputs.cache-hit != 'true' | |
| run: | | |
| # Clone repo and check out the exact commit used in the cache key | |
| git clone https://github.com/user-grinch/plugin-sdk-mingw.git plugin-sdk | |
| cd plugin-sdk | |
| git checkout "${{ steps.plugin-sdk-ref.outputs.sha }}" | |
| mkdir -p output/lib | |
| # Prepare object directories | |
| for dir in shared plugin_sa safetyhook; do | |
| find "$dir" -type d -exec mkdir -p "obj/{}" \; | |
| done | |
| # Common flags | |
| FLAGS="-I. -Ishared -Ishared/game -Iplugin_sa -Iplugin_sa/game_sa -Iplugin_sa/game_sa/rw -Isafetyhook -DGTASA -DPLUGIN_SGV_10US -DRW" | |
| CLANG_FLAGS="--target=i686-w64-mingw32 -fpermissive -fcommon -fms-extensions -Wno-microsoft-include -Wno-invalid-offsetof -O2 -D__cpp_concepts=202002L" | |
| # Parallel build | |
| find shared plugin_sa safetyhook -name '*.cpp' -print0 | \ | |
| xargs -0 -P$(nproc) -I{} clang++-19 $CLANG_FLAGS -std=c++2b $FLAGS -c {} -o obj/{}.o | |
| find safetyhook -name '*.c' -print0 | \ | |
| xargs -0 -P$(nproc) -I{} clang-19 $CLANG_FLAGS $FLAGS -c {} -o obj/{}.o | |
| find obj -name '*.o' | xargs i686-w64-mingw32-ar rcs output/lib/libplugin.a | |
| echo "PLUGIN_SDK_DIR=$GITHUB_WORKSPACE/plugin-sdk" >> "$GITHUB_ENV" | |
| - name: Use cached plugin-sdk | |
| if: steps.plugin-sdk-cache.outputs.cache-hit == 'true' | |
| run: echo "PLUGIN_SDK_DIR=$GITHUB_WORKSPACE/plugin-sdk" >> "$GITHUB_ENV" | |
| - name: Build ModelExtras with xmake | |
| run: | | |
| xmake f -m release \ | |
| --mingw=/usr \ | |
| --cc=clang-19 \ | |
| --cxx=clang++-19 \ | |
| --cxflags="-D__cpp_concepts=202002L" \ | |
| -c -y | |
| xmake -j$(nproc) | |
| - name: Prepare artifact files | |
| run: | | |
| mkdir -p artifact/ModelExtras | |
| cp build/mingw/x86/release/ModelExtras.asi artifact/ModelExtras.asi | |
| cp resource/dist/ModelExtras.ini artifact/ModelExtras.ini | |
| cp -r resource/dist/ModelExtras/* artifact/ModelExtras/ | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ModelExtras-Test-Build | |
| path: | | |
| artifact/ModelExtras.asi | |
| artifact/ModelExtras.ini | |
| artifact/ModelExtras/** |