name: CI Build

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

env:
  BUILD_TYPE: Debug

jobs:
  build-ubuntu-gcc:
    name: ubuntu-gcc
    runs-on: ubuntu-latest
    timeout-minutes: 4
    steps:
    - uses: actions/checkout@v4

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBOX2D_SAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DBOX2D_VALIDATE=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Test
      working-directory: ${{github.workspace}}/build
      run: ./bin/test
      
  build-ubuntu-clang:
    name: ubuntu-clang
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    
    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_CXX_COMPILER=clang++-18 -DCMAKE_C_COMPILER=clang -DBOX2D_SAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DBOX2D_VALIDATE=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Test
      working-directory: ${{github.workspace}}/build
      run: ./bin/test
      
  build-macos:
    name: macos
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v4

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBOX2D_SAMPLES=OFF -DBOX2D_SANITIZE=ON -DBUILD_SHARED_LIBS=OFF -DBOX2D_VALIDATE=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Test
      working-directory: ${{github.workspace}}/build
      run: ./bin/test
      
  build-windows:
    name: windows
    runs-on: windows-latest
    steps:

    - uses: actions/checkout@v4

    - name: Setup MSVC dev command prompt
      uses: TheMrMilchmann/setup-msvc-dev@v3
      with:
        arch: x64

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBOX2D_SAMPLES=OFF -DBOX2D_SANITIZE=ON -DBUILD_SHARED_LIBS=OFF -DBOX2D_VALIDATE=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON
      # run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBOX2D_SAMPLES=OFF -DBUILD_SHARED_LIBS=OFF

    - name: Build
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Test
      working-directory: ${{github.workspace}}/build
      run: ./bin/${{env.BUILD_TYPE}}/test
      
  samples-windows-static:
    name: samples-windows-static
    runs-on: windows-latest
    steps:

    - uses: actions/checkout@v4

    - name: Setup MSVC dev command prompt
      uses: TheMrMilchmann/setup-msvc-dev@v3
      with:
        arch: x64

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release -DBOX2D_SAMPLES=ON -DBUILD_SHARED_LIBS=OFF -DBOX2D_UNIT_TESTS=OFF
      
    - name: Build
      run: cmake --build ${{github.workspace}}/build --config Release

  samples-windows-dynamic:
    name: samples-windows-dynamic
    runs-on: windows-latest
    steps:

    - uses: actions/checkout@v4

    - name: Setup MSVC dev command prompt
      uses: TheMrMilchmann/setup-msvc-dev@v3
      with:
        arch: x64

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release -DBOX2D_SAMPLES=ON -DBUILD_SHARED_LIBS=ON -DBOX2D_UNIT_TESTS=OFF
      
    - name: Build
      run: cmake --build ${{github.workspace}}/build --config Release

  samples-macos-static:
    name: samples-macos-static
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v4

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release -DBOX2D_SAMPLES=ON -DBUILD_SHARED_LIBS=OFF -DBOX2D_UNIT_TESTS=OFF
      
    - name: Build
      run: cmake --build ${{github.workspace}}/build --config Release

  samples-macos-dynamic:
    name: samples-macos-dynamic
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v4

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release -DBOX2D_SAMPLES=ON -DBUILD_SHARED_LIBS=ON -DBOX2D_UNIT_TESTS=OFF
      
    - name: Build
      run: cmake --build ${{github.workspace}}/build --config Release

  samples-ubuntu-gcc-static:
    name: samples-ubuntu-gcc-static
    runs-on: ubuntu-latest
    timeout-minutes: 4
    steps:
    - uses: actions/checkout@v4

    - name: Install X11, Wayland & GL development libraries
      run: sudo apt-get update && sudo apt-get install -y libx11-dev wayland-protocols libwayland-dev libxkbcommon-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libgl-dev

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release -DBOX2D_SAMPLES=ON -DBUILD_SHARED_LIBS=OFF -DBOX2D_UNIT_TESTS=OFF
      
    - name: Build
      run: cmake --build ${{github.workspace}}/build --config Release
      