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.

295 lines
9.8KB

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