# 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