Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/packages/pairmux.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,7 @@ versions:
- filename: pairmux-0.5.2-py3-none-manylinux_2_39_riscv64.whl
sha256: c7876d5a1f89869980b0b10b64b303fac416395e6e45fb6ea36fd61ecf34a3cb
requires-python: '>=3.9'
- version: 0.5.3
- version: 0.6.0
- version: 1.0.0
- version: 1.1.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
From 1549b4f2bf3baca546cfe81a4009466de0456d94 Mon Sep 17 00:00:00 2001
From: Ludovic Henry <git@ludovic.dev>
Date: Fri, 4 Sep 2026 22:35:56 +0200
Subject: [PATCH] packaging: add riscv64 to the pypi wheel platform tables

Upstream-Status: To upstream [not submitted yet; no riscv64 CI to validate it against]

pairmux ships one prebuilt Go binary per platform inside a hand-built
py3-none-<platform> wheel (packaging/pypi/build_wheels.py); the platform
comes from a fixed table keyed on (goos, goarch), read from an ELF/Mach-O
header. GOOS=linux GOARCH=riscv64 CGO_ENABLED=0 cross-compiles pairmux
cleanly (it is a zero-dependency, cgo-free binary, same as the four
platforms already built), but the table has no entry for it and
linux_elf_arch() does not recognize EM_RISCV (243), so build_wheels.py
rejects the binary before it gets that far.

Add the missing PLATFORM_TAGS/ELF_MACHINE_TO_WHEEL_ARCH/
LINUX_PLATFORM_ARCHES entries, tagged manylinux_2_39_riscv64. riscv64
predates the manylinux1/2010/2014 legacy aliases that let the x86_64 and
aarch64 rows compress two sub-tags into one, so this row has only the
single perennial tag.

Signed-off-by: Ludovic Henry <git@ludovic.dev>
---
packaging/pypi/build_wheels.py | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/packaging/pypi/build_wheels.py b/packaging/pypi/build_wheels.py
index 38a1432..9afba9c 100755
--- a/packaging/pypi/build_wheels.py
+++ b/packaging/pypi/build_wheels.py
@@ -84,6 +84,9 @@ PLATFORM_TAGS = {
("darwin", "amd64"): "macosx_12_0_x86_64",
("linux", "amd64"): "manylinux_2_17_x86_64.manylinux2014_x86_64",
("linux", "arm64"): "manylinux_2_17_aarch64.manylinux2014_aarch64",
+ # riscv64 predates the manylinux1/2010/2014 legacy aliases, so there is no
+ # second sub-tag to compress in here (unlike the x86_64/aarch64 rows above).
+ ("linux", "riscv64"): "manylinux_2_39_riscv64",
}

# Trove classifiers — all valid values from the official list, so PyPI accepts
@@ -128,10 +131,12 @@ ELF64_HEADER_SIZE = struct.calcsize(ELF64_HEADER_FORMAT)
ELF_MACHINE_TO_WHEEL_ARCH = {
62: "x86_64", # EM_X86_64
183: "aarch64", # EM_AARCH64
+ 243: "riscv64", # EM_RISCV
}
LINUX_PLATFORM_ARCHES = {
PLATFORM_TAGS[("linux", "amd64")]: "x86_64",
PLATFORM_TAGS[("linux", "arm64")]: "aarch64",
+ PLATFORM_TAGS[("linux", "riscv64")]: "riscv64",
}

# goreleaser build-subdir names end with _<goos>_<goarch>[_<variant>]. Go's
--
2.50.1 (Apple Git-155)

Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
From 1549b4f2bf3baca546cfe81a4009466de0456d94 Mon Sep 17 00:00:00 2001
From: Ludovic Henry <git@ludovic.dev>
Date: Fri, 4 Sep 2026 22:35:56 +0200
Subject: [PATCH] packaging: add riscv64 to the pypi wheel platform tables

Upstream-Status: To upstream [not submitted yet; no riscv64 CI to validate it against]

pairmux ships one prebuilt Go binary per platform inside a hand-built
py3-none-<platform> wheel (packaging/pypi/build_wheels.py); the platform
comes from a fixed table keyed on (goos, goarch), read from an ELF/Mach-O
header. GOOS=linux GOARCH=riscv64 CGO_ENABLED=0 cross-compiles pairmux
cleanly (it is a zero-dependency, cgo-free binary, same as the four
platforms already built), but the table has no entry for it and
linux_elf_arch() does not recognize EM_RISCV (243), so build_wheels.py
rejects the binary before it gets that far.

