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.

387 lines
11KB

  1. cmake_minimum_required(VERSION 3.15)
  2. project(Cardinal VERSION 22.05)
  3. add_subdirectory(JUCE)
  4. # Config
  5. set(CMAKE_C_VISIBILITY_PRESET hidden)
  6. set(CMAKE_CXX_VISIBILITY_PRESET hidden)
  7. # Define static libs
  8. add_library(dgl STATIC IMPORTED)
  9. set_property(TARGET dgl PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../dpf/build/libdgl-opengl.a")
  10. add_library(carla_host_plugin STATIC IMPORTED)
  11. set_property(TARGET carla_host_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/plugin/Release/carla-host-plugin.cpp.o")
  12. add_library(carla_engine_plugin STATIC IMPORTED)
  13. set_property(TARGET carla_engine_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/carla_engine_plugin.a")
  14. add_library(carla_plugin STATIC IMPORTED)
  15. set_property(TARGET carla_plugin PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/carla_plugin.a")
  16. add_library(native_plugins STATIC IMPORTED)
  17. set_property(TARGET native_plugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/native-plugins.a")
  18. add_library(audio_decoder STATIC IMPORTED)
  19. set_property(TARGET audio_decoder PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/audio_decoder.a")
  20. add_library(jackbridge STATIC IMPORTED)
  21. set_property(TARGET jackbridge PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/jackbridge.min.a")
  22. add_library(lilv STATIC IMPORTED)
  23. set_property(TARGET lilv PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/lilv.a")
  24. add_library(rtmempool STATIC IMPORTED)
  25. set_property(TARGET rtmempool PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/rtmempool.a")
  26. add_library(sfzero STATIC IMPORTED)
  27. set_property(TARGET sfzero PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/sfzero.a")
  28. add_library(water STATIC IMPORTED)
  29. set_property(TARGET water PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/water.a")
  30. add_library(ysfx STATIC IMPORTED)
  31. set_property(TARGET ysfx PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/ysfx.a")
  32. add_library(zita_resampler STATIC IMPORTED)
  33. set_property(TARGET zita_resampler PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/Release/zita-resampler.a")
  34. add_library(sCardinal STATIC IMPORTED)
  35. set_property(TARGET sCardinal PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../bin/Cardinal.a")
  36. add_library(sCardinalFX STATIC IMPORTED)
  37. set_property(TARGET sCardinalFX PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../bin/CardinalFX.a")
  38. add_library(sCardinalSynth STATIC IMPORTED)
  39. set_property(TARGET sCardinalSynth PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../bin/CardinalSynth.a")
  40. add_library(sPlugins STATIC IMPORTED)
  41. set_property(TARGET sPlugins PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../plugins/plugins.a")
  42. add_library(sRack STATIC IMPORTED)
  43. set_property(TARGET sRack PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/rack.a")
  44. add_library(libaubio STATIC IMPORTED)
  45. set_property(TARGET libaubio PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../deps/aubio/libaubio.a")
  46. add_library(libarchive STATIC IMPORTED)
  47. if (WIN32)
  48. set_property(TARGET libarchive PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libarchive_static.a")
  49. else (WIN32)
  50. set_property(TARGET libarchive PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libarchive.a")
  51. endif (WIN32)
  52. add_library(libjansson STATIC IMPORTED)
  53. set_property(TARGET libjansson PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libjansson.a")
  54. add_library(libquickjs STATIC IMPORTED)
  55. set_property(TARGET libquickjs PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libquickjs.a")
  56. add_library(libsamplerate STATIC IMPORTED)
  57. set_property(TARGET libsamplerate PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libsamplerate.a")
  58. add_library(libspeexdsp STATIC IMPORTED)
  59. set_property(TARGET libspeexdsp PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libspeexdsp.a")
  60. add_library(libzstd STATIC IMPORTED)
  61. set_property(TARGET libzstd PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../src/Rack/dep/lib/libzstd.a")
  62. # dependencies
  63. find_package(PkgConfig REQUIRED)
  64. pkg_check_modules(FFTW3F REQUIRED fftw3f)
  65. pkg_check_modules(LIBLO REQUIRED liblo)
  66. pkg_check_modules(SNDFILE REQUIRED sndfile)
  67. if (APPLE)
  68. set(EXTRA_LIBS "-lz")
  69. set(GL_LIBRARIES "-framework OpenGL")
  70. set(PLUGIN_FORMATS AU)
  71. else (APPLE)
  72. pkg_check_modules(DBUS REQUIRED dbus-1)
  73. pkg_check_modules(GL REQUIRED gl)
  74. pkg_check_modules(X11 REQUIRED x11)
  75. pkg_check_modules(XCURSOR REQUIRED xcursor)
  76. pkg_check_modules(XEXT REQUIRED xext)
  77. pkg_check_modules(XRANDR REQUIRED xrandr)
  78. set(EXTRA_LIBS "-lrt")
  79. set(STATIC_LIBS_START "-Wl,--whole-archive")
  80. set(STATIC_LIBS_END "-Wl,--no-whole-archive")
  81. set(PLUGIN_FORMATS Standalone VST3)
  82. endif (APPLE)
  83. # Main variant
  84. #[[
  85. juce_add_plugin(Cardinal
  86. AU_MAIN_TYPE kAudioUnitType_MusicEffect
  87. COMPANY_COPYRIGHT "GPL-3.0-or-later"
  88. COMPANY_NAME "DISTRHO"
  89. COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal"
  90. DESCRIPTION "Virtual modular synthesizer plugin"
  91. EDITOR_WANTS_KEYBOARD_FOCUS FALSE
  92. FORMATS ${PLUGIN_FORMATS}
  93. IS_MIDI_EFFECT FALSE
  94. IS_SYNTH FALSE
  95. NEEDS_MIDI_INPUT TRUE
  96. NEEDS_MIDI_OUTPUT TRUE
  97. PLUGIN_CODE DcnM
  98. PLUGIN_MANUFACTURER_CODE Dstr
  99. PRODUCT_NAME "Cardinal")
  100. target_sources(Cardinal
  101. PRIVATE
  102. CardinalWrapper.cpp)
  103. target_include_directories(Cardinal
  104. PRIVATE
  105. ../dpf/distrho
  106. ../src/Cardinal)
  107. target_compile_definitions(Cardinal
  108. PUBLIC
  109. JucePlugin_PreferredChannelConfigurations=8,8
  110. JUCE_CHECK_MEMORY_LEAKS=0
  111. JUCE_DISABLE_NATIVE_FILECHOOSERS=1
  112. JUCE_DISPLAY_SPLASH_SCREEN=0
  113. JUCE_MODAL_LOOPS_PERMITTED=0
  114. JUCE_USE_CURL=0
  115. JUCE_USE_FLAC=0
  116. JUCE_USE_OGGVORBIS=0
  117. JUCE_USE_XINERAMA=0
  118. JUCE_VST3_CAN_REPLACE_VST2=0
  119. JUCE_ALSA=1
  120. JUCE_DIRECTSOUND=0
  121. JUCE_JACK=1
  122. JUCE_WASAPI=0
  123. JUCE_WEB_BROWSER=0)
  124. target_link_libraries(Cardinal
  125. PRIVATE
  126. juce::juce_audio_utils
  127. ${STATIC_LIBS_START}
  128. sCardinal
  129. sPlugins
  130. sRack
  131. carla_host_plugin
  132. carla_engine_plugin
  133. carla_plugin
  134. native_plugins
  135. audio_decoder
  136. jackbridge
  137. lilv
  138. rtmempool
  139. sfzero
  140. water
  141. ysfx
  142. zita_resampler
  143. dgl
  144. libaubio
  145. libarchive
  146. libjansson
  147. libquickjs
  148. libsamplerate
  149. libspeexdsp
  150. libzstd
  151. ${STATIC_LIBS_END}
  152. ${GL_LIBRARIES}
  153. ${DBUS_LIBRARIES}
  154. -L${LIBLO_LIBRARY_DIRS}
  155. ${FFTW3F_LIBRARIES}
  156. ${LIBLO_LIBRARIES}
  157. ${SNDFILE_LIBRARIES}
  158. ${X11_LIBRARIES}
  159. ${XCURSOR_LIBRARIES}
  160. ${XEXT_LIBRARIES}
  161. ${XRANDR_LIBRARIES}
  162. ${EXTRA_LIBS}
  163. -lmagic
  164. PUBLIC
  165. juce::juce_recommended_config_flags
  166. juce::juce_recommended_lto_flags
  167. juce::juce_recommended_warning_flags)
  168. #]]
  169. # FX variant
  170. juce_add_plugin(CardinalFX
  171. AU_MAIN_TYPE kAudioUnitType_MusicEffect
  172. COMPANY_COPYRIGHT "GPL-3.0-or-later"
  173. COMPANY_NAME "DISTRHO"
  174. COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal"
  175. DESCRIPTION "Virtual modular synthesizer plugin"
  176. EDITOR_WANTS_KEYBOARD_FOCUS FALSE
  177. FORMATS ${PLUGIN_FORMATS}
  178. IS_MIDI_EFFECT FALSE
  179. IS_SYNTH FALSE
  180. NEEDS_MIDI_INPUT TRUE
  181. NEEDS_MIDI_OUTPUT TRUE
  182. PLUGIN_CODE DcnF
  183. PLUGIN_MANUFACTURER_CODE Dstr
  184. PRODUCT_NAME "CardinalFX")
  185. target_sources(CardinalFX
  186. PRIVATE
  187. CardinalWrapper.cpp)
  188. target_include_directories(CardinalFX
  189. PRIVATE
  190. ../dpf/distrho
  191. ../src/CardinalFX)
  192. target_compile_definitions(CardinalFX
  193. PUBLIC
  194. JucePlugin_PreferredChannelConfigurations=2,2
  195. JUCE_CHECK_MEMORY_LEAKS=0
  196. JUCE_DISABLE_NATIVE_FILECHOOSERS=1
  197. JUCE_DISPLAY_SPLASH_SCREEN=0
  198. JUCE_MODAL_LOOPS_PERMITTED=0
  199. JUCE_USE_CURL=0
  200. JUCE_USE_FLAC=0
  201. JUCE_USE_OGGVORBIS=0
  202. JUCE_USE_XINERAMA=0
  203. JUCE_VST3_CAN_REPLACE_VST2=0
  204. JUCE_ALSA=1
  205. JUCE_DIRECTSOUND=0
  206. JUCE_JACK=1
  207. JUCE_WASAPI=0
  208. JUCE_WEB_BROWSER=0)
  209. target_link_libraries(CardinalFX
  210. PRIVATE
  211. juce::juce_audio_utils
  212. ${STATIC_LIBS_START}
  213. sCardinalFX
  214. sPlugins
  215. sRack
  216. carla_host_plugin
  217. carla_engine_plugin
  218. carla_plugin
  219. native_plugins
  220. audio_decoder
  221. jackbridge
  222. lilv
  223. rtmempool
  224. sfzero
  225. water
  226. ysfx
  227. zita_resampler
  228. dgl
  229. libaubio
  230. libarchive
  231. libjansson
  232. libquickjs
  233. libsamplerate
  234. libspeexdsp
  235. libzstd
  236. ${STATIC_LIBS_END}
  237. ${GL_LIBRARIES}
  238. ${DBUS_LIBRARIES}
  239. -L${LIBLO_LIBRARY_DIRS}
  240. ${FFTW3F_LIBRARIES}
  241. ${LIBLO_LIBRARIES}
  242. ${SNDFILE_LIBRARIES}
  243. ${X11_LIBRARIES}
  244. ${XCURSOR_LIBRARIES}
  245. ${XEXT_LIBRARIES}
  246. ${XRANDR_LIBRARIES}
  247. ${EXTRA_LIBS}
  248. -lmagic
  249. PUBLIC
  250. juce::juce_recommended_config_flags
  251. juce::juce_recommended_lto_flags
  252. juce::juce_recommended_warning_flags)
  253. # Synth variant
  254. juce_add_plugin(CardinalSynth
  255. AU_MAIN_TYPE kAudioUnitType_MusicDevice
  256. COMPANY_COPYRIGHT "GPL-3.0-or-later"
  257. COMPANY_NAME "DISTRHO"
  258. COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal"
  259. DESCRIPTION "Virtual modular synthesizer plugin"
  260. EDITOR_WANTS_KEYBOARD_FOCUS FALSE
  261. FORMATS ${PLUGIN_FORMATS}
  262. IS_MIDI_EFFECT FALSE
  263. IS_SYNTH TRUE
  264. NEEDS_MIDI_INPUT TRUE
  265. NEEDS_MIDI_OUTPUT TRUE
  266. PLUGIN_CODE DcnS
  267. PLUGIN_MANUFACTURER_CODE Dstr
  268. PRODUCT_NAME "CardinalSynth")
  269. target_sources(CardinalSynth
  270. PRIVATE
  271. CardinalWrapper.cpp)
  272. target_include_directories(CardinalSynth
  273. PRIVATE
  274. ../dpf/distrho
  275. ../src/CardinalSynth)
  276. target_compile_definitions(CardinalSynth
  277. PUBLIC
  278. JucePlugin_PreferredChannelConfigurations=0,2
  279. JUCE_CHECK_MEMORY_LEAKS=0
  280. JUCE_DISABLE_NATIVE_FILECHOOSERS=1
  281. JUCE_DISPLAY_SPLASH_SCREEN=0
  282. JUCE_MODAL_LOOPS_PERMITTED=0
  283. JUCE_USE_CURL=0
  284. JUCE_USE_FLAC=0
  285. JUCE_USE_OGGVORBIS=0
  286. JUCE_USE_XINERAMA=0
  287. JUCE_VST3_CAN_REPLACE_VST2=0
  288. JUCE_ALSA=1
  289. JUCE_DIRECTSOUND=0
  290. JUCE_JACK=1
  291. JUCE_WASAPI=0
  292. JUCE_WEB_BROWSER=0)
  293. target_link_libraries(CardinalSynth
  294. PRIVATE
  295. juce::juce_audio_utils
  296. ${STATIC_LIBS_START}
  297. sCardinalSynth
  298. sPlugins
  299. sRack
  300. carla_host_plugin
  301. carla_engine_plugin
  302. carla_plugin
  303. native_plugins
  304. audio_decoder
  305. jackbridge
  306. lilv
  307. rtmempool
  308. sfzero
  309. water
  310. ysfx
  311. zita_resampler
  312. dgl
  313. libaubio
  314. libarchive
  315. libjansson
  316. libquickjs
  317. libsamplerate
  318. libspeexdsp
  319. libzstd
  320. ${STATIC_LIBS_END}
  321. ${GL_LIBRARIES}
  322. ${DBUS_LIBRARIES}
  323. -L${LIBLO_LIBRARY_DIRS}
  324. ${FFTW3F_LIBRARIES}
  325. ${LIBLO_LIBRARIES}
  326. ${SNDFILE_LIBRARIES}
  327. ${X11_LIBRARIES}
  328. ${XCURSOR_LIBRARIES}
  329. ${XEXT_LIBRARIES}
  330. ${XRANDR_LIBRARIES}
  331. ${EXTRA_LIBS}
  332. -lmagic
  333. PUBLIC
  334. juce::juce_recommended_config_flags
  335. juce::juce_recommended_lto_flags
  336. juce::juce_recommended_warning_flags)