Browse Source

Adjustments for building juce7 as static lib

Signed-off-by: falkTX <falktx@falktx.com>
roth-air
falkTX 2 years ago
parent
commit
2c3ff26e1e
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
7 changed files with 302 additions and 14 deletions
  1. +1
    -1
      libs/juce5/meson.build
  2. +1
    -1
      libs/juce6/meson.build
  3. +12
    -12
      libs/juce7/meson.build
  4. +35
    -0
      libs/lv2-ttl-generator/lv2_ttl_generator.cpp
  5. +4
    -0
      libs/meson.build
  6. +4
    -0
      meson.build
  7. +245
    -0
      ports-juce7/meson.build

+ 1
- 1
libs/juce5/meson.build View File

@@ -50,7 +50,7 @@ lib_juce5 = static_library('juce5',
include_directories('.'),
include_directories('source'),
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,
dependencies: dependencies,


+ 1
- 1
libs/juce6/meson.build View File

@@ -58,7 +58,7 @@ lib_juce6 = static_library('juce6',
include_directories('.'),
include_directories('source'),
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,
dependencies: dependencies,


+ 12
- 12
libs/juce7/meson.build View File

@@ -1,7 +1,7 @@
###############################################################################

if linux_embed
juce6_srcs = [
juce7_srcs = [
'source/modules/juce_audio_basics/juce_audio_basics.cpp',
'source/modules/juce_audio_formats/juce_audio_formats.cpp',
'source/modules/juce_audio_processors/juce_audio_processors.cpp',
@@ -13,7 +13,7 @@ if linux_embed
'source/modules/juce_events/juce_events.cpp',
]
else
juce6_srcs = [
juce7_srcs = [
'source/modules/juce_audio_basics/juce_audio_basics.cpp',
'source/modules/juce_audio_formats/juce_audio_formats.cpp',
'source/modules/juce_audio_processors/juce_audio_processors.cpp',
@@ -30,45 +30,45 @@ else
]
endif

juce6_devices_srcs = [
juce7_devices_srcs = [
'source/modules/juce_audio_devices/juce_audio_devices.cpp',
]

juce6_extra_cpp_args = [
juce7_extra_cpp_args = [
'-std=gnu++14',
'-Wno-non-virtual-dtor',
]

if os_windows
if host_machine.cpu() == 'x86'
juce6_extra_cpp_args += [
juce7_extra_cpp_args += [
'-mpreferred-stack-boundary=2',
]
endif
endif

lib_juce6 = static_library('juce6',
sources: juce6_srcs,
lib_juce7 = static_library('juce7',
sources: juce7_srcs,
include_directories: [
include_directories('.'),
include_directories('source'),
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,
pic: true,
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('source'),
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,
pic: true,
install: false,


+ 35
- 0
libs/lv2-ttl-generator/lv2_ttl_generator.cpp View File

@@ -16,7 +16,32 @@
#define nullptr (0)
#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 const LV2_Descriptor* (*LV2_Descriptor_Function)(unsigned index);

int main(int argc, char* argv[])
{
@@ -44,8 +69,10 @@ int main(int argc, char* argv[])

#ifdef TTL_GENERATOR_WINDOWS
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
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

if (ttlFn != NULL)
@@ -81,8 +108,16 @@ int main(int argc, char* argv[])

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
{
printf("Failed to find 'lv2_generate_ttl' function\n");
}

#ifdef TTL_GENERATOR_WINDOWS
FreeLibrary(handle);


+ 4
- 0
libs/meson.build View File

@@ -12,4 +12,8 @@ if not (build_juce5_only or build_juce7_only)
subdir('juce6')
endif

if not (build_juce5_only or build_juce6_only)
subdir('juce7')
endif

###############################################################################

+ 4
- 0
meson.build View File

@@ -321,6 +321,10 @@ if not (build_juce5_only or build_juce7_only)
subdir('ports-juce6')
endif

if not (build_juce5_only or build_juce6_only)
subdir('ports-juce7')
endif

###############################################################################
# extra files to install



+ 245
- 0
ports-juce7/meson.build View File

@@ -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

###############################################################################

Loading…
Cancel
Save