Add the missing PLATFORM_TAGS/ELF_MACHINE_TO_WHEEL_ARCH/
LINUX_PLATFORM_ARCHES entries, tagged manylinux_2_39_riscv64. riscv64
predates the manylinux1/2010/2014 legacy aliases that let the x86_64 and
aarch64 rows compress two sub-tags into one, so this row has only the
single perennial tag.

Signed-off-by: Ludovic Henry <git@ludovic.dev>
---
packaging/pypi/build_wheels.py | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/packaging/pypi/build_wheels.py b/packaging/pypi/build_wheels.py
index 38a1432..9afba9c 100755
--- a/packaging/pypi/build_wheels.py
+++ b/packaging/pypi/build_wheels.py
@@ -84,6 +84,9 @@ PLATFORM_TAGS = {
("darwin", "amd64"): "macosx_12_0_x86_64",
("linux", "amd64"): "manylinux_2_17_x86_64.manylinux2014_x86_64",
("linux", "arm64"): "manylinux_2_17_aarch64.manylinux2014_aarch64",
+ # riscv64 predates the manylinux1/2010/2014 legacy aliases, so there is no
+ # second sub-tag to compress in here (unlike the x86_64/aarch64 rows above).
+ ("linux", "riscv64"): "manylinux_2_39_riscv64",
}

# Trove classifiers — all valid values from the official list, so PyPI accepts
@@ -128,10 +131,12 @@ ELF64_HEADER_SIZE = struct.calcsize(ELF64_HEADER_FORMAT)
ELF_MACHINE_TO_WHEEL_ARCH = {
62: "x86_64", # EM_X86_64
183: "aarch64", # EM_AARCH64
+ 243: "riscv64", # EM_RISCV
}
LINUX_PLATFORM_ARCHES = {
PLATFORM_TAGS[("linux", "amd64")]: "x86_64",
PLATFORM_TAGS[("linux", "arm64")]: "aarch64",
+ PLATFORM_TAGS[("linux", "riscv64")]: "riscv64",
}

# goreleaser build-subdir names end with _<goos>_<goarch>[_<variant>]. Go's
--
2.50.1 (Apple Git-155)

Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
From 1549b4f2bf3baca546cfe81a4009466de0456d94 Mon Sep 17 00:00:00 2001
From: Ludovic Henry <git@ludovic.dev>
Date: Fri, 4 Sep 2026 22:35:56 +0200
Subject: [PATCH] packaging: add riscv64 to the pypi wheel platform tables

Upstream-Status: To upstream [not submitted yet; no riscv64 CI to validate it against]

pairmux ships one prebuilt Go binary per platform inside a hand-built
py3-none-<platform> wheel (packaging/pypi/build_wheels.py); the platform
comes from a fixed table keyed on (goos, goarch), read from an ELF/Mach-O
header. GOOS=linux GOARCH=riscv64 CGO_ENABLED=0 cross-compiles pairmux
cleanly (it is a zero-dependency, cgo-free binary, same as the four
platforms already built), but the table has no entry for it and
linux_elf_arch() does not recognize EM_RISCV (243), so build_wheels.py
rejects the binary before it gets that far.

Add the missing PLATFORM_TAGS/ELF_MACHINE_TO_WHEEL_ARCH/
LINUX_PLATFORM_ARCHES entries, tagged manylinux_2_39_riscv64. riscv64
predates the manylinux1/2010/2014 legacy aliases that let the x86_64 and
aarch64 rows compress two sub-tags into one, so this row has only the
single perennial tag.

