| cmake_minimum_required(VERSION 3.22) |
| project(PluginBridge VERSION 0.4.0 LANGUAGES C CXX OBJCXX) |
|
|
| set(CMAKE_CXX_STANDARD 17) |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) |
|
|
| add_subdirectory(JUCE) |
|
|
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| # Target 1: PluginBridge VST3/AU (loaded in DAW) |
| # Thin shell: shared memory audio bridge + MCP server |
| # GUI via CARemoteLayerClient (receives remote layer from Helper) |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
|
|
| juce_add_plugin(PluginBridge |
| COMPANY_NAME "PluginBridge" |
| BUNDLE_ID "com.pluginbridge.pluginbridge" |
| PLUGIN_MANUFACTURER_CODE Plbr |
| PLUGIN_CODE Plbr |
| FORMATS VST3 AU |
| PRODUCT_NAME "PluginBridge" |
| IS_SYNTH FALSE |
| NEEDS_MIDI_INPUT TRUE |
| NEEDS_MIDI_OUTPUT TRUE |
| IS_MIDI_EFFECT FALSE |
| EDITOR_WANTS_KEYBOARD_FOCUS TRUE |
| COPY_PLUGIN_AFTER_BUILD TRUE |
| VST3_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/VST3" |
| AU_COPY_DIR "$ENV{HOME}/Library/Audio/Plug-Ins/Components" |
| ) |
|
|
| target_sources(PluginBridge |
| PRIVATE |
| Source/Plugin/PluginBridgeProcessor.cpp |
| Source/Plugin/PluginBridgeEditor.mm |
| Source/Plugin/PluginPickerComponent.mm |
| Source/Plugin/HelperConnection.cpp |
| Source/Plugin/McpServer.cpp |
| ) |
|
|
| target_include_directories(PluginBridge |
| PRIVATE |
| ${CMAKE_CURRENT_SOURCE_DIR}/libs |
| ${CMAKE_CURRENT_SOURCE_DIR}/Source/Plugin |
| ${CMAKE_CURRENT_SOURCE_DIR}/Source/Shared |
| ) |
|
|
| target_compile_definitions(PluginBridge |
| PUBLIC |
| JUCE_PLUGINHOST_VST3=1 |
| JUCE_PLUGINHOST_AU=1 |
| JUCE_WEB_BROWSER=0 |
| JUCE_USE_CURL=0 |
| JUCE_VST3_CAN_REPLACE_VST2=0 |
| JUCE_DISPLAY_SPLASH_SCREEN=0 |
| JUCE_REPORT_APP_USAGE=0 |
| ) |
|
|
| target_link_libraries(PluginBridge |
| PRIVATE |
| juce::juce_audio_utils |
| juce::juce_audio_processors |
| juce::juce_dsp |
| juce::juce_gui_basics |
| "-framework QuartzCore" |
| PUBLIC |
| juce::juce_recommended_config_flags |
| juce::juce_recommended_lto_flags |
| juce::juce_recommended_warning_flags |
| ) |
|
|
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| # Target 2: PluginBridgeHelper (separate process) |
| # Hosts the actual plugin: audio processing + GUI rendering |
| # GUI served via CARemoteLayerServer |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
|
|
| juce_add_gui_app(PluginBridgeHelper |
| PRODUCT_NAME "PluginBridgeHelper" |
| BUNDLE_ID "com.pluginbridge.helper" |
| COMPANY_NAME "PluginBridge" |
| ) |
|
|
| target_sources(PluginBridgeHelper |
| PRIVATE |
| Source/Helper/main.cpp |
| Source/Helper/HelperPluginHost.mm |
| Source/Helper/HelperIPC.cpp |
| ) |
|
|
| target_include_directories(PluginBridgeHelper |
| PRIVATE |
| ${CMAKE_CURRENT_SOURCE_DIR}/libs |
| ${CMAKE_CURRENT_SOURCE_DIR}/Source/Helper |
| ${CMAKE_CURRENT_SOURCE_DIR}/Source/Shared |
| ) |
|
|
| target_compile_definitions(PluginBridgeHelper |
| PRIVATE |
| JUCE_PLUGINHOST_VST3=1 |
| JUCE_PLUGINHOST_AU=1 |
| JUCE_WEB_BROWSER=0 |
| JUCE_USE_CURL=0 |
| JUCE_DISPLAY_SPLASH_SCREEN=0 |
| JUCE_REPORT_APP_USAGE=0 |
| ) |
|
|
| target_link_libraries(PluginBridgeHelper |
| PRIVATE |
| juce::juce_audio_utils |
| juce::juce_audio_processors |
| juce::juce_dsp |
| juce::juce_gui_basics |
| juce::juce_events |
| "-framework QuartzCore" |
| PUBLIC |
| juce::juce_recommended_config_flags |
| juce::juce_recommended_lto_flags |
| juce::juce_recommended_warning_flags |
| ) |
|
|
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
| # Post-build: Copy full PluginBridgeHelper.app into .vst3 bundle |
| # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
|
|
| add_dependencies(PluginBridge PluginBridgeHelper) |
|
|
| add_custom_command(TARGET PluginBridge POST_BUILD |
| COMMAND ${CMAKE_COMMAND} -E make_directory |
| "$<TARGET_BUNDLE_DIR:PluginBridge_VST3>/Contents/Resources" |
| COMMAND ${CMAKE_COMMAND} -E rm -rf |
| "$<TARGET_BUNDLE_DIR:PluginBridge_VST3>/Contents/Resources/PluginBridgeHelper.app" |
| COMMAND ${CMAKE_COMMAND} -E copy_directory |
| "$<TARGET_BUNDLE_DIR:PluginBridgeHelper>" |
| "$<TARGET_BUNDLE_DIR:PluginBridge_VST3>/Contents/Resources/PluginBridgeHelper.app" |
| COMMENT "Bundling PluginBridgeHelper.app inside PluginBridge.vst3" |
| ) |
|
|