Skip to content

Link granular libneo sub-targets (decompose-neo-core)#435

Merged
krystophny merged 4 commits into
mainfrom
dep-audit/decompose-neo-core
Jul 9, 2026
Merged

Link granular libneo sub-targets (decompose-neo-core)#435
krystophny merged 4 commits into
mainfrom
dep-audit/decompose-neo-core

Conversation

@krystophny

@krystophny krystophny commented Jun 29, 2026

Copy link
Copy Markdown
Member

Summary

libneo main splits the monolithic LIBNEO::neo umbrella into granular sub-targets. The simple library now links only what it uses:

  • LIBNEO::coordinates for libneo_coordinates, vmec_coordinates, cylindrical_cartesian (pulls vmec_support, interpolate, nctools, util transitively, covering new_vmec_stuff_mod, spline_vmec_sub, spl_three_to_five_sub, etc.)
  • LIBNEO::field for neo_biotsavart
  • LIBNEO::odeint for odeint_allroutines_sub
  • LIBNEO::util for libneo_kinds
  • LIBNEO::boozer for boozer_sub, boozer_chartmap, boozer_chartmap_io
  • LIBNEO::magnetic_field_base for field_base, magnetic_field_t
  • LIBNEO::vmec_field for field_vmec, vmec_field_eval

The umbrella LIBNEO::neo is no longer needed.

Verification

CI (run 28590197146) builds against libneo main, which already exports all seven granular targets, and passes 86 tests (57 + 15 + 14), 100% green.

Locally, before adding LIBNEO::odeint the build failed:

field_can_meiss.f90:368: Fatal Error: Cannot open module file 'odeint_allroutines_sub.mod'

After the final sub-target set: build green (Linking Fortran static library src/libsimple.a, all executables linked, exit 0). Fast/unit ctest suite: 40/40 pass (test_chartmap_pipeline passes in 43.7 s standalone; only flagged a 60 s ctest timeout under full -j parallel load, not a correctness failure).

Required by itpplasma/libneo#275 which moved VMEC support files
into a dedicated sub-target.
Replace LIBNEO::neo with the specific sub-targets simple needs:
coordinates (libneo_coordinates, transitively vmec_support/interpolate/
nctools/util), field (neo_biotsavart), odeint (odeint_allroutines_sub),
and util (libneo_kinds).
main now uses libneo boozer_sub, field_base, field_vmec and
vmec_field_eval modules directly (SIMPLE copies dropped in cb64f23),
which the LIBNEO::neo umbrella previously provided. Add the matching
granular sub-targets so the build resolves those modules without the
umbrella.
@krystophny

Copy link
Copy Markdown
Member Author

Merged main; resolved python/CMakeLists.txt conflict by keeping main's canonical_coordinates_mod path fallback, and added LIBNEO::boozer, LIBNEO::magnetic_field_base, LIBNEO::vmec_field to the granular link set since main now consumes those libneo modules directly.

@slopqueue slopqueue Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ORCHESTRATE_REVIEW_STATUS: approve

This PR replaces the LIBNEO::neo umbrella link in src/CMakeLists.txt:110-118 with 7 granular libneo sub-targets. All checks pass (CI run 28590197146: 57+15+14 = 86 tests, 100% green). I verified every claim against the actual libneo main source and the CI logs.

Verification performed:

  1. All 7 targets exist in libneo main: Confirmed via GitHub API that LIBNEO::boozer, LIBNEO::coordinates, LIBNEO::field, LIBNEO::magnetic_field_base, LIBNEO::odeint, LIBNEO::util, LIBNEO::vmec_field are all exported as aliases in the current libneo main branch.

  2. Every libneo module used by SIMPLE is covered: Traced all use statements in src/ against libneo target contents. Direct links cover: libneo_kinds/binsrc_sub/plag_coeff_sub (util), libneo_coordinates/vmec_coordinates/cylindrical_cartesian (coordinates), neo_biotsavart (field), odeint_allroutines_sub (odeint), boozer_sub/boozer_chartmap/boozer_chartmap_io (boozer), field_base/magnetic_field_t (magnetic_field_base), field_vmec/vmec_field_eval (vmec_field). Transitive PUBLIC deps cover: interpolate, vmec_support (→ spline_vmec_sub, new_vmec_stuff_mod, canonical_coordinates_mod), nctools, fortnum — all confirmed in libneo CMakeLists.txt.

  3. CI actually exercised the changed path: CI logs show Requested branch dep-audit/decompose-neo-core not found in https://github.com/itpplasma/libneo.git; falling back to main — so CI built against libneo main, which already exports all granular targets. Build + 86 tests pass.

  4. No stale references: LIBNEO::neo appears nowhere else in the repo (no other CMakeLists.txt, no test or Python build files). All executables (simple.x, diag tools, tests) link simple PRIVATELY and inherit libneo transitively.

  5. Minimal diff: 1 file, 7 lines changed. No new build options, env vars, or config surface. LIBNEO::neo umbrella still exists in libneo for backward compat.

One non-blocking note: The PR body says "Built against libneo dep-audit/decompose-neo-core" but that branch doesn't exist in the libneo repo — CI fell back to main. This doesn't affect correctness since main already has all granular targets, but the PR description overstates the libneo-side coordination.

{"findings":[]}

@krystophny krystophny merged commit 2091de3 into main Jul 9, 2026
7 checks passed
@krystophny krystophny deleted the dep-audit/decompose-neo-core branch July 9, 2026 21:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant