Skip to content

Refactor AES-NI SIMD cores and unify hardware AES test suite #327

Refactor AES-NI SIMD cores and unify hardware AES test suite

Refactor AES-NI SIMD cores and unify hardware AES test suite #327

Workflow file for this run

name: Make
on:
schedule:
- cron: '0 0 1 * *'
push:
branches:
- "**"
pull_request:
branches:
- master
- main
workflow_dispatch:
inputs:
enabled_targets:
description: >-
Comma-separated list of targets to run (leave empty for the default set).
Valid IDs: linux-x64, linux-arm64, windows-x64, macos-arm64,
macos-x64, linux-arm32, linux-powerpc64-be, freebsd, solaris,
netbsd, dragonflybsd
default: ""
type: string
debug:
description: Verbose install tracing (CI_DEBUG=1 in install-fpc-lazarus.sh)
default: false
type: boolean
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
FPC_VERSION: 3.2.2
LAZARUS_BRANCH: lazarus_4_4
LAZARUS_REPO: https://github.com/fpc/Lazarus.git
MAKE_BUILD_BACKEND: fpc
# make.pas package build scope: 'all' compiles every discovered package (catches
# a package that fails on the target even if unused); 'required' only compiles
# the projects' dependency closure. Override per job below, like MAKE_BUILD_BACKEND.
MAKE_PACKAGE_SCOPE: required
# Space/comma/semicolon-separated conditional defines passed to every compile in
# both backends (fpc: -dNAME, lazbuild: --opt=-dNAME). Override per job as needed.
# Examples:
# single: MAKE_DEFINES: WITH_GTK2_IM
# multiple: MAKE_DEFINES: 'WITH_GTK2_IM DEBUG_LOG USE_CTHREADS'
MAKE_DEFINES: ''
# When true, make.pas builds and runs console benchmarks after the test suite.
# Override per job below, like MAKE_BUILD_BACKEND.
MAKE_RUN_BENCHMARK: false
# Set by the workflow_dispatch "debug" toggle; '1' enables `set -x` tracing in
# install-fpc-lazarus.sh, '0' otherwise. Forwarded into the sandboxed jobs below.
CI_DEBUG: ${{ github.event.inputs.debug == 'true' && '1' || '0' }}
jobs:
setup:
name: Resolve target list
runs-on: ubuntu-latest
outputs:
enabled_targets: ${{ steps.resolve.outputs.enabled_targets }}
target_map: ${{ steps.resolve.outputs.target_map }}
steps:
- uses: actions/checkout@v6
- name: Resolve enabled targets
id: resolve
shell: bash
env:
INPUT_TARGETS: ${{ github.event.inputs.enabled_targets }}
run: bash .github/workflows/ci/resolve-targets.sh
# Native targets are standalone jobs (one per target) rather than a single
# matrix job, so each can carry its own env overrides and so a single-target
# workflow_dispatch cleanly skips the rest. Like the QEMU/VM jobs below, they
# gate via `if: contains(... enabled_targets ...)` and resolve runner/fpc_target
# from target_map. Keep `name:` literal: an if-skipped job renders an
# unevaluated name expression in the UI, so it cannot be sourced from JSON.
linux-x64:
name: "Native: Linux x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-x64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
linux-arm64:
name: "Native: Linux AArch64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-arm64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
windows-x64:
name: "Native: Windows x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['windows-x64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',windows-x64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['windows-x64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['windows-x64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
macos-arm64:
name: "Native: macOS AArch64 (Apple Silicon)"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['macos-arm64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',macos-arm64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-arm64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-arm64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
macos-x64:
name: "Native: macOS x86_64 (Intel)"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['macos-x64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',macos-x64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-x64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-x64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
linux-arm32:
name: "QEMU: Linux ARMv7"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm32'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-arm32,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (ARMv7 via QEMU user-mode)
uses: uraimo/run-on-arch-action@v3
with:
arch: armv7
distro: ubuntu24.04
env: |
FPC_VERSION: ${{ env.FPC_VERSION }}
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm32'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm32'].fpc_tarball_target }}
LAZARUS_BRANCH: ${{ env.LAZARUS_BRANCH }}
LAZARUS_REPO: ${{ env.LAZARUS_REPO }}
MAKE_BUILD_BACKEND: ${{ env.MAKE_BUILD_BACKEND }}
MAKE_PACKAGE_SCOPE: ${{ env.MAKE_PACKAGE_SCOPE }}
MAKE_RUN_BENCHMARK: ${{ env.MAKE_RUN_BENCHMARK }}
CI_DEBUG: ${{ env.CI_DEBUG }}
run: bash .github/workflows/ci/arm32-run.sh
linux-powerpc64-be:
name: "QEMU: Linux PowerPC64 BE"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-powerpc64-be'].runner }}
timeout-minutes: 180
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-powerpc64-be,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Set up QEMU (ppc64 big-endian)
run: bash .github/workflows/ci/ppc64-qemu-setup.sh
- name: Build (PowerPC64 BE via QEMU)
env:
FPC_VERSION: ${{ env.FPC_VERSION }}
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-powerpc64-be'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-powerpc64-be'].fpc_tarball_target }}
MAKE_BUILD_BACKEND: ${{ env.MAKE_BUILD_BACKEND }}
MAKE_PACKAGE_SCOPE: ${{ env.MAKE_PACKAGE_SCOPE }}
MAKE_RUN_BENCHMARK: ${{ env.MAKE_RUN_BENCHMARK }}
run: bash .github/workflows/ci/ppc64-be-build.sh
freebsd:
name: "VM: FreeBSD x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['freebsd'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',freebsd,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (FreeBSD x86_64)
uses: vmactions/freebsd-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['freebsd'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['freebsd'].fpc_tarball_target }}
FREEBSD_INSTALL_MODE: interim
with:
envs: FPC_VERSION FPC_TARGET FPC_TARBALL_TARGET LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FREEBSD_INSTALL_MODE CI_DEBUG
release: "15.0"
usesh: true
prepare: sh .github/workflows/ci/vm-freebsd-prepare.sh
run: bash .github/workflows/ci/vm-freebsd-run.sh
netbsd:
name: "VM: NetBSD x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['netbsd'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',netbsd,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (NetBSD x86_64)
uses: vmactions/netbsd-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['netbsd'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['netbsd'].fpc_tarball_target }}
with:
envs: FPC_VERSION LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FPC_TARGET FPC_TARBALL_TARGET CI_DEBUG
prepare: sh .github/workflows/ci/vm-netbsd-prepare.sh
run: bash .github/workflows/ci/vm-run-shared.sh
dragonflybsd:
name: "VM: DragonFlyBSD x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['dragonflybsd'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',dragonflybsd,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (DragonFlyBSD x86_64)
uses: vmactions/dragonflybsd-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['dragonflybsd'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['dragonflybsd'].fpc_tarball_target }}
LD_LIBRARY_PATH_EXTRA: /usr/local/lib
with:
envs: FPC_VERSION LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FPC_TARGET FPC_TARBALL_TARGET LD_LIBRARY_PATH_EXTRA CI_DEBUG
usesh: true
prepare: sh .github/workflows/ci/vm-dragonfly-prepare.sh
run: bash .github/workflows/ci/vm-run-shared.sh
solaris:
name: "VM: Solaris x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['solaris'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',solaris,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (Solaris x86_64)
uses: vmactions/solaris-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['solaris'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['solaris'].fpc_tarball_target }}
with:
envs: FPC_VERSION LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FPC_TARGET FPC_TARBALL_TARGET CI_DEBUG
release: "11.4-gcc"
usesh: true
prepare: sh .github/workflows/ci/vm-solaris-prepare.sh
run: bash .github/workflows/ci/vm-run-shared.sh