File size: 4,994 Bytes
399b070
a781751
399b070
 
 
 
 
 
77e86c1
a781751
 
 
77e86c1
 
399b070
 
 
 
 
 
 
 
 
 
 
a781751
399b070
 
 
 
 
 
 
77e86c1
a781751
fdc4e41
a781751
77e86c1
399b070
 
 
 
 
77e86c1
 
399b070
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a781751
399b070
 
 
 
 
77e86c1
 
a781751
 
 
77e86c1
 
 
 
 
 
 
 
 
 
 
a781751
 
77e86c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a781751
77e86c1
 
a781751
77e86c1
 
 
 
 
 
 
a781751
77e86c1
 
 
 
 
 
 
2f1b494
 
 
 
 
 
77e86c1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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"
)