-
Notifications
You must be signed in to change notification settings - Fork 2
Fix Windows build: Remove rubberband due to static linking incompatibility #54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Add sleefdft library detection in meson.build for rubberband FFT support - Fix python/meson.build to properly include platform-specific system libraries - Initialize pyaubio_extra_deps and include it in pyaubio_deps - Windows: Add ws2_32, secur32, bcrypt, mfuuid, strmiids, ole32 - Linux: Add pthread and libstdc++ Co-authored-by: shauneccles <[email protected]>
|
@copilot Carefully review the most recent run and resolve the issues that caused the build failure. Pay attention to the root cause and resolve it rather than working around it. If the root cause is a true inability to statically link rubberband then identify why and remove rubberband from the CI build. |
…bility Root cause: vcpkg's rubberband package on Windows expects SLEEF as DLL (import library with __imp_ symbols), not static library. This is a vcpkg packaging limitation that prevents true static linking of rubberband. Changes: - Update vcpkg.json: Change rubberband and sleef platform from "!linux" to "osx" - Windows builds will use dummy timestretch/pitchshift implementations - macOS retains full rubberband support - Documented decision in WINDOWS_RUBBERBAND_REMOVAL.md Impact: Windows users lose rubberband time-stretch/pitch-shift features, but core aubio functionality (onset, pitch, tempo, MFCC) remains fully functional. Co-authored-by: shauneccles <[email protected]>
Co-authored-by: shauneccles <[email protected]>
|
@copilot Review the changes made in previous commits to try to fix the rubberband issue and remove any changes that are no longer required since we are not building rubberband |
The SLEEF DFT library detection was added in f234ec3 to try to fix rubberband linking on Windows. Since we've removed rubberband from Windows builds (now macOS-only), this detection is no longer needed. The base SLEEF library detection remains for macOS rubberband support. Kept python/meson.build changes as they fix a bug where platform-specific libraries were being added to the wrong 'dependencies' variable instead of 'pyaubio_deps'. Windows libraries (ws2_32, etc.) are still needed for FFmpeg static linking. Co-authored-by: shauneccles <[email protected]>
Reviewed and cleaned up in commit 66d4123. Removed:
Kept:
|
Windows builds were failing with 7 unresolved external symbols when linking the Python extension. Root cause analysis revealed that vcpkg's rubberband package on Windows is fundamentally incompatible with static linking - it expects SLEEF libraries as DLLs (indicated by
__imp_symbol prefixes) rather than static libraries.Solution
Removed rubberband and SLEEF from Windows builds in
vcpkg.jsonby changing platform filter from"!linux"to"osx". Windows will use dummy timestretch/pitchshift implementations instead.Changes
vcpkg.json
"!linux"→"osx"(macOS only)"!linux"→"osx"(macOS only)python/meson.build
dependenciesvariable (for C library) instead ofpyaubio_deps(for Python extension)pyaubio_extra_depsto properly collect platform-specific system librariespyaubio_deps = [py.dependency(), libaubio_static_dep] + pyaubio_extra_depsImpact
Root Cause
vcpkg's rubberband package on Windows builds with DLL import expectations for SLEEF libraries. The
__imp_symbol prefix indicates rubberband.lib was built expecting SLEEF as a DLL, not a static library. This is a vcpkg packaging limitation that prevents true static linking on Windows.Error Example (Before Fix)
Documentation
See
WINDOWS_RUBBERBAND_REMOVAL.mdandWINDOWS_BUILD_FIX_SUMMARY.mdfor comprehensive technical details and rationale.💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.