This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository terminology.
View the commit online.
commit 0d7dbbfef0a3e158c0d606e8654edc4ad08bc505
Author: Boris Faure <[email protected]>
AuthorDate: Mon Aug 24 22:45:25 2026 +0200
ci: build, test and measure coverage on arm64
TERMINOLOGY_HAVE_NEON is gated on __aarch64__, so on the x86_64 runners
simd_neon.c compiles to an object with no symbols in it at all and the parity
harness in simd.c is preprocessed away, leaving tytest_simd_parity an empty
function. The hand-written intrinsics have never been compiled by CI, let alone
checked against their scalar reference.
Two build jobs, each differing from its x86_64 twin only in the runner, so the
architecture is the one variable: gcc at -O0 for the parity test and the
warnings, and clang under asan so a kernel storing outside its range is caught
rather than merely disagreeing with the scalar result.
It also gives four tests something to do. unit-scalar and escape-codes-scalar
set TERMINOLOGY_SIMD_DISABLE=1, but _use_simd is already EINA_FALSE at compile
time without NEON, so on x86_64 they run code identical to unit and
escape-codes.
Coverage becomes a matrix over the same two runners, since gcov on x86_64 sees
simd_neon.c as a file containing no code and drops the kernels from the report
instead of showing them uncovered. The uploads carry a per-arch flag so codecov
merges them rather than treating the second as a replacement for the first, and
the meson-logs artifact is named per-arch because upload-artifact@v4 rejects a
duplicate name.
ubuntu-24.04-arm is free for public repositories, and noble has every package
the workflow installs on arm64: libefl-all-dev, clang, lld and
libclang-rt-18-dev are all built for it, and gcovr is Architecture: all.
---
.github/workflows/ci.yaml | 49 +++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index b3c93009..c9c04fa6 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -12,7 +12,7 @@ concurrency:
jobs:
build:
name: ${{ matrix.name }}
- runs-on: ubuntu-24.04
+ runs-on: ${{ matrix.runner }}
timeout-minutes: 30
env:
COLUMNS: 150
@@ -24,11 +24,13 @@ jobs:
matrix:
include:
- name: gcc-debug
+ runner: ubuntu-24.04
cc: gcc
options: -Dnls=false -Dbuildtype=debug -Dfuzzing=true -Dbenchmarks=true
cflags: -O0 -g -Wall -Wextra
- name: gcc-release
+ runner: ubuntu-24.04
cc: gcc
options: -Dnls=true -Dbuildtype=release
cflags: -O2 -g -Wall -Wextra
@@ -36,6 +38,7 @@ jobs:
install: true
- name: clang-release
+ runner: ubuntu-24.04
cc: clang
# lld rather than bfd, so the LLVM toolchain is exercised end to end.
cc_ld: lld
@@ -44,6 +47,7 @@ jobs:
cflags: -O2 -g -Wall -Wextra
- name: clang-asan
+ runner: ubuntu-24.04
cc: clang
llvm: true
options: -Dnls=false -Dbuildtype=debug
@@ -51,12 +55,33 @@ jobs:
ldflags: -fsanitize=address
- name: clang-ubsan
+ runner: ubuntu-24.04
cc: clang
llvm: true
options: -Dnls=false -Dbuildtype=debug
cflags: -O1 -g -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=undefined
ldflags: -fsanitize=undefined
+ # TERMINOLOGY_HAVE_NEON is gated on __aarch64__, so these are the only
+ # jobs that compile simd_neon.c to anything, run the parity test in
+ # simd.c, or give TERMINOLOGY_SIMD_DISABLE something to switch off.
+ # Both differ from their x86_64 twin above only in the runner.
+ - name: gcc-debug-arm64
+ runner: ubuntu-24.04-arm
+ cc: gcc
+ options: -Dnls=false -Dbuildtype=debug -Dfuzzing=true -Dbenchmarks=true
+ cflags: -O0 -g -Wall -Wextra
+
+ # asan so that a vector kernel storing outside its range is caught
+ # rather than merely disagreeing with the scalar reference.
+ - name: clang-asan-arm64
+ runner: ubuntu-24.04-arm
+ cc: clang
+ llvm: true
+ options: -Dnls=false -Dbuildtype=debug
+ cflags: -O1 -g -fno-omit-frame-pointer -fsanitize=address -fno-sanitize-recover=address
+ ldflags: -fsanitize=address
+
steps:
- uses: actions/checkout@v4
@@ -111,12 +136,23 @@ jobs:
path: build/meson-logs/
coverage:
- name: coverage
- runs-on: ubuntu-24.04
+ name: coverage-${{ matrix.arch }}
+ runs-on: ${{ matrix.runner }}
timeout-minutes: 30
env:
COLUMNS: 150
TERM: xterm-256color
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - arch: amd64
+ runner: ubuntu-24.04
+
+ # On x86_64 gcov sees simd_neon.c as a file with no code in it, so the
+ # NEON kernels are absent from the report rather than shown uncovered.
+ - arch: arm64
+ runner: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v4
@@ -157,10 +193,15 @@ jobs:
# Tokenless uploads are rate limited, so pass CODECOV_TOKEN if the repo
# has it. A failed upload should not fail the build either way.
+ #
+ # The two architectures cover different sets of lines, so they upload
+ # under separate flags and codecov merges them into one report instead of
+ # the second arriving as a replacement for the first.
- name: Upload to codecov
uses: codecov/codecov-action@v5
with:
files: coverage.xml
+ flags: ${{ matrix.arch }}
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
@@ -168,5 +209,5 @@ jobs:
if: failure()
uses: actions/upload-artifact@v4
with:
- name: meson-logs-coverage
+ name: meson-logs-coverage-${{ matrix.arch }}
path: build/meson-logs/
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.