CI: fix and fold RVV vectorization into the default riscv64 builds

Problem

The build:linux:riscv64:gcc-14:rvv job passed -mrvv-vector-bits=256, which gcc-14 does not accept:

riscv64-linux-gnu-g++-14: error: unrecognized argument in option '-mrvv-vector-bits=256'
note: valid arguments to '-mrvv-vector-bits=' are: scalable zvl

So the RVV build has been failing — silently, because the riscv64 jobs carry allow_failure: true (intended for while the native runner is being brought up). Net effect: no RISC-V build was actually exercising the RVV backend. The :default jobs compile scalar code (Eigen's RVV backend is opt-in via EIGEN_RISCV64_USE_RVV10 and additionally requires a compile-time-fixed VLEN — see ConfigureVectorization.h), and the one job that was meant to vectorize didn't compile.

Fix

Pin the runner's 256-bit VLEN the way gcc-14 accepts: add zvl256b to -march and use -mrvv-vector-bits=zvl (which derives the fixed length from the Zvl*b march extension):

-march=rv64gc_v_zvl256b_zfh_zvfh -mrvv-vector-bits=zvl -DEIGEN_RISCV64_USE_RVV10

Verified locally that this yields __riscv_v_fixed_vlen=256 on both gcc-14 and clang-18 — which is what trips EIGEN_VECTORIZE_RVV10 on and avoids the #error that fires when no fixed VLEN is set. (-mrvv-vector-bits=scalable would not work — it leaves VLEN variable; and =zvl without zvl256b gives 128, not 256.)

Folding it into the standard builds

Rather than keep a separate, easily-stale :rvv job, the flags now live on the .build:linux:riscv64 base via EIGEN_CI_ADDITIONAL_ARGS, so every riscv64 build inherits them — the full builds and the smoke tests, for both gcc-14 and clang-18 (smoke-test jobs extends: the defaults, which extends: the base). The now-redundant build:linux:riscv64:gcc-14:rvv build job and its :official / :unsupported test jobs are removed.

allow_failure: true is intentionally left in place — we have no control over the native runner's availability.

🤖 Generated with Claude Code

Merge request reports

Loading
Loading