You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

244 lines
8.5KB

  1. ###############################################################################
  2. if linux_headless
  3. plugins = [
  4. ]
  5. else
  6. plugins = [
  7. 'syndicate'
  8. ]
  9. endif
  10. plugin_include_dirs = [
  11. include_directories('../libs/juce7'),
  12. include_directories('../libs/juce7/source'),
  13. include_directories('../libs/juce7/source/modules'),
  14. include_directories('../libs/juce7/source/modules/juce_audio_processors/format_types/LV2_SDK'),
  15. include_directories('../libs/juce7/source/modules/juce_audio_processors/format_types/VST3_SDK'),
  16. include_directories('../libs/juce-plugin'),
  17. juce7_extra_include_dirs
  18. ]
  19. ###############################################################################
  20. # build flags for plugins
  21. build_flags_plugin = [
  22. '-Werror=deprecated-declarations',
  23. ]
  24. build_flag_plugin_cpp = [
  25. '-std=gnu++17',
  26. ]
  27. ###############################################################################
  28. # format-specific build flags
  29. build_flags_plugin_lv2 = [
  30. '-DJucePlugin_Build_AU=0',
  31. '-DJucePlugin_Build_LV2=1',
  32. '-DJucePlugin_Build_RTAS=0',
  33. '-DJucePlugin_Build_VST=0',
  34. '-DJucePlugin_Build_VST3=0',
  35. '-DJucePlugin_Build_Standalone=0',
  36. ]
  37. build_flags_plugin_vst2 = [
  38. '-DJucePlugin_Build_AU=0',
  39. '-DJucePlugin_Build_LV2=0',
  40. '-DJucePlugin_Build_RTAS=0',
  41. '-DJucePlugin_Build_VST=1',
  42. '-DJucePlugin_Build_VST3=0',
  43. '-DJucePlugin_Build_Standalone=0',
  44. ]
  45. build_flags_plugin_vst3 = [
  46. '-DJucePlugin_Build_AU=0',
  47. '-DJucePlugin_Build_LV2=0',
  48. '-DJucePlugin_Build_RTAS=0',
  49. '-DJucePlugin_Build_VST=0',
  50. '-DJucePlugin_Build_VST3=1',
  51. '-DJucePlugin_Build_Standalone=0',
  52. '-Wno-non-virtual-dtor',
  53. ]
  54. ###############################################################################
  55. # format-specific link flags
  56. link_flags_plugin_common = [
  57. ]
  58. if os_darwin
  59. link_flags_plugin_common += [
  60. '-framework', 'Accelerate',
  61. '-framework', 'AudioToolbox',
  62. '-framework', 'AudioUnit',
  63. '-framework', 'Carbon',
  64. '-framework', 'Cocoa',
  65. '-framework', 'CoreAudio',
  66. '-framework', 'CoreAudioKit',
  67. '-framework', 'CoreMIDI',
  68. '-framework', 'IOKit',
  69. '-framework', 'QuartzCore',
  70. '-framework', 'WebKit',
  71. ]
  72. link_flags_plugin_lv2 = [
  73. '-Wl,-exported_symbol,_lv2_descriptor',
  74. '-Wl,-exported_symbol,_lv2ui_descriptor',
  75. ]
  76. link_flags_plugin_vst2 = [
  77. '-Wl,-exported_symbol,_VSTPluginMain',
  78. ]
  79. link_flags_plugin_vst3 = [
  80. '-Wl,-exported_symbol,_bundleEntry',
  81. '-Wl,-exported_symbol,_bundleExit',
  82. '-Wl,-exported_symbol,_GetPluginFactory',
  83. ]
  84. else
  85. link_flags_plugin_lv2 = [
  86. '-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-lv2.version',
  87. ]
  88. link_flags_plugin_vst2 = [
  89. '-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-vst2.version',
  90. ]
  91. link_flags_plugin_vst3 = [
  92. '-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-vst3.version',
  93. ]
  94. endif
  95. ###############################################################################
  96. foreach plugin : plugins
  97. if plugin in get_option('plugins')
  98. plugin_uses_devices = false
  99. plugin_uses_opengl = false
  100. plugin_extra_dependencies = []
  101. plugin_extra_include_dirs = []
  102. plugin_extra_build_flags = []
  103. plugin_extra_link_flags = []
  104. plugin_extra_format_specific_srcs = []
  105. subdir(plugin)
  106. plugin_extra_format_specific_srcs += files([
  107. '../libs/juce-plugin/JucePluginMain.cpp',
  108. '../libs/juce-plugin/JucePluginUtils.cpp',
  109. ])
  110. if plugin_uses_devices
  111. link_with_plugin += lib_juce7_devices
  112. if os_linux
  113. plugin_extra_dependencies += [
  114. dependency('alsa')
  115. ]
  116. endif
  117. endif
  118. if plugin_uses_opengl
  119. if os_darwin
  120. plugin_extra_link_flags += [
  121. '-framework', 'OpenGL',
  122. ]
  123. elif os_windows
  124. plugin_extra_dependencies += [
  125. cc.find_library('opengl32'),
  126. ]
  127. elif not linux_headless
  128. plugin_extra_dependencies += [
  129. dependency('gl')
  130. ]
  131. endif
  132. endif
  133. plugin_lib = static_library(plugin_name + '_lib',
  134. name_prefix: '',
  135. sources: plugin_srcs,
  136. include_directories: [
  137. include_directories(plugin),
  138. plugin_include_dirs,
  139. plugin_extra_include_dirs,
  140. ],
  141. c_args: build_flags + build_flags_plugin + plugin_extra_build_flags,
  142. cpp_args: build_flags_cpp + build_flags_plugin + build_flag_plugin_cpp + plugin_extra_build_flags,
  143. dependencies: plugin_extra_dependencies,
  144. pic: true,
  145. install: false,
  146. )
  147. if build_lv2
  148. plugin_lv2_lib = shared_library(plugin_name + '-lv2',
  149. name_prefix: '',
  150. sources: plugin_extra_format_specific_srcs,
  151. include_directories: [
  152. include_directories(plugin),
  153. plugin_include_dirs,
  154. plugin_extra_include_dirs,
  155. ],
  156. c_args: build_flags + build_flags_plugin + build_flags_plugin_lv2 + plugin_extra_build_flags,
  157. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_lv2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  158. link_args: link_flags + link_flags_plugin_common + link_flags_plugin_lv2 + plugin_extra_link_flags,
  159. link_with: [ lib_juce7, plugin_lib ],
  160. )
  161. plugin_lv2_dir = meson.current_build_dir() / plugin_name + '.lv2'
  162. custom_target(plugin_name + '-lv2-bundle',
  163. output: plugin_name + '.lv2',
  164. input: plugin_lv2_lib,
  165. command: [ '../scripts/generate-lv2.sh', lv2_ttl_generator, '@OUTPUT@', plugin_lv2_lib.full_path() ],
  166. install: true,
  167. install_dir: lv2dir,
  168. )
  169. endif
  170. if build_vst2
  171. plugin_vst2 = shared_library(plugin_name,
  172. name_prefix: '',
  173. sources: plugin_extra_format_specific_srcs,
  174. include_directories: [
  175. include_directories(plugin),
  176. plugin_include_dirs,
  177. plugin_extra_include_dirs,
  178. ],
  179. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst2 + plugin_extra_build_flags,
  180. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  181. link_args: link_flags + link_flags_plugin_common + link_flags_plugin_vst2 + plugin_extra_link_flags,
  182. link_with: [ lib_juce7, plugin_lib ],
  183. install: true,
  184. install_dir: vst2dir,
  185. )
  186. endif
  187. if build_vst3
  188. plugin_vst3_lib = shared_library(plugin_name + '-vst3',
  189. name_prefix: '',
  190. sources: plugin_extra_format_specific_srcs,
  191. include_directories: [
  192. include_directories(plugin),
  193. plugin_include_dirs,
  194. plugin_extra_include_dirs,
  195. ],
  196. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst3 + plugin_extra_build_flags,
  197. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst3 + build_flag_plugin_cpp + plugin_extra_build_flags,
  198. link_args: link_flags + link_flags_plugin_common + link_flags_plugin_vst3 + plugin_extra_link_flags,
  199. link_with: [ lib_juce7, plugin_lib ],
  200. )
  201. plugin_vst3_dir = meson.current_build_dir() / plugin_name + '.vst3' / 'Contents' / vst3_bundle_name
  202. plugin_vst3 = custom_target(plugin_name + '-vst3-bundle',
  203. output: plugin_name + '.vst3',
  204. input: plugin_vst3_lib,
  205. command: [
  206. 'mkdir', '-p', plugin_vst3_dir, '&&',
  207. 'cd', plugin_vst3_dir, '&&',
  208. 'cp', plugin_vst3_lib.full_path(), plugin_vst3_dir / plugin_name + lib_suffix,
  209. ],
  210. install: true,
  211. install_dir: vst3dir,
  212. )
  213. endif
  214. endif
  215. endforeach
  216. ###############################################################################