build: bump abseil pin for Clang >= 21#5
Draft
krystophny wants to merge 6 commits into
Draft
Conversation
The CMake FetchContent abseil pin (2024-08) fails to compile under Clang >= 21: absl::Nonnull SFINAE in absl/strings/ascii.cc and the numbers.cc nullability annotations are rejected by the newer frontend. Bump to the 20260107.1 LTS, which compiles cleanly under Clang 21.1.8 and GCC. Clang is the compiler required for the Enzyme autodiff build. The Bazel build keeps its own (BCR) abseil pin and is unaffected.
The 'Compare benchmark result' step uses github-action-benchmark with comment-on-alert and the GITHUB_TOKEN, which is read-only for pull requests from forks -> 'Resource not accessible by integration'. Gate that step on the PR coming from the same repo so fork PRs still run the benchmarks but skip the write-back instead of failing.
The pinned vmec-0.0.6 cp310 wheel was f90wrapped against numpy 1.x. Under the numpy 2.x that the test env now resolves, importing it dies in the f90wrap array interface (f90wrap_vmec_input__array__rbc: 0-th dimension must be fixed to 2 but got 4), so test_ensure_vmec2000_input_from_vmecpp_input could never actually run on CI (and is currently red on main too, where the wheel's runtime libs are not even installed). Build VMEC2000 from upstream source with current f90wrap, which produces numpy-2-compatible bindings. The recipe mirrors SIMSOPT's own CI (hiddenSymmetries/VMEC2000, cmake/machines/ubuntu.json). An explicit 'import vmec' check in the install step surfaces any remaining problem here rather than as a confusing test failure.
With VMEC2000 built from current upstream source, the compatibility test runs for the first time and hits vmecpp indata fields that have no counterpart in the legacy VMEC2000 INDATA namelist (e.g. free_boundary_method), which raised AttributeError. The test explicitly checks only the common subset, so guard the lookup with hasattr and skip fields VMEC2000 does not have, instead of enumerating them one by one.
Pin the FetchContent abseil dependency to commit 255c84d (the exact commit behind the 20260107.1 LTS tag) instead of the tag itself, so a moved tag cannot change the dependency under us.
f5419e7 to
a176970
Compare
Use the canonical recipe (cache the built wheel keyed on the pinned source commit 728af8b, drop the unused FFTW/HDF5 dev packages) instead of rebuilding VMEC2000 unpinned on every run.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Bump the CMake
FetchContentabseil pin from the 2024-08 commit to the20260107.1LTS tag.Why
The differentiable VMEC++ work (Enzyme autodiff) requires Clang, since the
ClangEnzyme plugin only attaches to a Clang frontend. The 2024 abseil pin does
not compile under Clang >= 21:
absl/strings/ascii.ccusesabsl::Nonnull, whoseEnableNonnullSFINAE theClang 21 frontend rejects.
absl/strings/numbers.ccthen fails with nullability-annotated out-of-linedefinitions that no longer match their declarations.
20260107.1compiles cleanly under both Clang 21.1.8 and GCC. This is the sameabseil release nixpkgs builds against its Clang 21 toolchain. The newest tag
(
20260526.0) was rejected: it reintroduces thenumbers.ccmismatch underClang 21, so this pin deliberately stops at
20260107.1.This is the first patch in a stack that adds an Enzyme-based differentiable build
of VMEC++. It changes only the CMake dependency pin; no source changes.
The Bazel build keeps its own abseil version from the Bazel Central Registry and
is untouched.
Verification
All builds:
CMAKE_BUILD_TYPE=Release,-DVMECPP_USE_FFTX=OFF, targetvmec_standalone.Before, Clang 21.1.8, old pin:
After, this pin:
No numerical regression.
vmec_standalone examples/data/solovev.json, finalmultigrid step: