mas-bandwidth / yojimbo

A network library for client/server games written in C++
BSD 3-Clause "New" or "Revised" License
2.49k stars 244 forks source link

github actions for MinGW #211

Open VA-GS opened 1 month ago

VA-GS commented 1 month ago

I had a quick look after this discussion but there are a bit too many issues for me to fix them cleanly in a PR right now.

With the following change in the ci.yml:

name: CI

on: [push, pull_request]

jobs:
  build_and_test:
    name: Build & test

    strategy:
      fail-fast: false # Do not stop all jobs when one job fails.
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        configuration: [release, debug]
        compiler: [default]
        include:
          - os: windows-latest
            configuration: debug
            compiler: gcc
          - os: windows-latest
            configuration: debug
            compiler: clang
          - os: windows-latest
            configuration: release
            compiler: gcc
          - os: windows-latest
            configuration: release
            compiler: clang

    runs-on: ${{ matrix.os }}

    steps:
    - uses: actions/checkout@master
      with:
        submodules: recursive
    - name: Setup premake
      uses: abel0b/setup-premake@v1

    # Install gcc and premake for MSYS2.
    - name: Setup (MSYS2 gcc)
      if: runner.os == 'Windows' && matrix.compiler == 'gcc'
      uses: msys2/setup-msys2@v2
      with:
        msystem: ucrt64
        release: false # Re-use the existing MSYS2 installation which is part of the official GitHub Actions Runner Images
        install: |
          make
          mingw-w64-ucrt-x86_64-premake
          mingw-w64-ucrt-x86_64-gcc

    # Install clang and premake for MSYS2.
    - name: Setup (MSYS2 clang)
      if: runner.os == 'Windows' && matrix.compiler == 'clang'
      uses: msys2/setup-msys2@v2
      with:
        msystem: clang64
        release: false # Re-use the existing MSYS2 installation which is part of the official GitHub Actions Runner Images
        install: |
          make
          mingw-w64-clang-x86_64-premake
          mingw-w64-clang-x86_64-clang

    # Install libsodium from apt
    - name: Setup (Linux)
      if: runner.os == 'Linux'
      run: |
        sudo apt-get install libsodium-dev

    # Install libsodium from brew
    - name: Setup (MacOS)
      if: runner.os == 'MacOS'
      run: brew install libsodium

    # Build with premake + make
    - name: Build (gmake)
      if: runner.os != 'Windows'
      run: |
        premake5 gmake
        make clean
        make all config=${{ matrix.configuration }}

    # Build with premake + make on MSYS2
    - name: Build (gmake)
      if: runner.os == 'Windows' && (matrix.compiler == 'gcc' || matrix.compiler == 'clang')
      shell: msys2 {0}
      run: |
        premake5 gmake
        make clean
        make all config=${{ matrix.configuration }}

    # Run the tests with sh syntax
    - name: Test (gmake)
      if: runner.os != 'Windows'
      run: ./bin/test

    # Run the tests with sh syntax on MSYS2
    - name: Test (MSYS2)
      if: runner.os == 'Windows' && (matrix.compiler == 'gcc' || matrix.compiler == 'clang')
      shell: msys2 {0}
      run: ./bin/test

    ## Windows-specific build steps
    # Set up PATH variables to point to MSBuild from at least VS 16.1 (2019)
    - name: Setup (vs2019)
      if: runner.os == 'Windows'
      uses: microsoft/setup-msbuild@v1.1
      with:
        vs-version: '16.1.0'

    # Build with premake + msbuild
    - name: Build (vs2019)
      if: runner.os == 'Windows'
      run: |
        premake5 vs2019
        msbuild yojimbo.sln -nologo -m -t:Clean  -p:Configuration=${{ matrix.configuration }}
        msbuild yojimbo.sln -nologo -m -p:Configuration=${{ matrix.configuration }}

    # Run the tests with Powershell syntax
    - name: Test (vs2019)
      if: runner.os == 'Windows'
      run: "& ./bin/${{ matrix.configuration }}/test.exe"

Triggers some errors:

I did not try to fix those cleanly in the premake5 as I integrated yojimbo in my own CMake instead. The changes I had to do there are some extra "-Wno-" for the above and a few more issues and linking against ws2_32 and Qwave from the CMake instead of by pragma.

VA-GS commented 1 month ago

For the thread attribute, it might work with the latest libsodium as I see a change around that in randombytes_internal_random.c.