Skip to content

uamqp: add build-uamqp.yml for riscv64 wheels - #927

Merged
luhenry merged 6 commits into
mainfrom
uamqp
Sep 4, 2026
Merged

uamqp: add build-uamqp.yml for riscv64 wheels#927
luhenry merged 6 commits into
mainfrom
uamqp

Conversation

@luhenry

@luhenry luhenry commented Sep 4, 2026

Copy link
Copy Markdown
Member

Compiles uamqp's Cython extension over the vendored azure-uamqp-c AMQP 1.0 C library (statically built via CMake) linked against OpenSSL. Upstream publishes no riscv64 wheel.

Mirrors the ManyLinux job of upstream's client.yml.

Differs from upstream

  • Uses Rocky 10's dnf-installed OpenSSL instead of building OpenSSL 3.0.15 from source - only needed for manylinux2014's ancient one.
  • Stages the vendored C tree's own LICENSE alongside OpenSSL's - both sit outside setuptools' root-only glob.
  • Skips samples/ - needs live Event Hub/Service Bus credentials; upstream itself gates that job to its internal (non-public) pipeline.

Matrix: cp312/cp313/cp314, no cp314t - several .pyx callbacks read ob_refcnt directly, which doesn't exist on free-threaded builds' PyObject layout; upstream itself ships no cp314 or cp314t wheel either.

Testing

  • Runs tests/, which exercises the built c_uamqp extension directly; same as upstream's public path.

License: Wheel bundles the vendored azure-uamqp-c tree (MIT) and dynamically links OpenSSL (Apache-2.0); upstream ships neither licence text in the wheel, so the build adds both.

Built on cp312; 46 passed.

Builds uamqp 1.6.11's Cython+CMake extension (the vendored azure-uamqp-c
tree over system OpenSSL) for riscv64. Upstream publishes no riscv64 wheel.
…enSSL build

Upstream's pyproject.toml sets [tool.cibuildwheel.linux] before-build, not
before-all; CIBW_BEFORE_ALL_LINUX left it in place, so cibuildwheel ran both
hooks and upstream's still-manylinux2014-targeted install_openssl.sh undid
the dnf install and failed (missing perl FindBin).
…utils-c

deps/azure-macro-utils-c declares cmake_minimum_required(VERSION 2.8.11),
which CMake 4 (the pip-resolved build dependency) hard-refuses even though
azure-uamqp-c and azure-c-shared-utility both already declare 3.5+.
CIBW_ENVIRONMENT replaces upstream's [tool.cibuildwheel.linux] environment
table wholesale, dropping the CFLAGS it already carries for this: GCC 14
turns -Wincompatible-pointer-types into a hard error by default, and the
Cython-generated c_uamqp.c hits it.
Several .pyx callbacks read context_pyobj.ob_refcnt directly to detect
in-flight GC; that field doesn't exist on free-threaded builds' PyObject
layout, so it fails identically on every arch, not just riscv64. Upstream
itself ships no cp314 or cp314t wheel; cp312/cp313/cp314 all build and pass
tests here.
225: CIBW_BEFORE_ALL_LINUX and CIBW_BEFORE_BUILD_LINUX are separate hooks;
overriding the one upstream doesn't use lets both run.
226: GCC 14 defaults -Wincompatible-pointer-types to a hard error for C
code, and CIBW_ENVIRONMENT (gotcha 107) silently drops any CFLAGS fix
upstream already carries for it.
227: PyObject internals (ob_refcnt) accessed directly break free-threaded
builds identically on every arch -- trim the matrix, don't patch.
@luhenry
luhenry merged commit c60fcbd into main Sep 4, 2026
8 checks passed
@luhenry
luhenry deleted the uamqp branch September 4, 2026 14:32
@luhenry luhenry mentioned this pull request Sep 4, 2026
@luhenry luhenry linked an issue Sep 4, 2026 that may be closed by this pull request
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.

uamqp riscv64 support

1 participant