101 lines
5.5 KiB
YAML
101 lines
5.5 KiB
YAML
name: CI Build Tests
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
release:
|
|
types: [published]
|
|
schedule:
|
|
- cron: '30 3 * * 0'
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
# ── Linux gcc-11 ──────────────────────────────────────────
|
|
- { os: ubuntu-latest, cc: gcc-11, cxx: g++-11, name: gcc-11, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: ubuntu-latest, cc: gcc-11, cxx: g++-11, name: gcc-11, config: native, cmake_flags: "" }
|
|
|
|
# ── Linux gcc-12 ──────────────────────────────────────────
|
|
- { os: ubuntu-latest, cc: gcc-12, cxx: g++-12, name: gcc-12, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: ubuntu-latest, cc: gcc-12, cxx: g++-12, name: gcc-12, config: native, cmake_flags: "" }
|
|
|
|
# ── Linux clang-14 ────────────────────────────────────────
|
|
- { os: ubuntu-latest, cc: clang-14, cxx: clang++-14, name: clang-14, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: ubuntu-latest, cc: clang-14, cxx: clang++-14, name: clang-14, config: native, cmake_flags: "" }
|
|
|
|
# ── Linux clang-15 ────────────────────────────────────────
|
|
- { os: ubuntu-latest, cc: clang-15, cxx: clang++-15, name: clang-15, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: ubuntu-latest, cc: clang-15, cxx: clang++-15, name: clang-15, config: native, cmake_flags: "" }
|
|
|
|
# ── Linux ARM64 gcc (via ubuntu-24.04-arm) ──────────────────
|
|
- { os: ubuntu-24.04-arm, cc: gcc, cxx: g++, name: gcc, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: ubuntu-24.04-arm, cc: gcc, cxx: g++, name: gcc, config: arm64, cmake_flags: "" }
|
|
|
|
# ── Linux ARM64 clang (via ubuntu-24.04-arm) ────────────────
|
|
- { os: ubuntu-24.04-arm, cc: clang, cxx: clang++, name: clang, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: ubuntu-24.04-arm, cc: clang, cxx: clang++, name: clang, config: arm64, cmake_flags: "" }
|
|
|
|
# ── macOS Homebrew clang (ARM64 — no x86 SIMD configs) ───
|
|
- { os: macos-latest, cc: /opt/homebrew/opt/llvm/bin/clang, cxx: /opt/homebrew/opt/llvm/bin/clang++, name: clang, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: macos-latest, cc: /opt/homebrew/opt/llvm/bin/clang, cxx: /opt/homebrew/opt/llvm/bin/clang++, name: clang, config: arm64, cmake_flags: "" }
|
|
|
|
# ── macOS AppleClang (ARM64 — no x86 SIMD configs) ───────
|
|
- { os: macos-latest, name: AppleClang, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: macos-latest, name: AppleClang, config: arm64, cmake_flags: "" }
|
|
|
|
# ── Windows MSVC ──────────────────────────────────────────
|
|
- { os: windows-latest, name: msvc, config: portable, cmake_flags: "-DFORCE_PORTABLE=ON" }
|
|
- { os: windows-latest, name: msvc, config: native, cmake_flags: "" }
|
|
|
|
# ── Windows MinGW GCC ─────────────────────────────────────
|
|
- { os: windows-latest, name: mingw-gcc, config: portable, cmake_flags: "-G \"MinGW Makefiles\" -DCMAKE_CXX_COMPILER=g++ -DFORCE_PORTABLE=ON" }
|
|
- { os: windows-latest, name: mingw-gcc, config: native, cmake_flags: "-G \"MinGW Makefiles\" -DCMAKE_CXX_COMPILER=g++" }
|
|
|
|
name: ${{ matrix.os }} / ${{ matrix.name }} / ${{ matrix.config }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Compiler (Linux)
|
|
if: startsWith(matrix.os, 'ubuntu')
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y ${{ matrix.cc }}
|
|
if [[ "${{ matrix.cxx }}" != *"clang"* ]]; then sudo apt-get install -y ${{ matrix.cxx }}; fi
|
|
|
|
- name: Install LLVM (macOS)
|
|
if: matrix.os == 'macos-latest' && matrix.name == 'clang'
|
|
run: brew install llvm || brew upgrade llvm
|
|
|
|
- name: Configure
|
|
env:
|
|
CC: ${{ matrix.cc }}
|
|
CXX: ${{ matrix.cxx }}
|
|
run: cmake -S . -B build -DBUILD_TESTS=ON -DBUILD_BENCHMARKS=ON ${{ matrix.cmake_flags }}
|
|
|
|
- name: Build
|
|
run: cmake --build build --config Release -j
|
|
|
|
- name: Resolve executable paths
|
|
id: exe
|
|
shell: bash
|
|
run: |
|
|
if [ "${{ matrix.os }}" = "windows-latest" ] && [ "${{ matrix.name }}" = "msvc" ]; then
|
|
echo "tests=./build/Release/tinyaes_tests.exe" >> "$GITHUB_OUTPUT"
|
|
echo "bench=./build/Release/tinyaes_benchmarks.exe" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "tests=./build/tinyaes_tests" >> "$GITHUB_OUTPUT"
|
|
echo "bench=./build/tinyaes_benchmarks" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Tests
|
|
shell: bash
|
|
run: ${{ steps.exe.outputs.tests }}
|
|
|
|
- name: Benchmark
|
|
shell: bash
|
|
run: ${{ steps.exe.outputs.bench }}
|