libeigen/eigen!2874 Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com> Co-authored-by: Rasmus Munk Larsen <rlarsen@nvidia.com>
863 lines
31 KiB
YAML
863 lines
31 KiB
YAML
# SPDX-FileCopyrightText: The Eigen Authors
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
.test:linux:
|
|
extends: .common:linux:cross
|
|
stage: test
|
|
variables:
|
|
# Content-addressed pass cache toggle and manifest location, read by
|
|
# test.linux.script.sh; the cache stanza below persists the directory.
|
|
EIGEN_CI_TEST_CACHE: "on"
|
|
EIGEN_CI_TEST_CACHE_DIR: ${CI_PROJECT_DIR}/.testcache
|
|
script:
|
|
- . ci/scripts/test.linux.script.sh
|
|
after_script:
|
|
- . ci/scripts/test.linux.after_script.sh
|
|
rules: !reference [.rules:libeigen:all-tests, rules]
|
|
tags:
|
|
- saas-linux-2xlarge-amd64
|
|
allow_failure:
|
|
exit_codes: 42
|
|
# Pass-cache manifest consumed by test.linux.script.sh. Same shared
|
|
# per-job-name pool policy as the build jobs' ccache (rationale in
|
|
# build.linux.gitlab-ci.yml); merge-request pipelines are the only
|
|
# writers (the script no-ops elsewhere), so scheduled full-matrix runs
|
|
# keep their seed diversity.
|
|
cache:
|
|
key: "$CI_JOB_NAME_SLUG-testcache"
|
|
paths:
|
|
- .testcache/
|
|
when: always
|
|
|
|
##### x86-64 ###################################################################
|
|
.test:linux:x86-64:
|
|
extends: .test:linux
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: x86_64
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: x86_64-linux-gnu
|
|
|
|
# GCC-10 (modern stable)
|
|
.test:linux:x86-64:gcc-10:default:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:gcc-10:default ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: g++-10
|
|
|
|
test:linux:x86-64:gcc-10:default:official:
|
|
extends: .test:linux:x86-64:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:gcc-10:default:unsupported:
|
|
extends: .test:linux:x86-64:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:x86-64:gcc-10:avx:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:gcc-10:avx ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: g++-10
|
|
|
|
test:linux:x86-64:gcc-10:avx:official:
|
|
extends: .test:linux:x86-64:gcc-10:avx
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:gcc-10:avx:unsupported:
|
|
extends: .test:linux:x86-64:gcc-10:avx
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:x86-64:gcc-10:avx2:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:gcc-10:avx2 ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: g++-10
|
|
|
|
test:linux:x86-64:gcc-10:avx2:official:
|
|
extends: .test:linux:x86-64:gcc-10:avx2
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:gcc-10:avx2:unsupported:
|
|
extends: .test:linux:x86-64:gcc-10:avx2
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:x86-64:gcc-10:avx512dq:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:gcc-10:avx512dq ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: g++-10
|
|
tags:
|
|
- eigen-runner
|
|
- linux
|
|
- x86-64
|
|
- avx512
|
|
|
|
test:linux:x86-64:gcc-10:avx512dq:official:
|
|
extends: .test:linux:x86-64:gcc-10:avx512dq
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:gcc-10:avx512dq:unsupported:
|
|
extends: .test:linux:x86-64:gcc-10:avx512dq
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
# GCC-13 for AVX512-FP16 (_Float16 support).
|
|
.test:linux:x86-64:gcc-13:default:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:gcc-13:default ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: g++-13
|
|
|
|
# The corresponding test jobs (test:linux:x86-64:gcc-13:avx512fp16:{official,
|
|
# unsupported}) are intentionally omitted: we do not currently have a runner
|
|
# whose CPU supports AVX512-FP16, so running them produces wholesale SIGILL
|
|
# failures. The build:linux:cross:x86-64:gcc-13:avx512fp16:* jobs remain so
|
|
# that AVX512-FP16 code paths are still compile-checked.
|
|
|
|
# Clang-14 (modern stable)
|
|
.test:linux:x86-64:clang-14:default:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:clang-14:default ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
|
|
test:linux:x86-64:clang-14:default:official:
|
|
extends: .test:linux:x86-64:clang-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:clang-14:default:unsupported:
|
|
extends: .test:linux:x86-64:clang-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:x86-64:clang-14:avx2:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:clang-14:avx2 ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
|
|
test:linux:x86-64:clang-14:avx2:official:
|
|
extends: .test:linux:x86-64:clang-14:avx2
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:clang-14:avx2:unsupported:
|
|
extends: .test:linux:x86-64:clang-14:avx2
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:x86-64:clang-14:avx512dq:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:clang-14:avx512dq ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
tags:
|
|
- eigen-runner
|
|
- linux
|
|
- x86-64
|
|
- avx512
|
|
|
|
test:linux:x86-64:clang-14:avx512dq:official:
|
|
extends: .test:linux:x86-64:clang-14:avx512dq
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:clang-14:avx512dq:unsupported:
|
|
extends: .test:linux:x86-64:clang-14:avx512dq
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
# Generic vector extension backend.
|
|
.test:linux:x86-64:clang-19:generic:avx512dq:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:clang-19:generic:avx512dq ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19
|
|
tags:
|
|
- eigen-runner
|
|
- linux
|
|
- x86-64
|
|
- avx512
|
|
|
|
test:linux:x86-64:clang-19:generic:avx512dq:official:
|
|
extends: .test:linux:x86-64:clang-19:generic:avx512dq
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:clang-19:generic:avx512dq:unsupported:
|
|
extends: .test:linux:x86-64:clang-19:generic:avx512dq
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:x86-64:clang-19:cxx20:nightly:
|
|
extends: .test:linux:x86-64
|
|
needs: [ build:linux:cross:x86-64:clang-19:cxx20:nightly ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/"
|
|
|
|
test:linux:x86-64:clang-19:cxx20:nightly:official:
|
|
extends: .test:linux:x86-64:clang-19:cxx20:nightly
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:clang-19:cxx20:nightly:unsupported:
|
|
extends: .test:linux:x86-64:clang-19:cxx20:nightly
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
##### Sanitizers ###############################################################
|
|
|
|
.test:linux:x86-64:clang-19:default:asan-ubsan:
|
|
extends: .test:linux:x86-64
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19 llvm-19 libclang-rt-19-dev
|
|
LD_LIBRARY_PATH: /usr/lib/llvm-19/lib/clang/19/lib/linux
|
|
ASAN_OPTIONS: detect_leaks=0:print_stacktrace=1
|
|
UBSAN_OPTIONS: print_stacktrace=1
|
|
ASAN_SYMBOLIZER_PATH: /usr/lib/llvm-19/bin/llvm-symbolizer
|
|
EIGEN_CI_CTEST_ARGS: --timeout 2000
|
|
|
|
test:linux:x86-64:clang-19:default:asan-ubsan:official:
|
|
extends: .test:linux:x86-64:clang-19:default:asan-ubsan
|
|
needs: [ build:linux:cross:x86-64:clang-19:default:asan-ubsan:official ]
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:clang-19:default:asan-ubsan:unsupported:
|
|
extends: .test:linux:x86-64:clang-19:default:asan-ubsan
|
|
needs: [ build:linux:cross:x86-64:clang-19:default:asan-ubsan:unsupported ]
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
##### NVHPC ####################################################################
|
|
|
|
.test:linux:x86-64:nvhpc-26.1:default:
|
|
extends: .test:linux:x86-64
|
|
image: nvcr.io/nvidia/nvhpc:26.1-devel-cuda13.1-ubuntu24.04
|
|
variables:
|
|
EIGEN_CI_INSTALL: ""
|
|
|
|
test:linux:x86-64:nvhpc-26.1:default:official:
|
|
extends: .test:linux:x86-64:nvhpc-26.1:default
|
|
needs: [ build:linux:x86-64:nvhpc-26.1:default:official ]
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:x86-64:nvhpc-26.1:default:unsupported:
|
|
extends: .test:linux:x86-64:nvhpc-26.1:default
|
|
needs: [ build:linux:x86-64:nvhpc-26.1:default:unsupported ]
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
##### CUDA #####################################################################
|
|
.test:linux:cuda:
|
|
extends: .test:linux
|
|
allow_failure: true
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: gpu
|
|
# nvcc-linked binaries are not bit-reproducible, so the content-addressed
|
|
# pass cache could never hit here. cache: [] also drops the inherited
|
|
# stanza.
|
|
EIGEN_CI_TEST_CACHE: "off"
|
|
cache: []
|
|
rules: !reference [.rules:libeigen:gpu, rules]
|
|
tags:
|
|
- saas-linux-medium-amd64-gpu-standard
|
|
|
|
# ---- CUDA 11.5 + oldest supported compilers ---------------------------------
|
|
|
|
# GCC-10, CUDA-11.5
|
|
test:linux:cuda-11.5:gcc-10:
|
|
extends: .test:linux:cuda
|
|
image: nvidia/cuda:11.5.2-devel-ubuntu20.04
|
|
needs: [ build:linux:cuda-11.5:gcc-10 ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: gcc-10 g++-10
|
|
EIGEN_CI_C_COMPILER: gcc-10
|
|
EIGEN_CI_CXX_COMPILER: g++-10
|
|
|
|
# Clang-14, CUDA-11.5
|
|
test:linux:cuda-11.5:clang-14:
|
|
extends: .test:linux:cuda
|
|
image: nvidia/cuda:11.5.2-devel-ubuntu20.04
|
|
needs: [ build:linux:cuda-11.5:clang-14 ]
|
|
before_script:
|
|
# Ubuntu 20.04 lacks clang-14. Add the LLVM apt repo before
|
|
# the common before_script installs EIGEN_CI_INSTALL packages.
|
|
- apt-get update -y > /dev/null
|
|
- apt-get install -y --no-install-recommends wget gnupg > /dev/null
|
|
- wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key
|
|
| gpg --dearmor -o /usr/share/keyrings/llvm-archive-keyring.gpg
|
|
- echo 'deb [signed-by=/usr/share/keyrings/llvm-archive-keyring.gpg] http://apt.llvm.org/focal/ llvm-toolchain-focal-14 main'
|
|
> /etc/apt/sources.list.d/llvm-14.list
|
|
- apt-get update -y > /dev/null
|
|
- . ci/scripts/common.linux.before_script.sh
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
EIGEN_CI_CXX_COMPILER: clang++-14
|
|
EIGEN_CI_C_COMPILER: clang-14
|
|
|
|
# ---- New: latest CUDA -------------------------------------------------------
|
|
|
|
# GCC-13, CUDA-12.6
|
|
test:linux:cuda-12.6:gcc-13:
|
|
extends: .test:linux:cuda
|
|
image: nvidia/cuda:12.6.3-devel-ubuntu24.04
|
|
needs: [ build:linux:cuda-12.6:gcc-13 ]
|
|
variables:
|
|
EIGEN_CI_CXX_COMPILER: g++-13
|
|
EIGEN_CI_C_COMPILER: gcc-13
|
|
|
|
# Clang-19, CUDA-12.6
|
|
test:linux:cuda-12.6:clang-19:
|
|
extends: .test:linux:cuda
|
|
image: nvidia/cuda:12.6.3-devel-ubuntu24.04
|
|
needs: [ build:linux:cuda-12.6:clang-19 ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19
|
|
EIGEN_CI_CXX_COMPILER: clang++-19
|
|
EIGEN_CI_C_COMPILER: clang-19
|
|
|
|
|
|
##### qemu-emulated test base ##################################################
|
|
|
|
# Shared base for cross-arch tests that run under qemu-user emulation
|
|
# (arm, ppc64le, loongarch64). Limits parallelism, raises the per-test
|
|
# timeout, and skips tests that are too slow to be useful under qemu.
|
|
.test:linux:qemu:
|
|
extends: .test:linux
|
|
variables:
|
|
EIGEN_CI_CTEST_ARGS: --timeout 2000
|
|
EIGEN_CI_CTEST_PARALLEL: "4"
|
|
EIGEN_CI_CTEST_EXCLUDE: tensor_thread_pool
|
|
# Each test binary repeats its whole body 10x with fresh seeds by default,
|
|
# which puts the slowest binaries past any workable per-test timeout under
|
|
# TCG. The emulated jobs are here for ISA-specific codegen coverage; seed
|
|
# diversity is already provided by the native jobs at the default repeat.
|
|
EIGEN_REPEAT: "2"
|
|
|
|
##### arm ######################################################################
|
|
|
|
.test:linux:arm:
|
|
extends: .test:linux:qemu
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: arm
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: arm-linux-gnueabihf
|
|
|
|
.test:linux:arm:gcc-10:default:
|
|
extends: .test:linux:arm
|
|
needs: [ build:linux:cross:arm:gcc-10:default ]
|
|
variables:
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-arm-linux-gnueabihf qemu-user-static
|
|
|
|
test:linux:arm:gcc-10:default:official:
|
|
extends: .test:linux:arm:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:arm:gcc-10:default:unsupported:
|
|
extends: .test:linux:arm:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:arm:clang-14:default:
|
|
extends: .test:linux:arm
|
|
needs: [ build:linux:cross:arm:clang-14:default ]
|
|
variables:
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-arm-linux-gnueabihf clang-14 qemu-user-static
|
|
|
|
test:linux:arm:clang-14:default:official:
|
|
extends: .test:linux:arm:clang-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:arm:clang-14:default:unsupported:
|
|
extends: .test:linux:arm:clang-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
##### SME ######################################################################
|
|
|
|
.test:linux:sme:
|
|
extends: .test:linux
|
|
stage: test
|
|
# QEMU enables SME2 via `-cpu max,sme=on` (there is no separate sme2
|
|
# property); the multi-vector ops the kernel uses (svld1_f32_x4, the SME2
|
|
# FMOPA forms) are only emulated from QEMU 10.1 on. Ubuntu 24.04 ships
|
|
# 8.2.2 (base FEAT_SME only), so run the test stage on 26.04 (QEMU 10.2.x).
|
|
# The build stage stays on 24.04 -- it only cross-compiles and never invokes
|
|
# the emulator.
|
|
image: ubuntu:26.04
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: aarch64-sme
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: aarch64-linux-gnu
|
|
# Per-test wall time is bound by single-core TCG speed, which swings ~4x
|
|
# across SaaS hosts; double ctest's default 1500s timeout to absorb it.
|
|
EIGEN_CI_CTEST_ARGS: --timeout 3000
|
|
# Cut the default 10x per-binary repeat: like .test:linux:qemu, these jobs
|
|
# exist for ISA coverage, and 10 repeats under TCG pushes the slowest
|
|
# binaries (mixingtypes_3, eigensolver_selfadjoint_5, FFT, ...) past even
|
|
# the raised 3000s timeout. Seed diversity comes from the native jobs.
|
|
EIGEN_REPEAT: "2"
|
|
# Inherit the 2xlarge runner from .test:linux (same cost under GitLab's
|
|
# open-source program). The qemu-user run is single-threaded per subtest,
|
|
# so this is about cost-neutral consistency, not speed.
|
|
|
|
.test:linux:sme:gcc-14:default:
|
|
extends: .test:linux:sme
|
|
needs: [ build:linux:cross:sme:gcc-14:default ]
|
|
variables:
|
|
EIGEN_CI_CXX_COMPILER: aarch64-linux-gnu-g++-14
|
|
# Test stage only needs the aarch64 runtime (loader + libstdc++/libc under
|
|
# /usr/aarch64-linux-gnu, used via qemu's -L prefix) and qemu-user; the
|
|
# default-version cross g++ provides the libs on any release, and newer
|
|
# libstdc++ is ABI-compatible with the gcc-14-built binaries. On 25.10+
|
|
# the static qemu binaries are gone (qemu-user-static is now a virtual
|
|
# package), so install qemu-user and invoke the dynamic qemu-aarch64.
|
|
EIGEN_CI_CROSS_INSTALL: g++-aarch64-linux-gnu qemu-user
|
|
|
|
# Each concrete SME test job must set QEMU_CPU explicitly; qemu otherwise
|
|
# silently runs at its own default SME SVL instead of failing.
|
|
.test:linux:sme:gcc-14:default:official:
|
|
extends: .test:linux:sme:gcc-14:default
|
|
variables:
|
|
# product_sme, product_symm, product_trsolve, product_trmm and product_syrk
|
|
# all drive the SVL-sensitive SME micro-kernel and packers (trmm packs in
|
|
# PanelMode with per-panel offsets; syrk consumes packed panels in mr-sized
|
|
# blocks through tribb_kernel), so they run at every SVL below (mixingtypes
|
|
# is added at one SVL only -- see the sme512 job).
|
|
EIGEN_CI_CTEST_REGEX: product_sme|product_symm|product_trsolve|product_trmm|product_syrk
|
|
|
|
# SVL=128: architectural minimum; exercises the most sub-block passes per
|
|
# logical block.
|
|
test:linux:sme128:gcc-14:default:official:
|
|
extends: .test:linux:sme:gcc-14:default:official
|
|
variables:
|
|
QEMU_CPU: max,sme=on,sme128=on,sme256=off,sme512=off,sme1024=off,sme2048=off
|
|
|
|
# SVL=256: exercises runtime tiling geometry not covered by 512-bit tiles.
|
|
test:linux:sme256:gcc-14:default:official:
|
|
extends: .test:linux:sme:gcc-14:default:official
|
|
variables:
|
|
QEMU_CPU: max,sme=on,sme256=on,sme128=off,sme512=off,sme1024=off,sme2048=off
|
|
|
|
# SVL=512: block matches the tile grid exactly; exercises the multi-vector-load
|
|
# loop in sme_process. Also adds mixingtypes, whose SME-relevant coverage
|
|
# (pinned mixed-scalar products route to the generic, SVL-independent kernel)
|
|
# needs only one SVL.
|
|
test:linux:sme512:gcc-14:default:official:
|
|
extends: .test:linux:sme:gcc-14:default:official
|
|
variables:
|
|
QEMU_CPU: max,sme=on,sme512=on,sme128=off,sme256=off,sme1024=off,sme2048=off
|
|
# mixingtypes_[0-9] excludes mixingtypes_generic_32/64 (not built here), which
|
|
# ctest would otherwise fail to find.
|
|
EIGEN_CI_CTEST_REGEX: product_sme|product_symm|product_trsolve|product_trmm|product_syrk|mixingtypes_[0-9]
|
|
|
|
# SVL=2048: architectural maximum; exercises predication down to the logical
|
|
# block.
|
|
test:linux:sme2048:gcc-14:default:official:
|
|
extends: .test:linux:sme:gcc-14:default:official
|
|
variables:
|
|
QEMU_CPU: max,sme=on,sme2048=on,sme128=off,sme256=off,sme512=off,sme1024=off
|
|
|
|
# The no-FEAT_SME_F64F64 build, at one SVL: double has to reach the generic
|
|
# kernel and still be correct inside an SME build, where packet traits,
|
|
# alignment and cache blocking all differ from a plain NEON build. Its subtest
|
|
# skips the SME-only symm and mapper cases there, so the run is short. One SVL
|
|
# is enough -- the generic kernel it exercises is SVL-independent.
|
|
test:linux:sme512:gcc-14:no-f64f64:official:
|
|
extends: .test:linux:sme:gcc-14:default
|
|
needs: [ build:linux:cross:sme:gcc-14:no-f64f64 ]
|
|
variables:
|
|
QEMU_CPU: max,sme=on,sme512=on,sme128=off,sme256=off,sme1024=off,sme2048=off
|
|
EIGEN_CI_CTEST_REGEX: product_sme
|
|
|
|
# Full nightly SME test run: the complete Official + Unsupported ctest suite
|
|
# against the full build above, at a single representative SVL (512: the logical
|
|
# block matches the ZA tile grid exactly, exercising the multi-vector-load fast
|
|
# path in sme_process). Cross-SVL geometry is already covered by the per-SVL
|
|
# product_* subset jobs above, so one SVL is enough for the full run. Extends
|
|
# ...:default (not ...:default:official) so no product_* CTEST_REGEX is
|
|
# inherited -- these select by label instead. Official/Unsupported are split
|
|
# into two jobs, and Official is sharded further below. The 3h job timeout is
|
|
# the GitLab SaaS hosted-runner maximum (a slow host overran 2h). Inherits
|
|
# .rules:libeigen:all-tests, so it runs on the nightly schedule and on
|
|
# all-tests-labelled MRs.
|
|
.test:linux:sme512:gcc-14:full:
|
|
extends: .test:linux:sme:gcc-14:default
|
|
needs: [ build:linux:cross:sme:gcc-14:full ]
|
|
variables:
|
|
QEMU_CPU: max,sme=on,sme512=on,sme128=off,sme256=off,sme1024=off,sme2048=off
|
|
timeout: 3h
|
|
|
|
# -I <index>,,<total> intersects with -L, partitioning Official across the two
|
|
# shards; --rerun-failed overrides -I, so retries stay shard-local.
|
|
test:linux:sme512:gcc-14:full:official:
|
|
extends: .test:linux:sme512:gcc-14:full
|
|
parallel: 2
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
# Overriding EIGEN_CI_CTEST_ARGS replaces the whole value; restate --timeout.
|
|
EIGEN_CI_CTEST_ARGS: --timeout 3000 -I $CI_NODE_INDEX,,$CI_NODE_TOTAL
|
|
|
|
test:linux:sme512:gcc-14:full:unsupported:
|
|
extends: .test:linux:sme512:gcc-14:full
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
# tensor_thread_pool: threaded tests are useless under single-threaded TCG
|
|
# (same exclusion as .test:linux:qemu). FFT: overruns even the raised 3000s
|
|
# timeout under TCG at EIGEN_REPEAT=2; it is kissfft-based scalar/complex
|
|
# code with no SVE/SME-specific paths, and every native job covers it.
|
|
# Raising the timeout past ~3600s is not an option: a single silent test
|
|
# would trip the runner's 1h no-log-output kill.
|
|
EIGEN_CI_CTEST_EXCLUDE: tensor_thread_pool|FFT
|
|
|
|
##### aarch64 ##################################################################
|
|
|
|
.test:linux:aarch64:
|
|
extends: .test:linux
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: aarch64
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: aarch64-linux-gnu
|
|
tags:
|
|
- saas-linux-large-arm64
|
|
|
|
.test:linux:aarch64:gcc-10:default:
|
|
extends: .test:linux:aarch64
|
|
needs: [ build:linux:cross:aarch64:gcc-10:default ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: g++-10
|
|
|
|
test:linux:aarch64:gcc-10:default:official:
|
|
extends: .test:linux:aarch64:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:aarch64:gcc-10:default:unsupported:
|
|
extends: .test:linux:aarch64:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:aarch64:clang-14:default:
|
|
extends: .test:linux:aarch64
|
|
needs: [ build:linux:cross:aarch64:clang-14:default ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
|
|
test:linux:aarch64:clang-14:default:official:
|
|
extends: .test:linux:aarch64:clang-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:aarch64:clang-14:default:unsupported:
|
|
extends: .test:linux:aarch64:clang-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
##### ppc64le ##################################################################
|
|
|
|
.test:linux:ppc64le:
|
|
extends: .test:linux:qemu
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: ppc64le
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: powerpc64le-linux-gnu
|
|
|
|
.test:linux:ppc64le:gcc-14:default:
|
|
extends: .test:linux:ppc64le
|
|
needs: [ build:linux:cross:ppc64le:gcc-14:default ]
|
|
variables:
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-powerpc64le-linux-gnu qemu-user-static
|
|
|
|
test:linux:ppc64le:gcc-14:default:official:
|
|
extends: .test:linux:ppc64le:gcc-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:ppc64le:gcc-14:default:unsupported:
|
|
extends: .test:linux:ppc64le:gcc-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:ppc64le:clang-16:default:
|
|
extends: .test:linux:ppc64le
|
|
needs: [ build:linux:cross:ppc64le:clang-16:default ]
|
|
variables:
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-powerpc64le-linux-gnu clang-16 qemu-user-static
|
|
|
|
test:linux:ppc64le:clang-16:default:official:
|
|
extends: .test:linux:ppc64le:clang-16:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:ppc64le:clang-16:default:unsupported:
|
|
extends: .test:linux:ppc64le:clang-16:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
##### loongarch64 ##############################################################
|
|
|
|
.test:linux:loongarch64:
|
|
extends: .test:linux:qemu
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: loongarch64
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: loongarch64-linux-gnu
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-loongarch64-linux-gnu qemu-user-static
|
|
|
|
# GCC-14 (Ubuntu 24)
|
|
.test:linux:loongarch64:gcc-14:default:
|
|
extends: .test:linux:loongarch64
|
|
needs: [ build:linux:cross:loongarch64:gcc-14:default ]
|
|
|
|
test:linux:loongarch64:gcc-14:default:official:
|
|
extends: .test:linux:loongarch64:gcc-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:loongarch64:gcc-14:default:unsupported:
|
|
extends: .test:linux:loongarch64:gcc-14:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
##### riscv64 ##################################################################
|
|
|
|
.test:linux:riscv64:
|
|
extends: .test:linux
|
|
image: ${EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_RUN}
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: riscv64
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
tags:
|
|
- riscv
|
|
allow_failure: true
|
|
|
|
.test:linux:riscv64:gcc-15:default:
|
|
extends: .test:linux:riscv64
|
|
needs: [ build:linux:riscv64:gcc-15:default ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: g++-15
|
|
|
|
test:linux:riscv64:gcc-15:default:official:
|
|
extends: .test:linux:riscv64:gcc-15:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:riscv64:gcc-15:default:unsupported:
|
|
extends: .test:linux:riscv64:gcc-15:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
.test:linux:riscv64:clang-21:default:
|
|
extends: .test:linux:riscv64
|
|
needs: [ build:linux:riscv64:clang-21:default ]
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-21 g++-15
|
|
|
|
test:linux:riscv64:clang-21:default:official:
|
|
extends: .test:linux:riscv64:clang-21:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Official
|
|
|
|
test:linux:riscv64:clang-21:default:unsupported:
|
|
extends: .test:linux:riscv64:clang-21:default
|
|
variables:
|
|
EIGEN_CI_CTEST_LABEL: Unsupported
|
|
|
|
test:linux:riscv64:clang-21:default:smoketest:
|
|
extends: .test:linux:riscv64:clang-21:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_RUN}
|
|
needs: [ build:linux:riscv64:clang-21:default:smoketest ]
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_CTEST_LABEL: smoketest
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
|
|
test:linux:riscv64:gcc-15:default:smoketest:
|
|
extends: .test:linux:riscv64:gcc-15:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_RUN}
|
|
needs: [ build:linux:riscv64:gcc-15:default:smoketest ]
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_CTEST_LABEL: smoketest
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
|
|
##### MR Smoke Tests ###########################################################
|
|
|
|
test:linux:x86-64:gcc-10:default:smoketest:
|
|
extends: .test:linux:x86-64:gcc-10:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_RUN}
|
|
needs: [ build:linux:cross:x86-64:gcc-10:default:smoketest ]
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_CTEST_LABEL: smoketest
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
|
|
test:linux:x86-64:clang-14:default:smoketest:
|
|
extends: .test:linux:x86-64:clang-14:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_RUN}
|
|
needs: [ build:linux:cross:x86-64:clang-14:default:smoketest ]
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_CTEST_LABEL: smoketest
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
|
|
test:linux:aarch64:gcc-10:default:smoketest:
|
|
extends: .test:linux:aarch64:gcc-10:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_ARM64_SMOKETEST_RUN}
|
|
needs: [ build:linux:aarch64:gcc-10:default:smoketest ]
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_CTEST_LABEL: smoketest
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-small-arm64
|
|
|
|
test:linux:aarch64:clang-14:default:smoketest:
|
|
extends: .test:linux:aarch64:clang-14:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_ARM64_SMOKETEST_RUN}
|
|
needs: [ build:linux:aarch64:clang-14:default:smoketest ]
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_CTEST_LABEL: smoketest
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-small-arm64
|
|
|
|
##### Build-System Integration #################################################
|
|
|
|
# Grounds the CMake behavior doc/TopicCMakeGuide.dox documents: find_package
|
|
# against an installed tree, the version-range contract of the hand-written
|
|
# Eigen3ConfigVersion.cmake, embedding via add_subdirectory, and the ways an
|
|
# embedding project opts out of Eigen's install rules.
|
|
#
|
|
# Self-contained, so it neither extends .test:linux nor needs a build job: the
|
|
# scenarios run their own nested configures against the checkout, and the
|
|
# enclosing build directory holds only the CTest definitions. Staying off
|
|
# .test:linux also keeps it off the pass cache, which keys on a test's
|
|
# executable -- these tests have none, so a recorded pass would outlive any
|
|
# change to Eigen's CMake files.
|
|
#
|
|
# Cheap -- a nested configure and a small compile per scenario, six seconds of
|
|
# script on the runner, inside a job that takes half a minute once the image
|
|
# pull and checkout are counted -- but still gated on the files that can make
|
|
# it fail rather than run on every merge request: Eigen's own CMake surface,
|
|
# the guide it grounds, and the job's own definition and script. A push to the
|
|
# default branch runs it unconditionally, as the backstop for whatever the path
|
|
# list does not anticipate.
|
|
#
|
|
# Not behind the all-tests label, unlike the documentation job it complements:
|
|
# that label is why an incorrect claim in the CMake guide reached a release
|
|
# unnoticed, and an MR that edits these files is exactly the MR that needs the
|
|
# answer before merge rather than after.
|
|
test:linux:buildsystem:
|
|
extends: .common:linux:cross
|
|
image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_BUILD}
|
|
stage: test
|
|
needs: []
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: x86_64
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: x86_64-linux-gnu
|
|
EIGEN_CI_C_COMPILER: gcc-10
|
|
EIGEN_CI_CXX_COMPILER: g++-10
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
script:
|
|
- . ci/scripts/test.buildsystem.script.sh
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
changes:
|
|
- CMakeLists.txt
|
|
- cmake/**/*
|
|
- Eigen/Version
|
|
- blas/CMakeLists.txt
|
|
- lapack/CMakeLists.txt
|
|
- unsupported/**/CMakeLists.txt
|
|
- doc/CMakeLists.txt
|
|
- doc/TopicCMakeGuide.dox
|
|
- test/buildsystem/**/*
|
|
- ci/test.linux.gitlab-ci.yml
|
|
- ci/scripts/test.buildsystem.script.sh
|
|
- if: $CI_PIPELINE_SOURCE == "schedule"
|
|
- if: $CI_PIPELINE_SOURCE == "web"
|
|
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
##### MR Affected Tests ########################################################
|
|
# Paired with the affected build jobs. No CTest label is set: the regex from
|
|
# select:tests is the only filter, so a selection spanning Official and
|
|
# Unsupported tests runs in one job.
|
|
#
|
|
# Each job shares its trigger rule with the build job it needs; see
|
|
# .rules:libeigen:affected-tests:* in ci/common.gitlab-ci.yml.
|
|
|
|
.affected:test:
|
|
variables:
|
|
EIGEN_CI_CTEST_REGEX_FILE: affected/ctest_regex.txt
|
|
|
|
##### Always, under the label ##################################################
|
|
|
|
test:linux:x86-64:gcc-10:avx2:affected:
|
|
extends: [ .test:linux:x86-64:gcc-10:avx2, .affected:test ]
|
|
needs: [ build:linux:cross:x86-64:gcc-10:avx2:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests, rules]
|
|
|
|
test:linux:aarch64:gcc-10:default:affected:
|
|
extends: [ .test:linux:aarch64:gcc-10:default, .affected:test ]
|
|
needs: [ build:linux:cross:aarch64:gcc-10:default:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests, rules]
|
|
|
|
##### Backend-triggered ########################################################
|
|
|
|
test:linux:x86-64:gcc-10:default:affected:
|
|
extends: [ .test:linux:x86-64:gcc-10:default, .affected:test ]
|
|
needs: [ build:linux:cross:x86-64:gcc-10:default:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests:sse, rules]
|
|
|
|
test:linux:x86-64:gcc-10:avx:affected:
|
|
extends: [ .test:linux:x86-64:gcc-10:avx, .affected:test ]
|
|
needs: [ build:linux:cross:x86-64:gcc-10:avx:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests:avx, rules]
|
|
|
|
test:linux:x86-64:gcc-10:avx512dq:affected:
|
|
extends: [ .test:linux:x86-64:gcc-10:avx512dq, .affected:test ]
|
|
needs: [ build:linux:cross:x86-64:gcc-10:avx512dq:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests:avx512, rules]
|
|
|
|
test:linux:arm:gcc-10:default:affected:
|
|
extends: [ .test:linux:arm:gcc-10:default, .affected:test ]
|
|
needs: [ build:linux:cross:arm:gcc-10:default:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests:neon, rules]
|
|
|
|
test:linux:ppc64le:gcc-14:default:affected:
|
|
extends: [ .test:linux:ppc64le:gcc-14:default, .affected:test ]
|
|
needs: [ build:linux:cross:ppc64le:gcc-14:default:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests:altivec, rules]
|
|
|
|
test:linux:loongarch64:gcc-14:default:affected:
|
|
extends: [ .test:linux:loongarch64:gcc-14:default, .affected:test ]
|
|
needs: [ build:linux:cross:loongarch64:gcc-14:default:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests:lsx, rules]
|
|
|
|
test:linux:riscv64:gcc-15:default:affected:
|
|
extends: [ .test:linux:riscv64:gcc-15:default, .affected:test ]
|
|
needs: [ build:linux:riscv64:gcc-15:default:affected, select:tests ]
|
|
rules: !reference [.rules:libeigen:affected-tests:rvv10, rules]
|