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.

280 lines
8.6KB

  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. # link flags for plugins
  56. link_flags_plugin = [
  57. ]
  58. if os_darwin
  59. link_flags_plugin += [
  60. '-Wl,-export-symbols=' + meson.source_root() + '/scripts/plugin-symbols.txt',
  61. ]
  62. else
  63. link_flags_plugin += [
  64. '-Wl,--version-script=' + meson.source_root() + '/scripts/plugin-symbols.version',
  65. ]
  66. endif
  67. if os_darwin
  68. link_flags_plugin += [
  69. '-framework Accelerate',
  70. '-framework AudioToolbox',
  71. '-framework AudioUnit',
  72. '-framework Carbon',
  73. '-framework Cocoa',
  74. '-framework CoreAudio',
  75. '-framework CoreAudioKit',
  76. '-framework CoreMIDI',
  77. '-framework IOKit',
  78. '-framework QuartzCore',
  79. '-framework WebKit',
  80. ]
  81. endif
  82. ###############################################################################
  83. # combine flags depending on build type
  84. if buildtype == 'debug'
  85. build_flags_plugin += build_flags_plugin_debug
  86. else
  87. build_flags_plugin += build_flags_plugin_release
  88. endif
  89. ###############################################################################
  90. # format-specific flags
  91. build_flags_plugin_lv2 = [
  92. '-DJucePlugin_Build_AU=0',
  93. '-DJucePlugin_Build_LV2=1',
  94. '-DJucePlugin_Build_RTAS=0',
  95. '-DJucePlugin_Build_VST=0',
  96. '-DJucePlugin_Build_VST3=0',
  97. '-DJucePlugin_Build_Standalone=0',
  98. '-DBINTYPE=@0@LV2'.format(bintype_prefix),
  99. '-Wno-parentheses',
  100. '-Wno-deprecated-declarations', # FIXME
  101. ]
  102. build_flags_plugin_vst2 = [
  103. '-DJucePlugin_Build_AU=0',
  104. '-DJucePlugin_Build_LV2=0',
  105. '-DJucePlugin_Build_RTAS=0',
  106. '-DJucePlugin_Build_VST=1',
  107. '-DJucePlugin_Build_VST3=0',
  108. '-DJucePlugin_Build_Standalone=0',
  109. '-DBINTYPE=@0@VST2'.format(bintype_prefix),
  110. '-Wno-write-strings',
  111. ]
  112. build_flags_plugin_vst3 = [
  113. '-DJucePlugin_Build_AU=0',
  114. '-DJucePlugin_Build_LV2=0',
  115. '-DJucePlugin_Build_RTAS=0',
  116. '-DJucePlugin_Build_VST=0',
  117. '-DJucePlugin_Build_VST3=1',
  118. '-DJucePlugin_Build_Standalone=0',
  119. '-DBINTYPE=@0@VST3'.format(bintype_prefix),
  120. '-Wno-non-virtual-dtor',
  121. ]
  122. if os_windows
  123. build_flags_plugin_vst3 += [
  124. '-D_NATIVE_WCHAR_T_DEFINED',
  125. '-D__wchar_t=wchar_t',
  126. ]
  127. endif
  128. ###############################################################################
  129. foreach plugin : plugins
  130. plugin_uses_opengl = false
  131. plugin_extra_dependencies = []
  132. plugin_extra_include_dirs = []
  133. plugin_extra_build_flags = []
  134. plugin_extra_link_flags = []
  135. plugin_extra_format_specific_srcs = []
  136. subdir(plugin)
  137. plugin_extra_format_specific_srcs += files([
  138. '../libs/juce-plugin/JucePluginMain.cpp',
  139. '../libs/juce-plugin/JucePluginUtils.cpp',
  140. ])
  141. if plugin_uses_opengl
  142. if os_darwin
  143. plugin_extra_link_flags += [
  144. '-framework OpenGL',
  145. ]
  146. elif os_windows
  147. plugin_extra_dependencies += [
  148. cc.find_library('opengl32'),
  149. ]
  150. elif not linux_embed
  151. plugin_extra_dependencies += [
  152. dependency('gl')
  153. ]
  154. endif
  155. endif
  156. plugin_lib = static_library(plugin_name + '_lib',
  157. name_prefix: '',
  158. sources: plugin_srcs,
  159. include_directories: [
  160. include_directories(plugin),
  161. plugin_include_dirs,
  162. plugin_extra_include_dirs,
  163. ],
  164. c_args: build_flags + build_flags_plugin + plugin_extra_build_flags,
  165. cpp_args: build_flags_cpp + build_flags_plugin + build_flag_plugin_cpp + plugin_extra_build_flags,
  166. dependencies: dependencies_plugin + plugin_extra_dependencies,
  167. pic: true,
  168. install: false,
  169. )
  170. if build_lv2
  171. plugin_lv2_lib = shared_library(plugin_name + '_lv2',
  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_lv2 + plugin_extra_build_flags,
  180. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_lv2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  181. link_args: link_flags + link_flags_plugin,
  182. link_with: [ lib_juce_current, plugin_lib ],
  183. )
  184. plugin_lv2_dir = meson.current_build_dir() / plugin_name + '.lv2'
  185. plugin_lv2_ttl = custom_target(plugin_name + '_lv2-ttl',
  186. output: plugin_name + '.lv2',
  187. input: plugin_lv2_lib,
  188. command: [
  189. 'mkdir', '-p', plugin_lv2_dir, '&&',
  190. 'cd', plugin_lv2_dir, '&&',
  191. 'mv', plugin_lv2_lib.full_path(), plugin_lv2_dir / plugin_name + lib_suffix, '&&',
  192. (meson.is_cross_build() ? 'wine' : 'env'), lv2_ttl_generator, '.' / plugin_name + lib_suffix,
  193. ],
  194. install: true,
  195. install_dir: lv2dir,
  196. )
  197. endif
  198. if build_vst2
  199. plugin_vst2 = shared_library(plugin_name,
  200. name_prefix: '',
  201. sources: plugin_extra_format_specific_srcs,
  202. include_directories: [
  203. include_directories(plugin),
  204. plugin_include_dirs,
  205. plugin_extra_include_dirs,
  206. ],
  207. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst2 + plugin_extra_build_flags,
  208. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  209. link_args: link_flags + link_flags_plugin,
  210. link_with: [ lib_juce_current, plugin_lib ],
  211. install: true,
  212. install_dir: vst2dir,
  213. )
  214. endif
  215. if build_vst3
  216. plugin_vst3_lib = shared_library(plugin_name + '-vst3',
  217. name_prefix: '',
  218. sources: plugin_extra_format_specific_srcs,
  219. include_directories: [
  220. include_directories(plugin),
  221. plugin_include_dirs,
  222. plugin_extra_include_dirs,
  223. ],
  224. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst3 + plugin_extra_build_flags,
  225. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst3 + build_flag_plugin_cpp + plugin_extra_build_flags,
  226. link_args: link_flags + link_flags_plugin,
  227. link_with: [ lib_juce_current, plugin_lib ],
  228. )
  229. plugin_vst3_dir = meson.current_build_dir() / plugin_name + '.vst3' / 'Contents' / host_machine.cpu_family() + '-' + host_machine.system()
  230. plugin_vst3 = custom_target(plugin_name + '_vst3-bundle',
  231. output: plugin_name + '.vst3',
  232. input: plugin_vst3_lib,
  233. command: [
  234. 'mkdir', '-p', plugin_vst3_dir, '&&',
  235. 'cd', plugin_vst3_dir, '&&',
  236. 'mv', plugin_vst3_lib.full_path(), plugin_vst3_dir / plugin_name + lib_suffix,
  237. ],
  238. install: true,
  239. install_dir: vst3dir,
  240. )
  241. endif
  242. endforeach
  243. ###############################################################################