Skip to content

Wheels 0.17.1.post4#1904

Merged
ax3l merged 7 commits into
openPMD:wheelsfrom
ax3l:wheels-0.17.1.post4
Jul 2, 2026
Merged

Wheels 0.17.1.post4#1904
ax3l merged 7 commits into
openPMD:wheelsfrom
ax3l:wheels-0.17.1.post4

Conversation

@ax3l

@ax3l ax3l commented Jun 28, 2026

Copy link
Copy Markdown
Member

_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR (CXXFLAGS)

VS 2022 17.10 made std::mutex's constructor constexpr, leaving its internals NULL until first use. We --exclude msvcp*.dll from the wheel, so the SYSTEM msvcp140.dll runs; if it predates 17.10 it NULL-derefs in Mtx_destroy -> import openpmd_api access-violates on win64 (surfaced when co-loaded under the ImpactX wheel's test). The define reverts to the non-constexpr constructor, ABI-compatible with any msvcp140.

Comment thread .github/workflows/build.yml
ax3l and others added 3 commits July 2, 2026 00:45
…TOR)

The win64 openpmd_api wheel access-violates at `import openpmd_api` (NULL read in
MSVCP140!Mtx_destroy) -- the VS 2022 17.10 std::mutex constexpr-constructor ABI
break. The wheel --excludes msvcp*.dll, so the SYSTEM msvcp140.dll runs and can
predate the build toolset's STL, which then NULL-derefs in Mtx_destroy.

Surfaced co-loaded under the ImpactX wheel's win64 test: with the same fix added
to the impactx build, amrex and impactx now import cleanly and the crash moved to
the openpmd_api dependency -- which needs the identical fix.

Add /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR to the Windows CXXFLAGS to revert to
the non-constexpr constructor, ABI-compatible with any msvcp140.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…at too

The std::mutex ABI define is already in CIBW_ENVIRONMENT_WINDOWS (the central
wheel build); set it in the Windows dependency builder as well so ADIOS2 (and any
other C++ dependency) is built with the same non-constexpr std::mutex ABI as
openPMD-api. Since we --exclude msvcp*.dll from the wheel, this keeps the whole
toolchain consistent and portable against any system msvcp140.dll (VS 2022 17.10
made the ctor constexpr -> otherwise a NULL deref in Mtx_destroy).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…E=2)

library_builders.sh already builds the wasm zlib/HDF5 with -fvisibility=hidden
(the DSO-local half). Add the complementary link-time half as a source patch:
python-wasm-side-module.patch adds an EMSCRIPTEN branch to the co-load block
(from python-hide-symbols.patch) that links the extension with -sSIDE_MODULE=2
and -sEXPORTED_FUNCTIONS=_PyInit_openpmd_api_cxx, so Pyodide no longer whole-
archives and re-exports the bundled HDF5. Neither half fixes the co-load alone.

Ports the dev fix openPMD#1903 (validated green there: the co-load
probe + full Python suite run with a second HDF5, h5py, co-loaded). Applied in
COMMON_PATCHES right after python-hide-symbols.patch, whose block it extends.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ax3l ax3l force-pushed the wheels-0.17.1.post4 branch from d2ed89f to c2740da Compare July 2, 2026 07:46
@ax3l ax3l changed the title [WIP] Wheels 0.17.1.post4 Wheels 0.17.1.post4 Jul 2, 2026
…d patch

- setup.py version 0.17.1.post3 -> 0.17.1.post4 (rename the setup-py-version
  patch to match; update COMMON_PATCHES).
- Regenerate python-wasm-side-module.patch so the applied CMakeLists co-load
  block matches openPMD-api#1903's current version (refined comment wording, no
  file-path reference, bare EMSCRIPTEN branch). Verified it applies cleanly
  after python-hide-symbols.patch and reproduces the openPMD#1903 block byte-for-byte.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread .github/workflows/build.yml Outdated
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
@ax3l ax3l added this to the 0.17.1 milestone Jul 2, 2026
ax3l and others added 2 commits July 2, 2026 01:07
The .readthedocs.yml exit-183 skip never ran: build.tools.python "3.14" is not a
supported Read the Docs build tool, so config validation failed and the per-PR
RTD build errored (red check) instead of cancelling. post_checkout (exit 183)
runs before the Python environment is created, so any valid version works -- use
3.12 so the config validates and the build cancels cleanly on the wheels branch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tion)

The previous .readthedocs.yml (build.jobs.post_checkout: exit 183, with no
sphinx/mkdocs/build.commands) was rejected at config parse time: the build
failed right after `cat .readthedocs.yml`, before post_checkout ran, so exit 183
never fired and RTD posted a red check on every wheels-branch PR. The python
version was a red herring -- 3.14 and 3.12 failed identically.

Base the skip on dev's working config (add sphinx.configuration, use dev's
os/python) so it validates; post_checkout's exit 183 then cancels the build
before sphinx is read, and RTD reports the PR check as success (a cancelled
build is a green check, per RTD docs).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ax3l ax3l merged commit 2c5886f into openPMD:wheels Jul 2, 2026
11 checks passed
@ax3l ax3l deleted the wheels-0.17.1.post4 branch July 2, 2026 16:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant