From 968bcbb1ae9658f80df256e98daad26b8709f929 Mon Sep 17 00:00:00 2001 From: "riseproject-dev[bot]" <330740410+riseproject-dev[bot]@users.noreply.github.com> Date: Thu, 8 Oct 2026 08:34:18 +0000 Subject: [PATCH 1/4] pedalboard: Add version 0.9.26 Signed-off-by: riseproject-dev[bot] <330740410+riseproject-dev[bot]@users.noreply.github.com> --- docs/packages/pedalboard.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/packages/pedalboard.yaml b/docs/packages/pedalboard.yaml index 060936a8ea5..1fcdee51bed 100644 --- a/docs/packages/pedalboard.yaml +++ b/docs/packages/pedalboard.yaml @@ -42,3 +42,4 @@ versions: gpl-sources: filename: gpl-sources.tar description: gcc and the copyleft libraries bundled in the wheel +- version: 0.9.26 From e496b9e2b2a026607fa0cc9ddc787e834f705edc Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 9 Oct 2026 16:33:03 +0000 Subject: [PATCH 2/4] pedalboard: carry forward riscv64 patches to 0.9.26 Nightly version bump omitted the patches/pedalboard/ directory for 0.9.26, so the build's unconditional `git apply .../*.patch` step failed with "No such file or directory" before any build/test ran. Copied forward the same patch set from 0.9.25 (unchanged since then). --- ...assume-x86-when-the-target-isn-t-ARM.patch | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch diff --git a/patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch b/patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch new file mode 100644 index 00000000000..cc5df9e95f3 --- /dev/null +++ b/patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch @@ -0,0 +1,48 @@ +From: RISE Project +Subject: [PATCH] cmake: don't assume x86 when the target isn't ARM + +The Linux branch of CMakeLists.txt has two if/else pairs that treat +"not ARM" as "x86": one adds -march=native (or -mavx) and defines +HAVE_AVX, the other keeps FFTW's AVX/SSE codelets and drops only the +NEON ones. On any other architecture the build fails at +simd-support/simd-avx.h with "compiling simd-avx.h without -mavx". + +Make both conditions test for x86 explicitly, so architectures without a +vendored SIMD backend (riscv64, ppc64le, s390x) build the scalar FFTW +codelets and get no architecture-specific compiler flags. JUCE already +falls back to its scalar path when JUCE_USE_SIMD is 0. + +Upstream-Status: To upstream [not yet submitted; upstream builds no riscv64 wheels] +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 89de0fa..f697bfc 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -203,7 +203,7 @@ elseif(UNIX AND NOT APPLE) + # Processor-specific optimizations (x86 vs ARM) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64") + add_compile_definitions(HAVE_NEON=1) +- else() ++ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64|i[3-6]86") + # Use -march=native for local builds to optimize for the current CPU, + # but use a portable baseline for CI builds to avoid "Illegal instruction" errors + # when ccache restores objects built on different runner hardware. +@@ -214,6 +214,7 @@ elseif(UNIX AND NOT APPLE) + endif() + add_compile_definitions(HAVE_AVX) + endif() ++ # Any other architecture (riscv64, ppc64le, s390x, ...) builds without SIMD. + + # Additional Linux flags + list(APPEND ALL_INCLUDES "vendors/fftw3/api/" "vendors/fftw3/") +@@ -317,8 +318,10 @@ function(collect_sources) + # Exclude files depending on architecture + if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64") + list(FILTER FFTW_SOURCES EXCLUDE REGEX ".*(avx|/sse).*") +- else() ++ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64|i[3-6]86") + list(FILTER FFTW_SOURCES EXCLUDE REGEX ".*neon.*") ++ else() ++ list(FILTER FFTW_SOURCES EXCLUDE REGEX ".*(avx|/sse|neon).*") + endif() + + # Exclude unused FFTW components From bc4a72c3c6e7e06f0eec1d5bd79e0b4502ceb7bd Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Sat, 10 Oct 2026 07:54:29 +0000 Subject: [PATCH 3/4] pedalboard: rebase riscv64 cmake patch onto 0.9.26 0.9.26 rewrote the x86 SIMD flag block in CMakeLists.txt (-mavx is now the default and -march=native is opt-in via USE_MARCH_NATIVE=1), which changed the context of the first hunk. The "else() means x86" assumption is still there, so the patch is still needed; regenerate it against the 0.9.26 source with the same changes. --- ...on-t-assume-x86-when-the-target-isn-t-ARM.patch | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch b/patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch index cc5df9e95f3..a617b568e84 100644 --- a/patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch +++ b/patches/pedalboard/0.9.26/0001-cmake-don-t-assume-x86-when-the-target-isn-t-ARM.patch @@ -2,7 +2,7 @@ From: RISE Project Subject: [PATCH] cmake: don't assume x86 when the target isn't ARM The Linux branch of CMakeLists.txt has two if/else pairs that treat -"not ARM" as "x86": one adds -march=native (or -mavx) and defines +"not ARM" as "x86": one adds -mavx (or -march=native) and defines HAVE_AVX, the other keeps FFTW's AVX/SSE codelets and drops only the NEON ones. On any other architecture the build fails at simd-support/simd-avx.h with "compiling simd-avx.h without -mavx". @@ -14,7 +14,7 @@ falls back to its scalar path when JUCE_USE_SIMD is 0. Upstream-Status: To upstream [not yet submitted; upstream builds no riscv64 wheels] diff --git a/CMakeLists.txt b/CMakeLists.txt -index 89de0fa..f697bfc 100644 +index d3150d5..fb9477e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -203,7 +203,7 @@ elseif(UNIX AND NOT APPLE) @@ -23,10 +23,10 @@ index 89de0fa..f697bfc 100644 add_compile_definitions(HAVE_NEON=1) - else() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64|i[3-6]86") - # Use -march=native for local builds to optimize for the current CPU, - # but use a portable baseline for CI builds to avoid "Illegal instruction" errors - # when ccache restores objects built on different runner hardware. -@@ -214,6 +214,7 @@ elseif(UNIX AND NOT APPLE) + # Keep distributable builds compatible with AVX-capable x86_64 CPUs. + # Local builds may explicitly target the build machine for extra optimization. + if("$ENV{USE_MARCH_NATIVE}" STREQUAL "1") +@@ -213,6 +213,7 @@ elseif(UNIX AND NOT APPLE) endif() add_compile_definitions(HAVE_AVX) endif() @@ -34,7 +34,7 @@ index 89de0fa..f697bfc 100644 # Additional Linux flags list(APPEND ALL_INCLUDES "vendors/fftw3/api/" "vendors/fftw3/") -@@ -317,8 +318,10 @@ function(collect_sources) +@@ -316,8 +317,10 @@ function(collect_sources) # Exclude files depending on architecture if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64") list(FILTER FFTW_SOURCES EXCLUDE REGEX ".*(avx|/sse).*") From 73ea42c8ecfd03d125394716aaa371b0f9ea995e Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Mon, 12 Oct 2026 20:30:18 +0000 Subject: [PATCH 4/4] pedalboard: skip 0.9.26's x86_64 CPU-compatibility harness test 0.9.26 added tests/test_linux_wheel_cpu_compatibility.py, which runs scripts/test_linux_wheel_cpu_compatibility.py (upstream's qemu-x86_64 AVX-boundary smoke test for its Linux wheels) against a fake emulator. CIBW_TEST_SOURCES stages only tests/, so the harness is missing, no emulator invocation is ever logged, and all four tests fail with FileNotFoundError on the invocation log. The rest of the suite (26666 tests) passes on every interpreter. The harness checks x86_64 CPU models, so it has nothing to verify on a riscv64 wheel; ignore the module like the other non-applicable ones. Signed-off-by: Ludovic Henry --- .github/workflows/build-pedalboard.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-pedalboard.yml b/.github/workflows/build-pedalboard.yml index 5fda0543ec3..7c27d053186 100644 --- a/.github/workflows/build-pedalboard.yml +++ b/.github/workflows/build-pedalboard.yml @@ -167,11 +167,14 @@ jobs: # test_type_hints needs mypy and pyright, neither of which runs on riscv64. # The other two modules load tests/plugins/effect/Linux/CHOWTapeModel.vst3 # while being imported, and that VST3 bundle ships an x86_64 binary only. + # test_linux_wheel_cpu_compatibility (new in 0.9.26) tests upstream's x86_64 + # AVX-boundary CI harness under scripts/, which CIBW_TEST_SOURCES doesn't stage. # The deselected test asserts threaded reads beat serial ones, a timing # race that also fails on macOS against upstream's own wheel. CIBW_TEST_COMMAND: >- python -m pytest tests --ignore=tests/test_type_hints.py --ignore=tests/test_external_plugins.py --ignore=tests/test_memory_leaks.py + --ignore=tests/test_linux_wheel_cpu_compatibility.py -k "not test_read_from_bytes_io_memoryview_without_gil" - name: Verify the wheel ships the extension and the bundled licences