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.

296 lines
9.9KB

  1. ###############################################################################
  2. if linux_embed
  3. # TODO deal with this later
  4. plugins = []
  5. else
  6. plugins = [
  7. 'chow',
  8. 'vitalium',
  9. ]
  10. endif
  11. plugin_include_dirs = [
  12. include_directories('../libs/juce-current'),
  13. include_directories('../libs/juce-current/source'),
  14. include_directories('../libs/juce-current/source/modules'),
  15. include_directories('../libs/juce-current/source/modules/juce_audio_processors/format_types/VST3_SDK'),
  16. include_directories('../libs/juce-plugin'),
  17. ]
  18. ###############################################################################
  19. # dependencies
  20. dependencies_plugin = [
  21. ]
  22. if os_windows
  23. dependencies_plugin += [
  24. cc.find_library('comdlg32'),
  25. cc.find_library('gdi32'),
  26. cc.find_library('imm32'),
  27. cc.find_library('ole32'),
  28. cc.find_library('oleaut32'),
  29. cc.find_library('shlwapi'),
  30. cc.find_library('uuid'),
  31. cc.find_library('version'),
  32. cc.find_library('winmm'),
  33. cc.find_library('wininet'),
  34. cc.find_library('ws2_32'),
  35. ]
  36. endif
  37. ###############################################################################
  38. # build flags for plugins
  39. build_flags_plugin = [
  40. '-Werror=deprecated-declarations',
  41. ]
  42. build_flags_plugin_debug = [
  43. ]
  44. build_flags_plugin_release = [
  45. '-ffast-math',
  46. ]
  47. build_flag_plugin_cpp = [
  48. '-std=gnu++14',
  49. ]
  50. if optimizations and not linux_embed
  51. build_flags_plugin_release += [
  52. '-mfpmath=sse',
  53. ]
  54. endif
  55. ###############################################################################
  56. # combine flags depending on build type
  57. if buildtype == 'debug'
  58. build_flags_plugin += build_flags_plugin_debug
  59. else
  60. build_flags_plugin += build_flags_plugin_release
  61. endif
  62. ###############################################################################
  63. # format-specific build flags
  64. build_flags_plugin_lv2 = [
  65. '-DJucePlugin_Build_AU=0',
  66. '-DJucePlugin_Build_LV2=1',
  67. '-DJucePlugin_Build_RTAS=0',
  68. '-DJucePlugin_Build_VST=0',
  69. '-DJucePlugin_Build_VST3=0',
  70. '-DJucePlugin_Build_Standalone=0',
  71. '-DBINTYPE=@0@LV2'.format(bintype_prefix),
  72. '-Wno-parentheses',
  73. '-Wno-deprecated-declarations', # FIXME
  74. ]
  75. build_flags_plugin_vst2 = [
  76. '-DJucePlugin_Build_AU=0',
  77. '-DJucePlugin_Build_LV2=0',
  78. '-DJucePlugin_Build_RTAS=0',
  79. '-DJucePlugin_Build_VST=1',
  80. '-DJucePlugin_Build_VST3=0',
  81. '-DJucePlugin_Build_Standalone=0',
  82. '-DBINTYPE=@0@VST2'.format(bintype_prefix),
  83. '-Wno-write-strings',
  84. ]
  85. build_flags_plugin_vst3 = [
  86. '-DJucePlugin_Build_AU=0',
  87. '-DJucePlugin_Build_LV2=0',
  88. '-DJucePlugin_Build_RTAS=0',
  89. '-DJucePlugin_Build_VST=0',
  90. '-DJucePlugin_Build_VST3=1',
  91. '-DJucePlugin_Build_Standalone=0',
  92. '-DBINTYPE=@0@VST3'.format(bintype_prefix),
  93. '-Wno-non-virtual-dtor',
  94. ]
  95. if os_windows
  96. build_flags_plugin_vst3 += [
  97. '-D_NATIVE_WCHAR_T_DEFINED',
  98. '-D__wchar_t=wchar_t',
  99. ]
  100. endif
  101. ###############################################################################
  102. # format-specific link flags
  103. link_flags_plugin_common = [
  104. ]
  105. if os_darwin
  106. link_flags_plugin_common += [
  107. '-framework', 'Accelerate',
  108. '-framework', 'AudioToolbox',
  109. '-framework', 'AudioUnit',
  110. '-framework', 'Carbon',
  111. '-framework', 'Cocoa',
  112. '-framework', 'CoreAudio',
  113. '-framework', 'CoreAudioKit',
  114. '-framework', 'CoreMIDI',
  115. '-framework', 'IOKit',
  116. '-framework', 'QuartzCore',
  117. '-framework', 'WebKit',
  118. ]
  119. link_flags_plugin_lv2 = [
  120. '-Wl,-exported_symbol,_lv2_generate_ttl',
  121. '-Wl,-exported_symbol,_lv2_descriptor',
  122. '-Wl,-exported_symbol,_lv2ui_descriptor',
  123. ]
  124. link_flags_plugin_vst2 = [
  125. '-Wl,-exported_symbol,_VSTPluginMain',
  126. ]
  127. link_flags_plugin_vst3 = [
  128. '-Wl,-exported_symbol,_bundleEntry',
  129. '-Wl,-exported_symbol,_bundleExit',
  130. '-Wl,-exported_symbol,_GetPluginFactory',
  131. ]
  132. else
  133. link_flags_plugin_lv2 = [
  134. '-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-lv2.version',
  135. ]
  136. link_flags_plugin_vst2 = [
  137. '-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-vst2.version',
  138. ]
  139. link_flags_plugin_vst3 = [
  140. '-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols-vst3.version',
  141. ]
  142. endif
  143. ###############################################################################
  144. foreach plugin : plugins
  145. if plugin in get_option('plugins') and not build_legacy_only
  146. plugin_uses_opengl = false
  147. plugin_extra_dependencies = []
  148. plugin_extra_include_dirs = []
  149. plugin_extra_build_flags = []
  150. plugin_extra_link_flags = []
  151. plugin_extra_format_specific_srcs = []
  152. subdir(plugin)
  153. plugin_extra_format_specific_srcs += files([
  154. '../libs/juce-plugin/JucePluginMain.cpp',
  155. '../libs/juce-plugin/JucePluginUtils.cpp',
  156. ])
  157. if plugin_uses_opengl
  158. if os_darwin
  159. plugin_extra_link_flags += [
  160. '-framework', 'OpenGL',
  161. ]
  162. elif os_windows
  163. plugin_extra_dependencies += [
  164. cc.find_library('opengl32'),
  165. ]
  166. elif not linux_embed
  167. plugin_extra_dependencies += [
  168. dependency('gl')
  169. ]
  170. endif
  171. endif
  172. plugin_lib = static_library(plugin_name + '_lib',
  173. name_prefix: '',
  174. sources: plugin_srcs,
  175. include_directories: [
  176. include_directories(plugin),
  177. plugin_include_dirs,
  178. plugin_extra_include_dirs,
  179. ],
  180. c_args: build_flags + build_flags_plugin + plugin_extra_build_flags,
  181. cpp_args: build_flags_cpp + build_flags_plugin + build_flag_plugin_cpp + plugin_extra_build_flags,
  182. dependencies: dependencies_plugin + plugin_extra_dependencies,
  183. pic: true,
  184. install: false,
  185. )
  186. if build_lv2
  187. plugin_lv2_lib = shared_library(plugin_name + '_lv2',
  188. name_prefix: '',
  189. sources: plugin_extra_format_specific_srcs,
  190. include_directories: [
  191. include_directories(plugin),
  192. plugin_include_dirs,
  193. plugin_extra_include_dirs,
  194. ],
  195. c_args: build_flags + build_flags_plugin + build_flags_plugin_lv2 + plugin_extra_build_flags,
  196. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_lv2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  197. link_args: link_flags + link_flags_plugin_common + link_flags_plugin_lv2 + plugin_extra_link_flags,
  198. link_with: [ lib_juce_current, plugin_lib ],
  199. )
  200. plugin_lv2_dir = meson.current_build_dir() / plugin_name + '.lv2'
  201. plugin_lv2_ttl = custom_target(plugin_name + '_lv2-ttl',
  202. output: plugin_name + '.lv2',
  203. input: plugin_lv2_lib,
  204. command: [
  205. 'mkdir', '-p', plugin_lv2_dir, '&&',
  206. 'cd', plugin_lv2_dir, '&&',
  207. 'mv', plugin_lv2_lib.full_path(), plugin_lv2_dir / plugin_name + lib_suffix, '&&',
  208. (meson.is_cross_build() ? 'wine' : 'env'), lv2_ttl_generator, '.' / plugin_name + lib_suffix,
  209. ],
  210. install: true,
  211. install_dir: lv2dir,
  212. )
  213. endif
  214. if build_vst2
  215. plugin_vst2 = shared_library(plugin_name,
  216. name_prefix: '',
  217. sources: plugin_extra_format_specific_srcs,
  218. include_directories: [
  219. include_directories(plugin),
  220. plugin_include_dirs,
  221. plugin_extra_include_dirs,
  222. ],
  223. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst2 + plugin_extra_build_flags,
  224. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  225. link_args: link_flags + link_flags_plugin_common + link_flags_plugin_vst2 + plugin_extra_link_flags,
  226. link_with: [ lib_juce_current, plugin_lib ],
  227. install: true,
  228. install_dir: vst2dir,
  229. )
  230. endif
  231. if build_vst3
  232. plugin_vst3_lib = shared_library(plugin_name + '-vst3',
  233. name_prefix: '',
  234. sources: plugin_extra_format_specific_srcs,
  235. include_directories: [
  236. include_directories(plugin),
  237. plugin_include_dirs,
  238. plugin_extra_include_dirs,
  239. ],
  240. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst3 + plugin_extra_build_flags,
  241. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst3 + build_flag_plugin_cpp + plugin_extra_build_flags,
  242. link_args: link_flags + link_flags_plugin_common + link_flags_plugin_vst3 + plugin_extra_link_flags,
  243. link_with: [ lib_juce_current, plugin_lib ],
  244. )
  245. plugin_vst3_dir = meson.current_build_dir() / plugin_name + '.vst3' / 'Contents' / host_machine.cpu_family() + '-' + host_machine.system()
  246. plugin_vst3 = custom_target(plugin_name + '_vst3-bundle',
  247. output: plugin_name + '.vst3',
  248. input: plugin_vst3_lib,
  249. command: [
  250. 'mkdir', '-p', plugin_vst3_dir, '&&',
  251. 'cd', plugin_vst3_dir, '&&',
  252. 'mv', plugin_vst3_lib.full_path(), plugin_vst3_dir / plugin_name + lib_suffix,
  253. ],
  254. install: true,
  255. install_dir: vst3dir,
  256. )
  257. endif
  258. endif
  259. endforeach
  260. ###############################################################################