Repository navigation
Conversation
pillow-jxl-plugin wraps libjxl (Google's JPEG XL reference implementation) via the jpegxl-rs/jpegxl-sys Rust crates, built through maturin's `vendored` cargo feature, which drives libjxl's own CMake build from source (libjxl, highway, brotli and skcms all bundled by jpegxl-src). highway's RVV target requires `__riscv_v_intrinsic`, which is only defined when compiling with a `v`-carrying -march; without that flag highway's baseline collapses to its portable EMU128/SCALAR target, and skcms gates its own SIMD path on `!defined(__x86_64__)`, so both fall back to their generic C++ paths automatically on riscv64 with no RVV code compiled at all - avoiding the whole class of RVV-dispatch runtime SIGILL traps seen in other ports. libjxl's own CMakeLists.txt already branches on CMAKE_SYSTEM_PROCESSOR MATCHES "riscv". Two patches: make test/test_plugin.py's OpenEXR/pyexiv2-gated tests pytest.importorskip (pyexiv2 has no riscv64 wheel on our registry at all, and OpenEXR has none for cp310/cp311), and widen pyproject.toml's license-files glob so the vendored libjxl/highway/brotli/skcms licence files staged by the workflow land in the wheel's dist-info/licenses. Matrix mirrors upstream's own per-interpreter release matrix (cp310-cp314; no abi3), minus pp311 (no riscv64 PyPy). musllinux is dropped: Pillow (a runtime dependency) has no musllinux_riscv64 wheel on our registry yet.
Contributor
|
Our registry only carries Pillow up to 11.3.0 for cp310 and 12.2.0 for cp311 (Pillow 12.0 dropped cp310, 12.3.0 dropped cp311). Without PIP_ONLY_BINARY=pillow, pip's resolver prefers the newest Pillow sdist visible across both indexes over our older riscv64 wheel, and that sdist then fails to build for lack of libjpeg headers in the bare test venv.
luhenry
marked this pull request as ready for review
October 5, 2026 22:55
luhenry
added a commit
that referenced
this pull request
Oct 5, 2026
This branch has not been deployed
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.
pillow-jxl-plugin1.3.8Builds the Pillow plugin for JPEG XL, vendor-compiling libjxl (and its highway/brotli/skcms dependencies) from source via maturin's
vendoredcargo feature. Upstream publishes no riscv64 wheel.Mirrors upstream's
release.ymllinuxjob.Differs from upstream
Matrix: cp310/cp311/cp312/cp313/cp314, no abi3 - matches upstream's own per-interpreter matrix.
Testing
License: Wheel bundles libjxl/skcms (BSD-3-Clause), highway (Apache-2.0) and brotli (MIT); upstream's own wheels ship no licence text for them, so the build adds it.
Patches
0001-test-make-OpenEXR-and-pyexiv2-imports-lazy.patch- Inappropriate. Module-level imports made the whole test file fail to collect when either package is absent; reproduces off riscv64 too.0002-pyproject-widen-license-files-to-cover-vendored-libr.patch- Inappropriate.license-fileshad no glob, so a stagedLICENSE.<lib>file was silently ignored; reproduces off riscv64 too.CI running; counts to follow.