name: Linux

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

permissions:
  contents: read

jobs:
  # Build shared library with Make (GCC)
  release-make-gcc-shared:
    runs-on: ubuntu-latest

    steps:
    - name: Install packages
      run: sudo apt-get install -y nasm

    - name: Checkout repo
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: intel/intel-ipsec-mb

    - name: Build
      run: make -j

    - name: Install
      run: sudo make install

    - name: Test installation
      working-directory: ${{github.workspace}}/examples/burst-app
      run: gcc main.c -lIPSec_MB

  # Build static library with Make (GCC)
  release-make-gcc-static:
    runs-on: ubuntu-latest

    steps:
    - name: Install packages
      run: sudo apt-get install -y nasm

    - name: Checkout repo
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: intel/intel-ipsec-mb

    - name: Build
      run: make SHARED=n -j

  # Build shared library with Make (Clang)
  release-make-clang-shared:
    runs-on: ubuntu-latest

    steps:
    - name: Install packages
      run: sudo apt-get install -y nasm clang

    - name: Checkout repo
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: intel/intel-ipsec-mb

    - name: Build
      run: make CC=clang -j

  # Build static library with Make (Clang)
  release-make-clang-static:
    runs-on: ubuntu-latest

    steps:
    - name: Install packages
      run: sudo apt-get install -y nasm clang

    - name: Checkout repo
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: intel/intel-ipsec-mb

    - name: Build
      run: make CC=clang SHARED=n -j

  # Build shared library with Make and AESNI emulation enabled (Clang)
  release-make-clang-shared-aesni-emu:
    runs-on: ubuntu-latest

    steps:
    - name: Install packages
      run: sudo apt-get install -y nasm clang

    - name: Checkout repo
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: intel/intel-ipsec-mb

    - name: Build
      run: make CC=clang AESNI_EMU=y -j

  # CMake release build with shared library (Makefiles)
  release-cmake-gcc-shared:
    env:
      BUILD_TYPE: Release
    runs-on: ubuntu-latest

    steps:
    - name: Install packages
      run: sudo apt-get install -y nasm

    - name: Checkout repo
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: 'intel/intel-ipsec-mb'

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}

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

    - name: Test
      working-directory: ${{github.workspace}}/build
      run: ctest -j 5 -C ${{env.BUILD_TYPE}}

    - name: Install
      working-directory: ${{github.workspace}}/build
      run: sudo cmake --install .

    - name: Test installation
      working-directory: ${{github.workspace}}/examples/burst-app
      run: gcc main.c -lIPSec_MB

  # CMake debug build with shared library (Makefiles)
  debug-cmake-gcc-shared:
    env:
      BUILD_TYPE: Debug
    runs-on: ubuntu-latest

    steps:
    - name: Install packages
      run: sudo apt-get install -y nasm

    - name: Checkout repo
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: 'intel/intel-ipsec-mb'

    - name: Configure CMake
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}

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

    - name: Test
      working-directory: ${{github.workspace}}/build
      run: ctest -j 5 -C ${{env.BUILD_TYPE}}

