603 lines
24 KiB
YAML
603 lines
24 KiB
YAML
# Base configuration for linux cross-compilation.
|
|
# SPDX-FileCopyrightText: The Eigen Authors
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
.build:linux:cross:
|
|
needs: []
|
|
extends: .common:linux:cross
|
|
stage: build
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: buildtests
|
|
EIGEN_CI_SKIP_APT: "false"
|
|
script:
|
|
- . ci/scripts/build.linux.script.sh
|
|
tags:
|
|
- saas-linux-2xlarge-amd64
|
|
rules: !reference [.rules:libeigen:all-tests, rules]
|
|
cache:
|
|
key: "$CI_JOB_NAME_SLUG-$CI_COMMIT_REF_SLUG-BUILD"
|
|
paths:
|
|
- ${EIGEN_CI_BUILDDIR}/
|
|
|
|
######## x86-64 ################################################################
|
|
|
|
.build:linux:cross:x86-64:
|
|
extends: .build:linux:cross
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: x86_64
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: x86_64-linux-gnu
|
|
|
|
# GCC-10 (stable recent version)
|
|
build:linux:cross:x86-64:gcc-10:default:
|
|
extends: .build:linux:cross:x86-64
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-10
|
|
EIGEN_CI_CXX_COMPILER: g++-10
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-x86-64-linux-gnu
|
|
EIGEN_CI_CROSS_C_COMPILER: x86_64-linux-gnu-gcc-10
|
|
EIGEN_CI_CROSS_CXX_COMPILER: x86_64-linux-gnu-g++-10
|
|
|
|
# GCC-13 for AVX512-FP16 (_Float16 support).
|
|
build:linux:cross:x86-64:gcc-13:default:
|
|
extends: .build:linux:cross:x86-64
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-13
|
|
EIGEN_CI_CXX_COMPILER: g++-13
|
|
EIGEN_CI_CROSS_INSTALL: g++-13-x86-64-linux-gnu
|
|
EIGEN_CI_CROSS_C_COMPILER: x86_64-linux-gnu-gcc-13
|
|
EIGEN_CI_CROSS_CXX_COMPILER: x86_64-linux-gnu-g++-13
|
|
|
|
build:linux:cross:x86-64:gcc-10:avx:
|
|
extends: build:linux:cross:x86-64:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX=on"
|
|
|
|
build:linux:cross:x86-64:gcc-10:avx2:
|
|
extends: build:linux:cross:x86-64:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX2=on"
|
|
|
|
build:linux:cross:x86-64:gcc-10:avx512dq:
|
|
extends: build:linux:cross:x86-64:gcc-10:default
|
|
variables:
|
|
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX512DQ=on"
|
|
|
|
# AVX512-FP16 builds are split into official/unsupported because building all
|
|
# tests exceeds the 3-hour GitLab SaaS shared-runner timeout.
|
|
.build:linux:cross:x86-64:gcc-13:avx512fp16:
|
|
extends: build:linux:cross:x86-64:gcc-13:default
|
|
# Disable cache: uploading the build directory takes ~35 minutes and the
|
|
# savings from cache hits do not compensate for the upload cost.
|
|
cache: []
|
|
variables:
|
|
# Force -O2 via EIGEN_TEST_CUSTOM_CXX_FLAGS (appended after the default
|
|
# Release -O3 -DNDEBUG; last -O wins). GCC bug at -O3 generates invalid
|
|
# masked vmovsh with {z} on memory stores for _Float16 operations
|
|
# (zero-masking on memory destinations is architecturally illegal in
|
|
# AVX-512).
|
|
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX512FP16=on -DEIGEN_TEST_AVX512DQ=on -DEIGEN_TEST_F16C=on -DEIGEN_TEST_CUSTOM_CXX_FLAGS=-O2"
|
|
|
|
build:linux:cross:x86-64:gcc-13:avx512fp16:official:
|
|
extends: .build:linux:cross:x86-64:gcc-13:avx512fp16
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: BuildOfficial
|
|
|
|
build:linux:cross:x86-64:gcc-13:avx512fp16:unsupported:
|
|
extends: .build:linux:cross:x86-64:gcc-13:avx512fp16
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: BuildUnsupported
|
|
|
|
# Clang-14 (stable recent version)
|
|
build:linux:cross:x86-64:clang-14:default:
|
|
extends: .build:linux:cross:x86-64
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
EIGEN_CI_C_COMPILER: clang-14
|
|
EIGEN_CI_CXX_COMPILER: clang++-14
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-x86-64-linux-gnu clang-14
|
|
|
|
build:linux:cross:x86-64:clang-14:avx2:
|
|
extends: build:linux:cross:x86-64:clang-14:default
|
|
variables:
|
|
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX2=on"
|
|
|
|
build:linux:cross:x86-64:clang-14:avx512dq:
|
|
extends: build:linux:cross:x86-64:clang-14:default
|
|
variables:
|
|
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX512DQ=on"
|
|
|
|
# Generic vector extension backend.
|
|
build:linux:cross:x86-64:clang-19:generic:avx512dq:
|
|
extends: build:linux:cross:x86-64:clang-14:default
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19
|
|
EIGEN_CI_C_COMPILER: clang-19
|
|
EIGEN_CI_CXX_COMPILER: clang++-19
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-x86-64-linux-gnu clang-19
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DEIGEN_TEST_CUSTOM_CXX_FLAGS=-mfma;-mavx512dq;-DEIGEN_VECTORIZE_GENERIC=1
|
|
|
|
# Nightly and all-tests full test suite in C++20 mode.
|
|
build:linux:cross:x86-64:clang-19:cxx20:nightly:
|
|
extends: .build:linux:cross:x86-64
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19
|
|
EIGEN_CI_C_COMPILER: clang-19
|
|
EIGEN_CI_CXX_COMPILER: clang++-19
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-x86-64-linux-gnu clang-19
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DCMAKE_CXX_STANDARD=20
|
|
# Nightly job restricted to the default branch on schedule.
|
|
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/"
|
|
|
|
build:linux:docs:
|
|
extends: .build:linux:cross
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: any
|
|
EIGEN_CI_BUILD_TARGET: doc
|
|
EIGEN_CI_INSTALL: ca-certificates clang flex python3 bison graphviz
|
|
EIGEN_CI_C_COMPILER: clang
|
|
EIGEN_CI_CXX_COMPILER: clang++
|
|
EIGEN_CI_BEFORE_SCRIPT: ". ci/scripts/build_and_install_doxygen.sh Release_1_13_2"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen"
|
|
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
|
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/"
|
|
|
|
|
|
######## Sanitizers ############################################################
|
|
|
|
# ASAN/UBSAN builds are split into official/unsupported because the
|
|
# instrumented executables are too large to upload as a single artifact.
|
|
.build:linux:cross:x86-64:clang-19:default:asan-ubsan:
|
|
extends: .build:linux:cross:x86-64
|
|
# Disable cache for ASAN builds: instrumented .o files are so large that
|
|
# downloading the cache can take longer than a clean build from scratch.
|
|
cache: []
|
|
timeout: 2h
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19 libclang-rt-19-dev
|
|
EIGEN_CI_C_COMPILER: clang-19
|
|
EIGEN_CI_CXX_COMPILER: clang++-19
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-x86-64-linux-gnu clang-19 libclang-rt-19-dev
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DEIGEN_TEST_CUSTOM_CXX_FLAGS=-fsanitize=address,undefined;-fno-omit-frame-pointer;-fno-sanitize-recover=undefined
|
|
-DEIGEN_TEST_CUSTOM_LINKER_FLAGS=-fsanitize=address,undefined
|
|
|
|
build:linux:cross:x86-64:clang-19:default:asan-ubsan:official:
|
|
extends: .build:linux:cross:x86-64:clang-19:default:asan-ubsan
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: BuildOfficial
|
|
|
|
build:linux:cross:x86-64:clang-19:default:asan-ubsan:unsupported:
|
|
extends: .build:linux:cross:x86-64:clang-19:default:asan-ubsan
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: BuildUnsupported
|
|
|
|
######## NVHPC #################################################################
|
|
|
|
# NVHPC (nvc++) uses NVIDIA's HPC SDK container image with the compilers
|
|
# pre-installed. We override EIGEN_CI_INSTALL to avoid trying to apt-get
|
|
# install the compiler.
|
|
# Split into official/unsupported because nvc++ is so slow that the full
|
|
# build exceeds the 3-hour GitLab SaaS shared-runner timeout.
|
|
.build:linux:x86-64:nvhpc-26.1:
|
|
extends: .build:linux:cross:x86-64
|
|
image: nvcr.io/nvidia/nvhpc:26.1-devel-cuda13.1-ubuntu24.04
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: nvc
|
|
EIGEN_CI_CXX_COMPILER: nvc++
|
|
EIGEN_CI_INSTALL: ""
|
|
EIGEN_CI_CROSS_INSTALL: ""
|
|
# NVHPC's compiler frontend is very memory-hungry with template-heavy code.
|
|
# The 2xlarge runner has 128 GB, so 16 jobs gives ~8 GB per process.
|
|
# The shuffled-batch build strategy spreads memory-hungry targets across
|
|
# batches, preventing simultaneous OOM-prone compilations.
|
|
EIGEN_CI_BUILD_JOBS: "16"
|
|
EIGEN_CI_FALLBACK_JOBS: "4"
|
|
|
|
build:linux:x86-64:nvhpc-26.1:default:official:
|
|
extends: .build:linux:x86-64:nvhpc-26.1
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: BuildOfficial
|
|
|
|
build:linux:x86-64:nvhpc-26.1:default:unsupported:
|
|
extends: .build:linux:x86-64:nvhpc-26.1
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: BuildUnsupported
|
|
|
|
######## CUDA ##################################################################
|
|
|
|
.build:linux:cuda:
|
|
extends: .build:linux:cross:x86-64
|
|
# CUDA images and compiler packages vary enough that a cached CMake build
|
|
# directory can retain stale compiler-feature detection across pipeline runs.
|
|
cache: []
|
|
variables:
|
|
# Additional flags passed to the cuda compiler.
|
|
EIGEN_CI_CUDA_CXX_FLAGS: ""
|
|
# Compute architectures present in the GitLab CI runners.
|
|
# SaaS GPU runners have Tesla T4 (sm_75).
|
|
EIGEN_CI_CUDA_COMPUTE_ARCH: "75"
|
|
EIGEN_CI_BUILD_TARGET: buildtests_gpu
|
|
EIGEN_CI_TEST_CUDA_CLANG: "off"
|
|
EIGEN_CI_TEST_CUDA_NVC: "off"
|
|
EIGEN_CI_ADDITIONAL_ARGS:
|
|
-DEIGEN_TEST_CUDA=on
|
|
-DEIGEN_CUDA_CXX_FLAGS=${EIGEN_CI_CUDA_CXX_FLAGS}
|
|
-DEIGEN_CUDA_COMPUTE_ARCH=${EIGEN_CI_CUDA_COMPUTE_ARCH}
|
|
-DEIGEN_TEST_CUDA_CLANG=${EIGEN_CI_TEST_CUDA_CLANG}
|
|
-DEIGEN_TEST_CUDA_NVC=${EIGEN_CI_TEST_CUDA_NVC}
|
|
rules: !reference [.rules:libeigen:gpu, rules]
|
|
tags:
|
|
# Build on regular linux to limit GPU cost.
|
|
- saas-linux-2xlarge-amd64
|
|
|
|
# ---- CUDA 11.5 + oldest supported compilers ---------------------------------
|
|
# clang-14 fully supports up to CUDA 11.5. CUDA 11.5 images are Ubuntu 20.04
|
|
# only, which lacks clang-14 and cmake >= 3.17. EIGEN_CI_BEFORE_SCRIPT adds
|
|
# the LLVM apt repo (for clang-14) and installs cmake via pip.
|
|
|
|
build:linux:cuda-11.5:gcc-10:
|
|
extends: .build:linux:cuda
|
|
image: nvidia/cuda:11.5.2-devel-ubuntu20.04
|
|
before_script:
|
|
# Ubuntu 20.04 has cmake 3.16; Eigen requires 3.17+. Pull a newer
|
|
# cmake from Kitware's official apt repo for focal.
|
|
- apt-get update -y > /dev/null
|
|
- apt-get install -y --no-install-recommends wget gnupg ca-certificates > /dev/null
|
|
- wget -qO - https://apt.kitware.com/keys/kitware-archive-latest.asc
|
|
| gpg --dearmor -o /usr/share/keyrings/kitware-archive-keyring.gpg
|
|
- echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main'
|
|
> /etc/apt/sources.list.d/kitware.list
|
|
- apt-get update -y > /dev/null
|
|
- . ci/scripts/common.linux.before_script.sh
|
|
variables:
|
|
EIGEN_CI_INSTALL: gcc-10 g++-10
|
|
EIGEN_CI_C_COMPILER: gcc-10
|
|
EIGEN_CI_CXX_COMPILER: g++-10
|
|
|
|
build:linux:cuda-11.5:clang-14:
|
|
extends: build:linux:cuda-11.5:gcc-10
|
|
before_script:
|
|
# Ubuntu 20.04 lacks clang-14 and has cmake 3.16. Add both the LLVM
|
|
# apt repo (for clang-14) and Kitware's apt repo (for cmake >= 3.17)
|
|
# before running common.linux.before_script.sh, which apt-installs
|
|
# cmake + the requested compiler.
|
|
- apt-get update -y > /dev/null
|
|
- apt-get install -y --no-install-recommends wget gnupg ca-certificates > /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
|
|
- wget -qO - https://apt.kitware.com/keys/kitware-archive-latest.asc
|
|
| gpg --dearmor -o /usr/share/keyrings/kitware-archive-keyring.gpg
|
|
- echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main'
|
|
> /etc/apt/sources.list.d/kitware.list
|
|
- apt-get update -y > /dev/null
|
|
- . ci/scripts/common.linux.before_script.sh
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
EIGEN_CI_C_COMPILER: clang-14
|
|
EIGEN_CI_CXX_COMPILER: clang++-14
|
|
EIGEN_CI_TEST_CUDA_CLANG: "on"
|
|
|
|
# ---- New: latest CUDA + newest compilers, sm_75;sm_90 ----------------------
|
|
# sm_75 (T4) coverage comes from every job; sm_90 only from newer CUDA.
|
|
|
|
# GCC-13, CUDA-12.6 (nvcc)
|
|
# CUDA 12.6 nvcc only supports gcc up to 13.
|
|
build:linux:cuda-12.6:gcc-13:
|
|
extends: .build:linux:cuda
|
|
image: nvidia/cuda:12.6.3-devel-ubuntu24.04
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-13
|
|
EIGEN_CI_CXX_COMPILER: g++-13
|
|
EIGEN_CI_CUDA_COMPUTE_ARCH: "75;90"
|
|
|
|
# Clang-19, CUDA-12.6 (clang as CUDA compiler)
|
|
# Clang CUDA support lags behind nvcc; clang-19 supports up to CUDA 12.x.
|
|
build:linux:cuda-12.6:clang-19:
|
|
extends: .build:linux:cuda
|
|
image: nvidia/cuda:12.6.3-devel-ubuntu24.04
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-19
|
|
EIGEN_CI_C_COMPILER: clang-19
|
|
EIGEN_CI_CXX_COMPILER: clang++-19
|
|
EIGEN_CI_TEST_CUDA_CLANG: "on"
|
|
EIGEN_CI_CUDA_COMPUTE_ARCH: "75;90"
|
|
|
|
|
|
######### HIP ##################################################################
|
|
# Note: these are currently build-only, until we get an AMD-supported runner.
|
|
|
|
# ROCm HIP
|
|
build:linux:rocm-latest:gcc-11:
|
|
extends: .build:linux:cross
|
|
image: rocm/dev-ubuntu-24.04:6.3.1
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-11
|
|
EIGEN_CI_CXX_COMPILER: g++-11
|
|
EIGEN_CI_BUILD_TARGET: buildtests_gpu
|
|
EIGEN_CI_ADDITIONAL_ARGS: -DEIGEN_TEST_HIP=on
|
|
rules: !reference [.rules:libeigen:gpu, rules]
|
|
cache: [] # Disable cache for ROCm, since it fails whenever the image updates.
|
|
|
|
|
|
######## Arm ###################################################################
|
|
|
|
.build:linux:cross:arm:
|
|
extends: .build:linux:cross
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: arm
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: arm-linux-gnueabihf
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DEIGEN_TEST_CUSTOM_CXX_FLAGS=-march=armv7-a;-mfpu=neon-vfpv4
|
|
-DCMAKE_SYSTEM_NAME=Linux
|
|
-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-arm-static;-L;/usr/arm-linux-gnueabihf
|
|
|
|
build:linux:cross:arm:gcc-10:default:
|
|
extends: .build:linux:cross:arm
|
|
variables:
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-arm-linux-gnueabihf qemu-user-static
|
|
EIGEN_CI_CROSS_C_COMPILER: arm-linux-gnueabihf-gcc-10
|
|
EIGEN_CI_CROSS_CXX_COMPILER: arm-linux-gnueabihf-g++-10
|
|
|
|
build:linux:cross:arm:clang-14:default:
|
|
extends: .build:linux:cross:arm
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
EIGEN_CI_C_COMPILER: clang-14
|
|
EIGEN_CI_CXX_COMPILER: clang++-14
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-arm-linux-gnueabihf clang-14 qemu-user-static
|
|
|
|
######## aarch64 ###############################################################
|
|
|
|
.build:linux:cross:aarch64:
|
|
extends: .build:linux:cross
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: aarch64
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: aarch64-linux-gnu
|
|
EIGEN_CI_ADDITIONAL_ARGS: -DEIGEN_TEST_CUSTOM_CXX_FLAGS=-march=armv8.2-a+fp16
|
|
tags:
|
|
- saas-linux-large-arm64
|
|
|
|
######## SME ###################################################################
|
|
|
|
# Emulation via QEMU for SME (Streaming Matrix Extension)
|
|
.build:linux:cross:sme:
|
|
extends: .build:linux:cross
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: aarch64-sme
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: aarch64-linux-gnu
|
|
# The emulator baked in here deliberately has no -cpu argument: each test job
|
|
# selects its streaming SVL via qemu-user's QEMU_CPU environment variable
|
|
# instead (a command-line -cpu would silently override it).
|
|
#
|
|
# EIGEN_CI_ADDITIONAL_ARGS is expanded *unquoted* into the cmake command
|
|
# line (ci/scripts/build.linux.script.sh), so each -D value must be a single
|
|
# shell word: multi-token flags use CMake's ';' list separator, with no
|
|
# spaces or embedded quotes (cf. the arm / generic-vector jobs).
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DEIGEN_TEST_SME=ON
|
|
-DEIGEN_TEST_CUSTOM_CXX_FLAGS=-march=armv9.2-a+sme2
|
|
-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64;-L;/usr/aarch64-linux-gnu
|
|
# SME ACLE (arm_sme.h, __arm_streaming, +sme2) requires GCC >= 14.
|
|
# The build stage only cross-compiles and never invokes the emulator, so
|
|
# no qemu here -- the test stage installs qemu-user.
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-aarch64-linux-gnu
|
|
# product_symm/product_trsolve/product_trmm/product_syrk/mixingtypes exercise
|
|
# the SME packers through their non-dense-GEMM consumers (selfadjoint,
|
|
# triangular-solve, triangular-product, rank-update, mixed-scalar) that
|
|
# product_sme can't reach. Explicit list, not `buildtests`: cross-building
|
|
# every test under the SME flags overruns the runner timeout.
|
|
EIGEN_CI_BUILD_TARGET: product_sme product_symm product_trsolve product_trmm product_syrk mixingtypes
|
|
# Inherit the 2xlarge runner from .build:linux:cross: GitLab's open-source
|
|
# program bills small and large runners the same, so don't downsize.
|
|
|
|
build:linux:cross:sme:gcc-14:default:
|
|
extends: .build:linux:cross:sme
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-14
|
|
EIGEN_CI_CXX_COMPILER: g++-14
|
|
EIGEN_CI_CROSS_C_COMPILER: aarch64-linux-gnu-gcc-14
|
|
EIGEN_CI_CROSS_CXX_COMPILER: aarch64-linux-gnu-g++-14
|
|
|
|
# Full nightly SME coverage: compile the *entire* test suite (buildtests, both
|
|
# Official and Unsupported) under +sme2, not just the SME-relevant targets. This
|
|
# is what treats SME "as any other platform": it catches any compile breakage
|
|
# under the streaming-mode flags across the whole codebase -- e.g. the tensor-
|
|
# contraction packer path that only surfaces once TensorContraction is built
|
|
# with the SME backend active. Runs on the nightly schedule and on all-tests
|
|
# MRs via the inherited .rules:libeigen:all-tests; the per-SVL subset build
|
|
# above stays as the fast, cheap signal. Cross-building every test under the SME
|
|
# flags is slow -- the raised timeout is a starting estimate; tune it once a
|
|
# real run establishes the wall-clock (drop to BuildOfficial/BuildUnsupported
|
|
# split builds if a single job overruns).
|
|
build:linux:cross:sme:gcc-14:full:
|
|
extends: .build:linux:cross:sme
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-14
|
|
EIGEN_CI_CXX_COMPILER: g++-14
|
|
EIGEN_CI_CROSS_C_COMPILER: aarch64-linux-gnu-gcc-14
|
|
EIGEN_CI_CROSS_CXX_COMPILER: aarch64-linux-gnu-g++-14
|
|
EIGEN_CI_BUILD_TARGET: buildtests
|
|
timeout: 2h
|
|
|
|
|
|
|
|
build:linux:cross:aarch64:gcc-10:default:
|
|
extends: .build:linux:cross:aarch64
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-10
|
|
EIGEN_CI_CXX_COMPILER: g++-10
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-aarch64-linux-gnu
|
|
EIGEN_CI_CROSS_C_COMPILER: aarch64-linux-gnu-gcc-10
|
|
EIGEN_CI_CROSS_CXX_COMPILER: aarch64-linux-gnu-g++-10
|
|
|
|
build:linux:cross:aarch64:clang-14:default:
|
|
extends: .build:linux:cross:aarch64
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-14
|
|
EIGEN_CI_C_COMPILER: clang-14
|
|
EIGEN_CI_CXX_COMPILER: clang++-14
|
|
EIGEN_CI_CROSS_INSTALL: g++-10-aarch64-linux-gnu clang-14
|
|
|
|
######## ppc64le ###############################################################
|
|
|
|
.build:linux:cross:ppc64le:
|
|
extends: .build:linux:cross
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: ppc64le
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: powerpc64le-linux-gnu
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DCMAKE_SYSTEM_NAME=Linux
|
|
-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-ppc64le-static;-L;/usr/powerpc64le-linux-gnu
|
|
|
|
build:linux:cross:ppc64le:gcc-14:default:
|
|
extends: .build:linux:cross:ppc64le
|
|
variables:
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-powerpc64le-linux-gnu qemu-user-static
|
|
EIGEN_CI_CROSS_C_COMPILER: powerpc64le-linux-gnu-gcc-14
|
|
EIGEN_CI_CROSS_CXX_COMPILER: powerpc64le-linux-gnu-g++-14
|
|
|
|
build:linux:cross:ppc64le:clang-16:default:
|
|
extends: .build:linux:cross:ppc64le
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: clang-16
|
|
EIGEN_CI_CXX_COMPILER: clang++-16
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-powerpc64le-linux-gnu clang-16 qemu-user-static
|
|
|
|
######## loongarch64 #################################################
|
|
|
|
.build:linux:cross:loongarch64:
|
|
extends: .build:linux:cross
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: loongarch64
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: loongarch64-linux-gnu
|
|
|
|
# GCC-14 (minimum on Ubuntu 24)
|
|
build:linux:cross:loongarch64:gcc-14:default:
|
|
extends: .build:linux:cross:loongarch64
|
|
variables:
|
|
EIGEN_CI_CROSS_INSTALL: g++-14-loongarch64-linux-gnu qemu-user-static
|
|
EIGEN_CI_CROSS_C_COMPILER: loongarch64-linux-gnu-gcc-14
|
|
EIGEN_CI_CROSS_CXX_COMPILER: loongarch64-linux-gnu-g++-14
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DCMAKE_SYSTEM_NAME=Linux
|
|
-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-loongarch64-static;-L;/usr/loongarch64-linux-gnu
|
|
-DEIGEN_TEST_LSX=on
|
|
|
|
######## riscv64 ###############################################################
|
|
# Builds cross-compile on amd64; tests run natively on the riscv runner
|
|
# (SpacemiT K3, RVA23, RVV 1.0, VLEN=256). Jobs are allowed to fail while
|
|
# the runner is being brought up.
|
|
|
|
# Eigen's RVV backend requires a compile-time-fixed vector length, so pin it to
|
|
# the runner's 256-bit VLEN with zvl256b and -mrvv-vector-bits=zvl (gcc-15 rejects
|
|
# a numeric -mrvv-vector-bits=256, accepting only "zvl"/"scalable"; "zvl" takes the
|
|
# length from the Zvl*b march extension). Zvfh enables half-precision
|
|
# vectorization. Set here so every riscv64 build below -- full builds and smoke
|
|
# tests, gcc and clang -- is actually vectorized.
|
|
.build:linux:riscv64:
|
|
extends: .build:linux:cross
|
|
# Cross-compiles to riscv64 on an amd64 runner using the prebuilt image, which
|
|
# carries the riscv64 cross toolchain (g++-15-riscv64-linux-gnu / clang-21)
|
|
# plus cmake/ninja/git -- so apt is skipped entirely.
|
|
image: ${EIGEN_CI_IMAGE_LINUX_RISCV64_SMOKETEST_BUILD}
|
|
variables:
|
|
EIGEN_CI_TARGET_ARCH: riscv64
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_CROSS_TARGET_TRIPLE: riscv64-linux-gnu
|
|
EIGEN_CI_ADDITIONAL_ARGS: >-
|
|
-DEIGEN_TEST_CUSTOM_CXX_FLAGS=-march=rv64gc_v_zvl256b_zfh_zvfh;-mrvv-vector-bits=zvl;-DEIGEN_RISCV64_USE_RVV10
|
|
allow_failure: true
|
|
|
|
build:linux:riscv64:gcc-15:default:
|
|
extends: .build:linux:riscv64
|
|
variables:
|
|
EIGEN_CI_C_COMPILER: gcc-15
|
|
EIGEN_CI_CXX_COMPILER: g++-15
|
|
EIGEN_CI_CROSS_INSTALL: g++-15-riscv64-linux-gnu
|
|
EIGEN_CI_CROSS_C_COMPILER: riscv64-linux-gnu-gcc-15
|
|
EIGEN_CI_CROSS_CXX_COMPILER: riscv64-linux-gnu-g++-15
|
|
|
|
build:linux:riscv64:clang-21:default:
|
|
extends: .build:linux:riscv64
|
|
variables:
|
|
EIGEN_CI_INSTALL: clang-21
|
|
EIGEN_CI_C_COMPILER: clang-21
|
|
EIGEN_CI_CXX_COMPILER: clang++-21
|
|
EIGEN_CI_CROSS_INSTALL: g++-15-riscv64-linux-gnu clang-21
|
|
|
|
build:linux:riscv64:gcc-15:default:smoketest:
|
|
extends: build:linux:riscv64:gcc-15:default
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: buildsmoketests
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
|
|
build:linux:riscv64:clang-21:default:smoketest:
|
|
extends: build:linux:riscv64:clang-21:default
|
|
variables:
|
|
EIGEN_CI_BUILD_TARGET: buildsmoketests
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
|
|
######## MR Smoke Tests ########################################################
|
|
# aarch64 targets are cross-compiled via g++-10-aarch64-linux-gnu / clang-14.
|
|
# Tests run on their respective native runners (see test.linux.gitlab-ci.yml).
|
|
|
|
build:linux:cross:x86-64:gcc-10:default:smoketest:
|
|
extends: build:linux:cross:x86-64:gcc-10:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_BUILD}
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_BUILD_TARGET: buildsmoketests
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
|
|
build:linux:cross:x86-64:clang-14:default:smoketest:
|
|
extends: build:linux:cross:x86-64:clang-14:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_BUILD}
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_BUILD_TARGET: buildsmoketests
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
|
|
build:linux:aarch64:gcc-10:default:smoketest:
|
|
extends: build:linux:cross:aarch64:gcc-10:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_BUILD}
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_BUILD_TARGET: buildsmoketests
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|
|
|
|
build:linux:aarch64:clang-14:default:smoketest:
|
|
extends: build:linux:cross:aarch64:clang-14:default
|
|
image: ${EIGEN_CI_IMAGE_LINUX_AMD64_SMOKETEST_BUILD}
|
|
variables:
|
|
EIGEN_CI_SKIP_APT: "true"
|
|
EIGEN_CI_BUILD_TARGET: buildsmoketests
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
tags:
|
|
- saas-linux-medium-amd64
|