Link granular libneo sub-targets (decompose-neo-core)#435
Conversation
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.
|
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. |
There was a problem hiding this comment.
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:
-
All 7 targets exist in libneo
main: Confirmed via GitHub API thatLIBNEO::boozer,LIBNEO::coordinates,LIBNEO::field,LIBNEO::magnetic_field_base,LIBNEO::odeint,LIBNEO::util,LIBNEO::vmec_fieldare all exported as aliases in the current libneomainbranch. -
Every libneo module used by SIMPLE is covered: Traced all
usestatements insrc/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. -
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 libneomain, which already exports all granular targets. Build + 86 tests pass. -
No stale references:
LIBNEO::neoappears nowhere else in the repo (no other CMakeLists.txt, no test or Python build files). All executables (simple.x, diag tools, tests) linksimplePRIVATELY and inherit libneo transitively. -
Minimal diff: 1 file, 7 lines changed. No new build options, env vars, or config surface.
LIBNEO::neoumbrella 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":[]}
Summary
libneo
mainsplits the monolithicLIBNEO::neoumbrella into granular sub-targets. Thesimplelibrary now links only what it uses:LIBNEO::coordinatesforlibneo_coordinates,vmec_coordinates,cylindrical_cartesian(pullsvmec_support,interpolate,nctools,utiltransitively, coveringnew_vmec_stuff_mod,spline_vmec_sub,spl_three_to_five_sub, etc.)LIBNEO::fieldforneo_biotsavartLIBNEO::odeintforodeint_allroutines_subLIBNEO::utilforlibneo_kindsLIBNEO::boozerforboozer_sub,boozer_chartmap,boozer_chartmap_ioLIBNEO::magnetic_field_baseforfield_base,magnetic_field_tLIBNEO::vmec_fieldforfield_vmec,vmec_field_evalThe umbrella
LIBNEO::neois 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::odeintthe build failed: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_pipelinepasses in 43.7 s standalone; only flagged a 60 s ctest timeout under full-jparallel load, not a correctness failure).