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.

282 lines
9.1KB

  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. if plugin in get_option('plugins') and not build_legacy_only
  131. plugin_uses_opengl = false
  132. plugin_extra_dependencies = []
  133. plugin_extra_include_dirs = []
  134. plugin_extra_build_flags = []
  135. plugin_extra_link_flags = []
  136. plugin_extra_format_specific_srcs = []
  137. subdir(plugin)
  138. plugin_extra_format_specific_srcs += files([
  139. '../libs/juce-plugin/JucePluginMain.cpp',
  140. '../libs/juce-plugin/JucePluginUtils.cpp',
  141. ])
  142. if plugin_uses_opengl
  143. if os_darwin
  144. plugin_extra_link_flags += [
  145. '-framework OpenGL',
  146. ]
  147. elif os_windows
  148. plugin_extra_dependencies += [
  149. cc.find_library('opengl32'),
  150. ]
  151. elif not linux_embed
  152. plugin_extra_dependencies += [
  153. dependency('gl')
  154. ]
  155. endif
  156. endif
  157. plugin_lib = static_library(plugin_name + '_lib',
  158. name_prefix: '',
  159. sources: plugin_srcs,
  160. include_directories: [
  161. include_directories(plugin),
  162. plugin_include_dirs,
  163. plugin_extra_include_dirs,
  164. ],
  165. c_args: build_flags + build_flags_plugin + plugin_extra_build_flags,
  166. cpp_args: build_flags_cpp + build_flags_plugin + build_flag_plugin_cpp + plugin_extra_build_flags,
  167. dependencies: dependencies_plugin + plugin_extra_dependencies,
  168. pic: true,
  169. install: false,
  170. )
  171. if build_lv2
  172. plugin_lv2_lib = shared_library(plugin_name + '_lv2',
  173. name_prefix: '',
  174. sources: plugin_extra_format_specific_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 + build_flags_plugin_lv2 + plugin_extra_build_flags,
  181. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_lv2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  182. link_args: link_flags + link_flags_plugin,
  183. link_with: [ lib_juce_current, plugin_lib ],
  184. )
  185. plugin_lv2_dir = meson.current_build_dir() / plugin_name + '.lv2'
  186. plugin_lv2_ttl = custom_target(plugin_name + '_lv2-ttl',
  187. output: plugin_name + '.lv2',
  188. input: plugin_lv2_lib,
  189. command: [
  190. 'mkdir', '-p', plugin_lv2_dir, '&&',
  191. 'cd', plugin_lv2_dir, '&&',
  192. 'mv', plugin_lv2_lib.full_path(), plugin_lv2_dir / plugin_name + lib_suffix, '&&',
  193. (meson.is_cross_build() ? 'wine' : 'env'), lv2_ttl_generator, '.' / plugin_name + lib_suffix,
  194. ],
  195. install: true,
  196. install_dir: lv2dir,
  197. )
  198. endif
  199. if build_vst2
  200. plugin_vst2 = shared_library(plugin_name,
  201. name_prefix: '',
  202. sources: plugin_extra_format_specific_srcs,
  203. include_directories: [
  204. include_directories(plugin),
  205. plugin_include_dirs,
  206. plugin_extra_include_dirs,
  207. ],
  208. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst2 + plugin_extra_build_flags,
  209. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst2 + build_flag_plugin_cpp + plugin_extra_build_flags,
  210. link_args: link_flags + link_flags_plugin,
  211. link_with: [ lib_juce_current, plugin_lib ],
  212. install: true,
  213. install_dir: vst2dir,
  214. )
  215. endif
  216. if build_vst3
  217. plugin_vst3_lib = shared_library(plugin_name + '-vst3',
  218. name_prefix: '',
  219. sources: plugin_extra_format_specific_srcs,
  220. include_directories: [
  221. include_directories(plugin),
  222. plugin_include_dirs,
  223. plugin_extra_include_dirs,
  224. ],
  225. c_args: build_flags + build_flags_plugin + build_flags_plugin_vst3 + plugin_extra_build_flags,
  226. cpp_args: build_flags_cpp + build_flags_plugin + build_flags_plugin_vst3 + build_flag_plugin_cpp + plugin_extra_build_flags,
  227. link_args: link_flags + link_flags_plugin,
  228. link_with: [ lib_juce_current, plugin_lib ],
  229. )
  230. plugin_vst3_dir = meson.current_build_dir() / plugin_name + '.vst3' / 'Contents' / host_machine.cpu_family() + '-' + host_machine.system()
  231. plugin_vst3 = custom_target(plugin_name + '_vst3-bundle',
  232. output: plugin_name + '.vst3',
  233. input: plugin_vst3_lib,
  234. command: [
  235. 'mkdir', '-p', plugin_vst3_dir, '&&',
  236. 'cd', plugin_vst3_dir, '&&',
  237. 'mv', plugin_vst3_lib.full_path(), plugin_vst3_dir / plugin_name + lib_suffix,
  238. ],
  239. install: true,
  240. install_dir: vst3dir,
  241. )
  242. endif
  243. endif
  244. endforeach
  245. ###############################################################################