# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform.
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml
name: CMake on multiple platforms

on:
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
  push:
    branches: [ 6.0 ]

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

    strategy:
      # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable.
      fail-fast: false

      # Set up a matrix to run the following 6 configurations:
      # 1. <Linux, Release, latest GCC compiler toolchain on the default runner image, default generator>
      # 2. <Linux, Release, latest Clang compiler toolchain on the default runner image, default generator>
      # 3. <Linux, Release, latest GCC compiler toolchain on the default runner image, cross-compiled for aarch64>
      # 4. <Linux, Release, latest Clang compiler toolchain on the default runner image, cross-compiled for aarch64>
      # 5. <MacOS, Release, latest GCC compiler toolchain on the default runner image, default generator>
      # 6. <MacOS, Release, latest Clang compiler toolchain on the default runner image, default generator>
      matrix:
        os: [ubuntu-latest, macos-latest]
        # To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list.
        build_type: [Release]
        c_compiler: [gcc, clang]
        kamailio_groups: [DEFAULT]
        target_arch: [aarch64, x86_64]
        exclude:
          # Exclude combinations that are not supported
          - os: macos-latest
            target_arch: x86_64

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4


    - name: Install cross-compiler
      if: matrix.os == 'ubuntu-latest' && matrix.target_arch == 'aarch64'
      run: |
        sudo apt update
        sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

    - name: Build Project natively
      uses: threeal/cmake-action@v2.1.0
      # Step runs for all except this combination
      if: matrix.os != 'ubuntu-latest' || matrix.target_arch != 'aarch64'
      with:
        build-dir: ${{github.workspace}}/build
        build-args: -j8
        options: |
          CMAKE_BUILD_TYPE=${{matrix.build_type}}
          MODULE_GROUP_NAME=${{matrix.kamailio_groups}}
          CMAKE_C_COMPILER=${{matrix.c_compiler}}

    - name: Build Project with cross-compiler
      if: matrix.os == 'ubuntu-latest' && matrix.target_arch == 'aarch64'
      uses: threeal/cmake-action@v2.1.0
      with:
        build-dir: ${{github.workspace}}/build
        build-args: -j8
        options: |
          CMAKE_BUILD_TYPE=${{matrix.build_type}}
          MODULE_GROUP_NAME=${{matrix.kamailio_groups}}
          CMAKE_TOOLCHAIN_FILE=${{github.workspace}}/cmake/aarch64-toolchain.cmake
