Fix lazbuild-backend CI: propagate defines, GUI toggle, GTK2, dedup #391
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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. | |
| # fpc backend: -dNAME per compile. lazbuild backend: injected into fpc.cfg so | |
| # the project and every recursive package rebuild inherit them. Override per job. | |
| # 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 | |
| # When true, make.pas builds (never runs) LCL/GUI projects. Only meaningful under | |
| # the lazbuild backend - the fpc backend has no widgetset and always skips them. | |
| # Set false to opt out of the per-platform GUI widgetset toolchain (GTK2/X11 on | |
| # Unix, cocoa on macOS). Override per job below, like MAKE_BUILD_BACKEND. | |
| MAKE_LAZBUILD_GUI: 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@v7 | |
| - 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@v7 | |
| 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@v7 | |
| 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 | |
| # Scalar-dispatch legs: same native targets, but MAKE_DEFINES | |
| # forces HASHLIB_FORCE_SCALAR so the SIMD-bearing | |
| # arches exercise the scalar fallbacks instead. | |
| linux-x64-scalar: | |
| name: "Native: Linux x86_64 (FORCE_SCALAR)" | |
| runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64-scalar'].runner }} | |
| timeout-minutes: 120 | |
| needs: setup | |
| if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-x64-scalar,') | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: true | |
| - name: Build | |
| shell: bash | |
| env: | |
| FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64-scalar'].fpc_target }} | |
| FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64-scalar'].fpc_tarball_target }} | |
| MAKE_DEFINES: 'HASHLIB_FORCE_SCALAR' | |
| run: bash .github/workflows/ci/native-build.sh | |
| linux-arm64-scalar: | |
| name: "Native: Linux AArch64 (FORCE_SCALAR)" | |
| runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64-scalar'].runner }} | |
| timeout-minutes: 120 | |
| needs: setup | |
| if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-arm64-scalar,') | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: true | |
| - name: Build | |
| shell: bash | |
| env: | |
| FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64-scalar'].fpc_target }} | |
| FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64-scalar'].fpc_tarball_target }} | |
| MAKE_DEFINES: 'HASHLIB_FORCE_SCALAR' | |
| 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@v7 | |
| 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@v7 | |
| 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@v7 | |
| 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@v7 | |
| 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 }} | |
| MAKE_LAZBUILD_GUI: ${{ env.MAKE_LAZBUILD_GUI }} | |
| 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@v7 | |
| 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 }} | |
| MAKE_LAZBUILD_GUI: ${{ env.MAKE_LAZBUILD_GUI }} | |
| 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@v7 | |
| 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 MAKE_LAZBUILD_GUI 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@v7 | |
| 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 MAKE_LAZBUILD_GUI 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@v7 | |
| 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 MAKE_LAZBUILD_GUI 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@v7 | |
| 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 MAKE_LAZBUILD_GUI 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 |