Signed-off-by: Ludovic Henry <git@ludovic.dev>
---
packaging/pypi/build_wheels.py | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/packaging/pypi/build_wheels.py b/packaging/pypi/build_wheels.py
index 6c8e23e..9d32f5c 100755
--- a/packaging/pypi/build_wheels.py
+++ b/packaging/pypi/build_wheels.py
@@ -89,6 +89,9 @@ PLATFORM_TAGS = {
("darwin", "amd64"): "macosx_12_0_x86_64",
("linux", "amd64"): "manylinux_2_17_x86_64.manylinux2014_x86_64",
("linux", "arm64"): "manylinux_2_17_aarch64.manylinux2014_aarch64",
+ # riscv64 predates the manylinux1/2010/2014 legacy aliases, so there is no
+ # second sub-tag to compress in here (unlike the x86_64/aarch64 rows above).
+ ("linux", "riscv64"): "manylinux_2_39_riscv64",
# Windows tags carry no OS-version floor. The PE header is still parsed so
# a swapped or non-console binary cannot ship under either tag.
("windows", "amd64"): "win_amd64",
@@ -138,10 +141,12 @@ ELF64_HEADER_SIZE = struct.calcsize(ELF64_HEADER_FORMAT)
ELF_MACHINE_TO_WHEEL_ARCH = {
62: "x86_64", # EM_X86_64
183: "aarch64", # EM_AARCH64
+ 243: "riscv64", # EM_RISCV
}
LINUX_PLATFORM_ARCHES = {
PLATFORM_TAGS[("linux", "amd64")]: "x86_64",
PLATFORM_TAGS[("linux", "arm64")]: "aarch64",
+ PLATFORM_TAGS[("linux", "riscv64")]: "riscv64",
}
# Host-only tags for wheels built from a clone by pairmux_build_backend.py. They
# make no cross-distribution claim, and PyPI refuses them, which is intended:
--
2.50.1 (Apple Git-155)

Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
From 1549b4f2bf3baca546cfe81a4009466de0456d94 Mon Sep 17 00:00:00 2001
From: Ludovic Henry <git@ludovic.dev>
Date: Fri, 4 Sep 2026 22:35:56 +0200
Subject: [PATCH] packaging: add riscv64 to the pypi wheel platform tables

Upstream-Status: To upstream [not submitted yet; no riscv64 CI to validate it against]

pairmux ships one prebuilt Go binary per platform inside a hand-built
py3-none-<platform> wheel (packaging/pypi/build_wheels.py); the platform
comes from a fixed table keyed on (goos, goarch), read from an ELF/Mach-O
header. GOOS=linux GOARCH=riscv64 CGO_ENABLED=0 cross-compiles pairmux
cleanly (it is a zero-dependency, cgo-free binary, same as the four
platforms already built), but the table has no entry for it and
linux_elf_arch() does not recognize EM_RISCV (243), so build_wheels.py
rejects the binary before it gets that far.

Add the missing PLATFORM_TAGS/ELF_MACHINE_TO_WHEEL_ARCH/
LINUX_PLATFORM_ARCHES entries, tagged manylinux_2_39_riscv64. riscv64
predates the manylinux1/2010/2014 legacy aliases that let the x86_64 and
aarch64 rows compress two sub-tags into one, so this row has only the
single perennial tag.

Signed-off-by: Ludovic Henry <git@ludovic.dev>
---
packaging/pypi/build_wheels.py | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/packaging/pypi/build_wheels.py b/packaging/pypi/build_wheels.py
index 6c8e23e..9d32f5c 100755
--- a/packaging/pypi/build_wheels.py
+++ b/packaging/pypi/build_wheels.py
@@ -89,6 +89,9 @@ PLATFORM_TAGS = {
("darwin", "amd64"): "macosx_12_0_x86_64",
("linux", "amd64"): "manylinux_2_17_x86_64.manylinux2014_x86_64",
("linux", "arm64"): "manylinux_2_17_aarch64.manylinux2014_aarch64",
+ # riscv64 predates the manylinux1/2010/2014 legacy aliases, so there is no
+ # second sub-tag to compress in here (unlike the x86_64/aarch64 rows above).
+ ("linux", "riscv64"): "manylinux_2_39_riscv64",
# Windows tags carry no OS-version floor. The PE header is still parsed so
# a swapped or non-console binary cannot ship under either tag.
("windows", "amd64"): "win_amd64",
@@ -138,10 +141,12 @@ ELF64_HEADER_SIZE = struct.calcsize(ELF64_HEADER_FORMAT)
ELF_MACHINE_TO_WHEEL_ARCH = {
62: "x86_64", # EM_X86_64
183: "aarch64", # EM_AARCH64
+ 243: "riscv64", # EM_RISCV
}
LINUX_PLATFORM_ARCHES = {
PLATFORM_TAGS[("linux", "amd64")]: "x86_64",
PLATFORM_TAGS[("linux", "arm64")]: "aarch64",
+ PLATFORM_TAGS[("linux", "riscv64")]: "riscv64",
}
# Host-only tags for wheels built from a clone by pairmux_build_backend.py. They
# make no cross-distribution claim, and PyPI refuses them, which is intended:
--
2.50.1 (Apple Git-155)

Loading