Skip to content

eccodeslib: add build-eccodeslib.yml for riscv64 wheels - #1694

Open
luhenry wants to merge 3 commits into
mainfrom
eccodeslib
Open

eccodeslib: add build-eccodeslib.yml for riscv64 wheels#1694
luhenry wants to merge 3 commits into
mainfrom
eccodeslib

Conversation

@luhenry

@luhenry luhenry commented Sep 10, 2026

Copy link
Copy Markdown
Member

Compiles ecCodes, ECMWF's C library for decoding and encoding GRIB/BUFR meteorological data, with no Python bindings of its own. Upstream publishes no riscv64 wheel.

Mirrors the CMake flags of ecmwf/eccodes's own python_wrapper/buildconfig, since upstream builds this wheel with a private tool (ecmwf-actions/reusable-workflows' python-wrapper-wheel.yml plus its "wheelmaker" image), not a public CI workflow.

Differs from upstream

  • Single py3-none wheel, not a per-interpreter matrix - libeccodes.so is byte-identical across upstream's published cp310-cp314 wheels.
  • ENABLE_ECKIT_GEO=0, not upstream's 1 - eckit has no riscv64 build yet; only drops the optional geo-iterator backend.
  • libaec and OpenJPEG built from source, libpng from the manylinux image's dnf repos, replacing upstream's private "cxx-deps" image.

Testing

  • Installs the built wheel and calls findlibs.load("eccodes") to confirm the library and its vendored codecs resolve and dlopen correctly.

License: Apache-2.0. The wheel also vendors libpng, OpenJPEG and libaec (all BSD-style licences); their licence texts are added under dist-info/licenses since this port builds them separately from eccodes itself.

Compiled ecCodes C library (GRIB/BUFR), built via CMake/ecbuild from
ecmwf/eccodes rather than upstream's private wheelmaker tool, with
libaec/openjpeg built from source and libpng from the manylinux image's
dnf repos. ENABLE_ECKIT_GEO stays at its CMake default (OFF) since eckit
has no riscv64 build yet. Packaged as a single py3-none wheel since the
compiled library is Python-ABI-independent (verified against upstream's
published wheels).
luhenry added a commit that referenced this pull request Sep 10, 2026
luhenry and others added 2 commits September 10, 2026 11:37
find -iname only matches a basename, and the license file is
/usr/share/licenses/libpng/LICENSE — inside a libpng/ directory, not
a file whose own name contains "libpng" — so the find returned
nothing and cp failed on an empty argument. Use the direct path, per
the convention used by every other workflow in this repo (verified
against the manylinux_2_39_aarch64 image, which the skill's own
gotcha notes shares Rocky 10's exact package set and paths with
manylinux_2_39_riscv64).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Az13NcXsVZzzxXmaxxUEy7
Ubuntu 24.04's stock apt python3-pip (24.0) lists zero manylinux_*_riscv64
tags, so it rejects the riscv64 wheel outright. Upgrade pip in the venv
before installing findlibs/the wheel in the host-runner smoke test.
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