This repository contains a version of LSP Plugins adapted to compile and function correctly on macOS (x86_64).
- Platform: macOS (Intel x86_64)
- Compiler: Apple Clang
- Support: Experimental / Unofficial
Huge thanks to the LSP Plugins Team for their incredible work and for making the original project open-source.
Repository: https://github.com/lsp-plugins/lsp-plugins
If you use or benefit from their work, don’t forget to support them with a donation.
Their project deserves it and helps keep development alive.
An automated script has been included to facilitate compilation and packaging.
Ensure you have Xcode Command Line Tools and necessary dependencies installed (can be installed via Homebrew):
brew install pkg-config gnu-sed(Note: The project uses gmake, which usually comes installed or may require brew install make).
Run the build.sh script from the project root:
./build.shThis script will perform the following steps:
- Clean environment (
clean). - Configure project (
config). - Compile (
make). - Install to a local
release/directory.
Upon completion, you will find the plugin bundle at:
release/lsp-plugins.lv2
Copy the generated bundle to your LV2 plugins folder:
cp -r release/lsp-plugins.lv2 ~/Library/Audio/Plug-Ins/LV2/Restart your DAW (REAPER, Ardour, etc.) to detect the new plugins.
To achieve compilation and correct functionality on macOS, the following modifications have been made to the original code:
The original code uses inline assembly syntax for AVX2 optimizations that is compatible with GCC/GAS but incompatible with the LLVM/Clang assembler on macOS (error expected relocatable expression with memory operands).
Modified Files:
modules/lsp-dsp-lib/src/Makefile: Commented out the inclusion of AVX2 and AVX512 objects in theCXX_OBJ_EXTvariable forx86_64architecture.modules/lsp-dsp-lib/src/main/x86/x86.cpp: Commented out calls toavx2::dsp_init(f)andavx512::dsp_init(f), as well as theirexterndeclarations, to avoid linking errors.
The original CocoaWindow implementation attached the plugin view directly to the window's contentView (NSWindow), causing the plugin interface to overlap other host interface elements (such as the FX list in REAPER).
Modified Files:
modules/lsp-ws-lib/include/private/cocoa/CocoaWindow.h: AddedNSView *pParentViewmember to store the container view provided by the host.modules/lsp-ws-lib/src/main/cocoa/CocoaWindow.mm:- Updated constructor to save the reference to
pParentView. - In
init(), modified logic to attachwrapperViewas a subview ofpParentViewinstead of[pCocoaWindow contentView].
- Updated constructor to save the reference to
The plugin attempted to resize the host window directly ([window setFrame:...]), which is blocked or ignored by hosts like REAPER, resulting in a window that did not adjust to the plugin size.
Modified Files:
modules/lsp-ws-lib/src/main/cocoa/CocoaWindow.mm: Modifiedset_geometry_implfor plugin mode (bWrapper):- Now resizes only the internal plugin view (
pCocoaView). - Manually emits the
UIE_RESIZEevent. - This allows
UIWrapperto capture the event and notify the host via the LV2ui:resizeextension, requesting the resize correctly through the protocol.
- Now resizes only the internal plugin view (
The plugin interface appeared stretched or zoomed because the view was being forced to the full size of the host window's content area, and the view's internal resizing logic was blocked.
Modified Files:
modules/lsp-ws-lib/src/main/cocoa/CocoaWindow.mm:- In
set_geometry_impl: Switched fromsetFrametoupdateFramebecauseCocoaCairoViewoverridessetFrameto ignore size changes. - In
show(): Removed logic that forcedpCocoaViewto match[[pCocoaWindow contentView] bounds]. Instead, it now respects the plugin's internal size (sSize), preventing stretching when the host window is larger than the plugin.
- In