Signed-off-by: falkTX <falktx@falktx.com>roth-air
@@ -50,7 +50,7 @@ lib_juce5 = static_library('juce5', | |||||
include_directories('.'), | include_directories('.'), | ||||
include_directories('source'), | include_directories('source'), | ||||
include_directories('source' / 'modules'), | include_directories('source' / 'modules'), | ||||
include_directories('..' / 'juced' / 'source' / 'dependancies' / 'ladspa_sdk' / 'src'), | |||||
include_directories('../juced/source/dependancies/ladspa_sdk/src'), | |||||
], | ], | ||||
cpp_args: build_flags_cpp + juce5_extra_cpp_args, | cpp_args: build_flags_cpp + juce5_extra_cpp_args, | ||||
dependencies: dependencies, | dependencies: dependencies, | ||||
@@ -58,7 +58,7 @@ lib_juce6 = static_library('juce6', | |||||
include_directories('.'), | include_directories('.'), | ||||
include_directories('source'), | include_directories('source'), | ||||
include_directories('source/modules'), | include_directories('source/modules'), | ||||
include_directories('..' / 'juced' / 'source' / 'dependancies' / 'ladspa_sdk' / 'src'), | |||||
include_directories('../juced/source/dependancies/ladspa_sdk/src'), | |||||
], | ], | ||||
cpp_args: build_flags_cpp + juce6_extra_cpp_args, | cpp_args: build_flags_cpp + juce6_extra_cpp_args, | ||||
dependencies: dependencies, | dependencies: dependencies, | ||||
@@ -1,7 +1,7 @@ | |||||
############################################################################### | ############################################################################### | ||||
if linux_embed | if linux_embed | ||||
juce6_srcs = [ | |||||
juce7_srcs = [ | |||||
'source/modules/juce_audio_basics/juce_audio_basics.cpp', | 'source/modules/juce_audio_basics/juce_audio_basics.cpp', | ||||
'source/modules/juce_audio_formats/juce_audio_formats.cpp', | 'source/modules/juce_audio_formats/juce_audio_formats.cpp', | ||||
'source/modules/juce_audio_processors/juce_audio_processors.cpp', | 'source/modules/juce_audio_processors/juce_audio_processors.cpp', | ||||
@@ -13,7 +13,7 @@ if linux_embed | |||||
'source/modules/juce_events/juce_events.cpp', | 'source/modules/juce_events/juce_events.cpp', | ||||
] | ] | ||||
else | else | ||||
juce6_srcs = [ | |||||
juce7_srcs = [ | |||||
'source/modules/juce_audio_basics/juce_audio_basics.cpp', | 'source/modules/juce_audio_basics/juce_audio_basics.cpp', | ||||
'source/modules/juce_audio_formats/juce_audio_formats.cpp', | 'source/modules/juce_audio_formats/juce_audio_formats.cpp', | ||||
'source/modules/juce_audio_processors/juce_audio_processors.cpp', | 'source/modules/juce_audio_processors/juce_audio_processors.cpp', | ||||
@@ -30,45 +30,45 @@ else | |||||
] | ] | ||||
endif | endif | ||||
juce6_devices_srcs = [ | |||||
juce7_devices_srcs = [ | |||||
'source/modules/juce_audio_devices/juce_audio_devices.cpp', | 'source/modules/juce_audio_devices/juce_audio_devices.cpp', | ||||
] | ] | ||||
juce6_extra_cpp_args = [ | |||||
juce7_extra_cpp_args = [ | |||||
'-std=gnu++14', | '-std=gnu++14', | ||||
'-Wno-non-virtual-dtor', | '-Wno-non-virtual-dtor', | ||||
] | ] | ||||
if os_windows | if os_windows | ||||
if host_machine.cpu() == 'x86' | if host_machine.cpu() == 'x86' | ||||
juce6_extra_cpp_args += [ | |||||
juce7_extra_cpp_args += [ | |||||
'-mpreferred-stack-boundary=2', | '-mpreferred-stack-boundary=2', | ||||
] | ] | ||||
endif | endif | ||||
endif | endif | ||||
lib_juce6 = static_library('juce6', | |||||
sources: juce6_srcs, | |||||
lib_juce7 = static_library('juce7', | |||||
sources: juce7_srcs, | |||||
include_directories: [ | include_directories: [ | ||||
include_directories('.'), | include_directories('.'), | ||||
include_directories('source'), | include_directories('source'), | ||||
include_directories('source/modules'), | include_directories('source/modules'), | ||||
include_directories('..' / 'juced' / 'source' / 'dependancies' / 'ladspa_sdk' / 'src'), | |||||
include_directories('../juced/source/dependancies/ladspa_sdk/src'), | |||||
], | ], | ||||
cpp_args: build_flags_cpp + juce6_extra_cpp_args, | |||||
cpp_args: build_flags_cpp + juce7_extra_cpp_args, | |||||
dependencies: dependencies, | dependencies: dependencies, | ||||
pic: true, | pic: true, | ||||
install: false, | install: false, | ||||
) | ) | ||||
lib_juce6_device = static_library('juce6-devices', | |||||
sources: juce6_devices_srcs, | |||||
lib_juce7_device = static_library('juce7-devices', | |||||
sources: juce7_devices_srcs, | |||||
include_directories: [ | include_directories: [ | ||||
include_directories('.'), | include_directories('.'), | ||||
include_directories('source'), | include_directories('source'), | ||||
include_directories('source/modules'), | include_directories('source/modules'), | ||||
], | ], | ||||
cpp_args: build_flags_cpp + juce6_extra_cpp_args + ['-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1'], | |||||
cpp_args: build_flags_cpp + juce7_extra_cpp_args + ['-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1'], | |||||
dependencies: dependencies_devices, | dependencies: dependencies_devices, | ||||
pic: true, | pic: true, | ||||
install: false, | install: false, | ||||
@@ -16,7 +16,32 @@ | |||||
#define nullptr (0) | #define nullptr (0) | ||||
#endif | #endif | ||||
// Replicating some of the LV2 header here so that we don't have to set up any | |||||
// custom include paths for this file. | |||||
// Normally this would be a bad idea, but the LV2 API has to keep these definitions | |||||
// in order to remain backwards-compatible. | |||||
extern "C" { | |||||
typedef struct LV2_Descriptor { | |||||
const void* a; | |||||
const void* b; | |||||
const void* c; | |||||
const void* d; | |||||
const void* e; | |||||
const void* f; | |||||
const void* g; | |||||
const void* (*extension_data)(const char* uri); | |||||
} LV2_Descriptor; | |||||
typedef struct RecallFeature { | |||||
int (*doRecall)(const char*); | |||||
} RecallFeature; | |||||
} | |||||
typedef void (*TTL_Generator_Function)(const char* basename); | typedef void (*TTL_Generator_Function)(const char* basename); | ||||
typedef const LV2_Descriptor* (*LV2_Descriptor_Function)(unsigned index); | |||||
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||||
{ | { | ||||
@@ -44,8 +69,10 @@ int main(int argc, char* argv[]) | |||||
#ifdef TTL_GENERATOR_WINDOWS | #ifdef TTL_GENERATOR_WINDOWS | ||||
const TTL_Generator_Function ttlFn = (TTL_Generator_Function)GetProcAddress(handle, "lv2_generate_ttl"); | const TTL_Generator_Function ttlFn = (TTL_Generator_Function)GetProcAddress(handle, "lv2_generate_ttl"); | ||||
const LV2_Descriptor_Function lv2Fn = (LV2_Descriptor_Function)GetProcAddress(handle, "lv2_descriptor"); | |||||
#else | #else | ||||
const TTL_Generator_Function ttlFn = (TTL_Generator_Function)dlsym(handle, "lv2_generate_ttl"); | const TTL_Generator_Function ttlFn = (TTL_Generator_Function)dlsym(handle, "lv2_generate_ttl"); | ||||
const LV2_Descriptor_Function lv2Fn = (LV2_Descriptor_Function)dlsym(handle, "lv2_descriptor"); | |||||
#endif | #endif | ||||
if (ttlFn != NULL) | if (ttlFn != NULL) | ||||
@@ -81,8 +108,16 @@ int main(int argc, char* argv[]) | |||||
ttlFn(basename); | ttlFn(basename); | ||||
} | } | ||||
else if (lv2Fn != nullptr) | |||||
{ | |||||
if (const LV2_Descriptor* const descriptor = lv2Fn(0)) | |||||
if (const RecallFeature* const recallFeature = (const RecallFeature*)descriptor->extension_data("https://lv2-extensions.juce.com/turtle_recall")) | |||||
recallFeature->doRecall(argv[1]); | |||||
} | |||||
else | else | ||||
{ | |||||
printf("Failed to find 'lv2_generate_ttl' function\n"); | printf("Failed to find 'lv2_generate_ttl' function\n"); | ||||
} | |||||
#ifdef TTL_GENERATOR_WINDOWS | #ifdef TTL_GENERATOR_WINDOWS | ||||
FreeLibrary(handle); | FreeLibrary(handle); | ||||
@@ -12,4 +12,8 @@ if not (build_juce5_only or build_juce7_only) | |||||
subdir('juce6') | subdir('juce6') | ||||
endif | endif | ||||
if not (build_juce5_only or build_juce6_only) | |||||
subdir('juce7') | |||||
endif | |||||
############################################################################### | ############################################################################### |
@@ -321,6 +321,10 @@ if not (build_juce5_only or build_juce7_only) | |||||
subdir('ports-juce6') | subdir('ports-juce6') | ||||
endif | endif | ||||
if not (build_juce5_only or build_juce6_only) | |||||
subdir('ports-juce7') | |||||
endif | |||||
############################################################################### | ############################################################################### | ||||
# extra files to install | # extra files to install | ||||
@@ -0,0 +1,245 @@ | |||||
############################################################################### | |||||
if linux_embed | |||||
plugins = [ | |||||
] | |||||
else | |||||
plugins = [ | |||||
] | |||||
endif | |||||
plugin_include_dirs = [ | |||||
include_directories('../libs/juce7'), | |||||
include_directories('../libs/juce7/source'), | |||||
include_directories('../libs/juce7/source/modules'), | |||||
include_directories('../libs/juce7/source/modules/juce_audio_processors/format_types/LV2_SDK'), | |||||
include_directories('../libs/juce7/source/modules/juce_audio_processors/format_types/VST3_SDK'), | |||||
include_directories('../libs/juce-plugin'), | |||||
] | |||||
############################################################################### | |||||
# build flags for plugins | |||||
build_flags_plugin = [ | |||||
'-Werror=deprecated-declarations', | |||||
] | |||||
build_flag_plugin_cpp = [ | |||||
'-std=gnu++14', | |||||
] | |||||
############################################################################### | |||||
# format-specific build flags | |||||
build_flags_plugin_lv2 = [ | |||||
'-DJucePlugin_Build_AU=0', | |||||
'-DJucePlugin_Build_LV2=1', | |||||
'-DJucePlugin_Build_RTAS=0', | |||||
'-DJucePlugin_Build_VST=0', | |||||
'-DJucePlugin_Build_VST3=0', | |||||
'-DJucePlugin_Build_Standalone=0', | |||||
] | |||||
build_flags_plugin_vst2 = [ | |||||
'-DJucePlugin_Build_AU=0', | |||||
'-DJucePlugin_Build_LV2=0', | |||||
'-DJucePlugin_Build_RTAS=0', | |||||
'-DJucePlugin_Build_VST=1', | |||||
'-DJucePlugin_Build_VST3=0', | |||||
'-DJucePlugin_Build_Standalone=0', | |||||
] | |||||
build_flags_plugin_vst3 = [ | |||||
'-DJucePlugin_Build_AU=0', | |||||
'-DJucePlugin_Build_LV2=0', | |||||
'-DJucePlugin_Build_RTAS=0', | |||||
'-DJucePlugin_Build_VST=0', | |||||
'-DJucePlugin_Build_VST3=1', | |||||
'-DJucePlugin_Build_Standalone=0', | |||||
] | |||||
############################################################################### | |||||
# format-specific link flags | |||||
link_flags_plugin_common = [ | |||||
] | |||||
if os_darwin | |||||
link_flags_plugin_common += [ | |||||
'-framework', 'Accelerate', | |||||
'-framework', 'AudioToolbox', | |||||
'-framework', 'AudioUnit', | |||||
'-framework', 'Carbon', | |||||
'-framework', 'Cocoa', | |||||
'-framework', 'CoreAudio', | |||||
'-framework', 'CoreAudioKit', | |||||
'-framework', 'CoreMIDI', | |||||
'-framework', 'IOKit', | |||||
'-framework', 'QuartzCore', | |||||
'-framework', 'WebKit', | |||||
] | |||||
link_flags_plugin_lv2 = [ | |||||
'-Wl,-exported_symbol,_lv2_descriptor', | |||||
'-Wl,-exported_symbol,_lv2ui_descriptor', | |||||
] | |||||
link_flags_plugin_vst2 = [ | |||||
'-Wl,-exported_symbol,_VSTPluginMain', | |||||
] | |||||
link_flags_plugin_vst3 = [ | |||||
'-Wl,-exported_symbol,_bundleEntry', | |||||
'-Wl,-exported_symbol,_bundleExit', | |||||
'-Wl,-exported_symbol,_GetPluginFactory', | |||||
] | |||||
else | |||||
link_flags_plugin_lv2 = [ | |||||
'-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-lv2.version', | |||||
] | |||||
link_flags_plugin_vst2 = [ | |||||
'-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-vst2.version', | |||||
] | |||||
link_flags_plugin_vst3 = [ | |||||
'-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-vst3.version', | |||||
] | |||||
endif | |||||
############################################################################### | |||||
foreach plugin : plugins | |||||
if plugin in get_option('plugins') | |||||
plugin_uses_devices = false | |||||
plugin_uses_opengl = false | |||||
plugin_extra_dependencies = [] | |||||
plugin_extra_include_dirs = [] | |||||
plugin_extra_build_flags = [] | |||||
plugin_extra_link_flags = [] | |||||
plugin_extra_format_specific_srcs = [] | |||||
subdir(plugin) | |||||
plugin_extra_format_specific_srcs += files([ | |||||
'../libs/juce-plugin/JucePluginMain.cpp', | |||||
'../libs/juce-plugin/JucePluginUtils.cpp', | |||||
]) | |||||
if plugin_uses_devices | |||||
link_with_plugin += lib_juce7_devices | |||||
if os_linux | |||||
plugin_extra_dependencies += [ | |||||
dependency('alsa') | |||||
] | |||||
endif | |||||
endif | |||||
if plugin_uses_opengl | |||||
if os_darwin | |||||
plugin_extra_link_flags += [ | |||||
'-framework', 'OpenGL', | |||||
] | |||||
elif os_windows | |||||
plugin_extra_dependencies += [ | |||||
cc.find_library('opengl32'), | |||||
] | |||||
elif not linux_embed | |||||
plugin_extra_dependencies += [ | |||||
dependency('gl') | |||||
] | |||||
endif | |||||
endif | |||||
plugin_lib = static_library(plugin_name + '_lib', | |||||
name_prefix: '', | |||||
sources: plugin_srcs, | |||||
include_directories: [ | |||||
include_directories(plugin), | |||||
plugin_include_dirs, | |||||
plugin_extra_include_dirs, | |||||
], | |||||
c_args: build_flags + build_flags_plugin + plugin_extra_build_flags, | |||||
cpp_args: build_flags_cpp + build_flags_plugin + build_flag_plugin_cpp + plugin_extra_build_flags, | |||||
dependencies: plugin_extra_dependencies, | |||||
pic: true, | |||||
install: false, | |||||
) | |||||
if build_lv2 | |||||
plugin_lv2_lib = shared_library(plugin_name + '_lv2', | |||||
name_prefix: '', | |||||
sources: plugin_extra_format_specific_srcs, | |||||
include_directories: [ | |||||
include_directories(plugin), | |||||
plugin_include_dirs, | |||||
plugin_extra_include_dirs, | |||||
], | |||||
c_args: build_flags + build_flags_plugin + build_flags_plugin_lv2 + plugin_extra_build_flags, | |||||
cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_lv2 + build_flag_plugin_cpp + plugin_extra_build_flags, | |||||
link_args: link_flags + link_flags_plugin_common + link_flags_plugin_lv2 + plugin_extra_link_flags, | |||||
link_with: [ lib_juce7, plugin_lib ], | |||||
) | |||||
plugin_lv2_dir = meson.current_build_dir() / plugin_name + '.lv2' | |||||
plugin_lv2_ttl = custom_target(plugin_name + '_lv2-ttl', | |||||
output: plugin_name + '.lv2', | |||||
input: plugin_lv2_lib, | |||||
command: [ | |||||
'mkdir', '-p', plugin_lv2_dir, '&&', | |||||
'cd', plugin_lv2_dir, '&&', | |||||
'mv', plugin_lv2_lib.full_path(), plugin_lv2_dir / plugin_name + lib_suffix, '&&', | |||||
(meson.is_cross_build() ? 'wine' : 'env'), lv2_ttl_generator, '.' / plugin_name + lib_suffix, | |||||
], | |||||
install: true, | |||||
install_dir: lv2dir, | |||||
) | |||||
endif | |||||
if build_vst2 | |||||
plugin_vst2 = shared_library(plugin_name, | |||||
name_prefix: '', | |||||
sources: plugin_extra_format_specific_srcs, | |||||
include_directories: [ | |||||
include_directories(plugin), | |||||
plugin_include_dirs, | |||||
plugin_extra_include_dirs, | |||||
], | |||||
c_args: build_flags + build_flags_plugin + build_flags_plugin_vst2 + plugin_extra_build_flags, | |||||
cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst2 + build_flag_plugin_cpp + plugin_extra_build_flags, | |||||
link_args: link_flags + link_flags_plugin_common + link_flags_plugin_vst2 + plugin_extra_link_flags, | |||||
link_with: [ lib_juce7, plugin_lib ], | |||||
install: true, | |||||
install_dir: vst2dir, | |||||
) | |||||
endif | |||||
if build_vst3 | |||||
plugin_vst3_lib = shared_library(plugin_name + '-vst3', | |||||
name_prefix: '', | |||||
sources: plugin_extra_format_specific_srcs, | |||||
include_directories: [ | |||||
include_directories(plugin), | |||||
plugin_include_dirs, | |||||
plugin_extra_include_dirs, | |||||
], | |||||
c_args: build_flags + build_flags_plugin + build_flags_plugin_vst3 + plugin_extra_build_flags, | |||||
cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst3 + build_flag_plugin_cpp + plugin_extra_build_flags, | |||||
link_args: link_flags + link_flags_plugin_common + link_flags_plugin_vst3 + plugin_extra_link_flags, | |||||
link_with: [ lib_juce7, plugin_lib ], | |||||
) | |||||
plugin_vst3_dir = meson.current_build_dir() / plugin_name + '.vst3' / 'Contents' / host_machine.cpu_family() + '-' + host_machine.system() | |||||
plugin_vst3 = custom_target(plugin_name + '_vst3-bundle', | |||||
output: plugin_name + '.vst3', | |||||
input: plugin_vst3_lib, | |||||
command: [ | |||||
'mkdir', '-p', plugin_vst3_dir, '&&', | |||||
'cd', plugin_vst3_dir, '&&', | |||||
'mv', plugin_vst3_lib.full_path(), plugin_vst3_dir / plugin_name + lib_suffix, | |||||
], | |||||
install: true, | |||||
install_dir: vst3dir, | |||||
) | |||||
endif | |||||
endif | |||||
endforeach | |||||
############################################################################### |