Skip to content

Rebuild against manylinux_2_28 and stop vendoring MPI - #162

Merged
ryanmrichard merged 1 commit into
masterfrom
rebuild_manylinux_2_28
Sep 16, 2026
Merged

ryanmrichard merged 1 commit into
masterfrom
rebuild_manylinux_2_28

Conversation

@ryanmrichard

Copy link
Copy Markdown
Member

Empty commit to trigger a republish. Second canary of the ecosystem ABI rebuild — the first needs_mpi repo, so this is the first CI exercise of the macOS delocate change.

Two fixes land here

1. libstdc++ ABI. manylinux2014 cannot emit the new ABI (_GLIBCXX_USE_DUAL_ABI 0 discards -D_GLIBCXX_USE_CXX11_ABI=1), so C++ consumers on gcc-14/clang-18 can't link the wheel's SDK. Already confirmed fixed on the published nwchemex-utilities 0.1.47, which now exports _ZN9utilities8printing9Demangler8demangleB5cxx11EPKc.

2. Double OpenMPI on macOS. delocate vendored Homebrew's MPI stack into nwchemex_parallelzone.dylibs/ and pointed libparallelzone.dylib at it via @loader_path. But the wheel also ships the C++ SDK, so a downstream CMake build (nwx_find_mpi()) links the system libmpi while the wheel's dylib loads the vendored one. Two OpenMPI images in one process don't share ompi_mpi_comm_world; MPI_Init populates one, ParallelZone reads the other, c_local_group is NULL:

Signal: Segmentation fault: 11 / Invalid permissions (2) / address 0x10
  parallelzone::mpi_helpers::detail_::CommPPPIMPL::CommPPPIMPL(ompi_communicator_t*)
  parallelzone::mpi_helpers::CommPP::CommPP(ompi_communicator_t*)
  parallelzone::runtime::RuntimeView::RuntimeView(int, char**)

This was not an OpenMPI-5 bug and not a ParallelZone source bug — it reproduces on 5.0.7 and 5.0.10, and MPI_Init returns MPI_SUCCESS. NWChemEx/.github@620e081 excludes the MPI stack from delocate, matching the Linux leg.

Verified locally

Same wheel, repaired two ways, identical repro linked against each:

repair vendored dylibs dylib's MPI dep result
cibuildwheel default 6 @loader_path/../nwchemex_parallelzone.dylibs/libmpi.40.dylib segfault, CI signature
patched none /opt/homebrew/opt/open-mpi/lib/libmpi.40.dylib size=1, exit 0

Note for reviewers

The macOS wheel will now require Homebrew open-mpi at import time. Linux already made this tradeoff deliberately; macOS is now consistent with it. Worth a docs line.

🤖 Generated with Claude Code

Two fixes land with this republish:

1. manylinux2014 cannot emit the new libstdc++ ABI (_GLIBCXX_USE_DUAL_ABI 0
   discards -D_GLIBCXX_USE_CXX11_ABI=1), so consumers on gcc-14/clang-18 fail
   to link the wheel's C++ SDK. Rebuilding on manylinux_2_28 fixes it, as
   already confirmed on the published nwchemex-utilities 0.1.47.

2. delocate was vendoring a second OpenMPI into the macOS wheel. Because the
   wheel also ships the C++ SDK, a downstream CMake build links the system
   Homebrew libmpi while the wheel's dylib loads the vendored copy. Two
   OpenMPI images in one process do not share ompi_mpi_comm_world, leaving
   c_local_group NULL and segfaulting at MPI init inside CommPP:

     Signal: Segmentation fault: 11 / Invalid permissions / address 0x10
       parallelzone::mpi_helpers::detail_::CommPPPIMPL::CommPPPIMPL

   NWChemEx/.github@620e081 excludes the MPI stack from delocate, matching
   what the Linux leg already does.

This is the first needs_mpi repo to rebuild, so it is the first CI exercise
of that macOS change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ryanmrichard
ryanmrichard merged commit feefec1 into master Sep 16, 2026
11 checks passed
@ryanmrichard
ryanmrichard deleted the rebuild_manylinux_2_28 branch September 16, 2026 19:57
@github-actions

Copy link
Copy Markdown
Contributor

🚀 [bumpr] Bumped!
New version:v0.1.45
Changes:v0.1.44...v0.1.45

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