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.

447 lines
14KB

  1. cmake_minimum_required(VERSION 3.15)
  2. project(Cardinal VERSION 22.12)
  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/${CMAKE_BUILD_TYPE}/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/${CMAKE_BUILD_TYPE}/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/${CMAKE_BUILD_TYPE}/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/${CMAKE_BUILD_TYPE}/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/${CMAKE_BUILD_TYPE}/audio_decoder.a")
  20. add_library(jackbridge STATIC IMPORTED)
  21. set_property(TARGET jackbridge PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/${CMAKE_BUILD_TYPE}/jackbridge.min.a")
  22. add_library(lilv STATIC IMPORTED)
  23. set_property(TARGET lilv PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/${CMAKE_BUILD_TYPE}/lilv.a")
  24. add_library(rtmempool STATIC IMPORTED)
  25. set_property(TARGET rtmempool PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/${CMAKE_BUILD_TYPE}/rtmempool.a")
  26. add_library(sfzero STATIC IMPORTED)
  27. set_property(TARGET sfzero PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/${CMAKE_BUILD_TYPE}/sfzero.a")
  28. add_library(water STATIC IMPORTED)
  29. set_property(TARGET water PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/${CMAKE_BUILD_TYPE}/water.a")
  30. add_library(ysfx STATIC IMPORTED)
  31. set_property(TARGET ysfx PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/${CMAKE_BUILD_TYPE}/ysfx.a")
  32. add_library(zita_resampler STATIC IMPORTED)
  33. set_property(TARGET zita_resampler PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/../carla/build/modules/${CMAKE_BUILD_TYPE}/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. set(SURGE_DEP_PATH "${PROJECT_SOURCE_DIR}/../deps/surge-build")
  63. add_library(surgedep01 STATIC IMPORTED)
  64. add_library(surgedep02 STATIC IMPORTED)
  65. add_library(surgedep03 STATIC IMPORTED)
  66. add_library(surgedep04 STATIC IMPORTED)
  67. add_library(surgedep05 STATIC IMPORTED)
  68. add_library(surgedep06 STATIC IMPORTED)
  69. add_library(surgedep07 STATIC IMPORTED)
  70. add_library(surgedep08 STATIC IMPORTED)
  71. add_library(surgedep09 STATIC IMPORTED)
  72. add_library(surgedep10 STATIC IMPORTED)
  73. set_property(TARGET surgedep01 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/src/common/libsurge-common.a")
  74. set_property(TARGET surgedep02 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/src/common/libjuce_dsp_rack_sub.a")
  75. set_property(TARGET surgedep03 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/airwindows/libairwindows.a")
  76. set_property(TARGET surgedep04 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/eurorack/libeurorack.a")
  77. set_property(TARGET surgedep05 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/fmt/libfmt.a")
  78. set_property(TARGET surgedep06 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/sqlite-3.23.3/libsqlite.a")
  79. set_property(TARGET surgedep07 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/sst/sst-plugininfra/libsst-plugininfra.a")
  80. set_property(TARGET surgedep08 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/sst/sst-plugininfra/libs/filesystem/libfilesystem.a")
  81. set_property(TARGET surgedep09 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/sst/sst-plugininfra/libs/strnatcmp/libstrnatcmp.a")
  82. set_property(TARGET surgedep10 PROPERTY IMPORTED_LOCATION "${SURGE_DEP_PATH}/libs/sst/sst-plugininfra/libs/tinyxml/libtinyxml.a")
  83. # dependencies
  84. find_package(PkgConfig REQUIRED)
  85. pkg_check_modules(FFTW3F REQUIRED fftw3f)
  86. pkg_check_modules(LIBLO REQUIRED liblo)
  87. pkg_check_modules(SNDFILE REQUIRED sndfile)
  88. if (APPLE)
  89. set(EXTRA_LIBS "-lz")
  90. set(GL_LIBRARIES "-framework OpenGL")
  91. set(PLUGIN_FORMATS AU)
  92. else (APPLE)
  93. pkg_check_modules(DBUS REQUIRED dbus-1)
  94. pkg_check_modules(GL REQUIRED gl)
  95. pkg_check_modules(X11 REQUIRED x11)
  96. pkg_check_modules(XCURSOR REQUIRED xcursor)
  97. pkg_check_modules(XEXT REQUIRED xext)
  98. pkg_check_modules(XRANDR REQUIRED xrandr)
  99. set(EXTRA_LIBS "-lrt")
  100. set(STATIC_LIBS_START "-Wl,--whole-archive")
  101. set(STATIC_LIBS_END "-Wl,--no-whole-archive")
  102. set(PLUGIN_FORMATS Standalone VST3)
  103. endif (APPLE)
  104. # Main variant
  105. #[[
  106. juce_add_plugin(Cardinal
  107. AU_MAIN_TYPE kAudioUnitType_MusicEffect
  108. COMPANY_COPYRIGHT "GPL-3.0-or-later"
  109. COMPANY_NAME "DISTRHO"
  110. COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal"
  111. DESCRIPTION "Virtual modular synthesizer plugin"
  112. EDITOR_WANTS_KEYBOARD_FOCUS FALSE
  113. FORMATS ${PLUGIN_FORMATS}
  114. IS_MIDI_EFFECT FALSE
  115. IS_SYNTH FALSE
  116. NEEDS_MIDI_INPUT TRUE
  117. NEEDS_MIDI_OUTPUT TRUE
  118. PLUGIN_CODE DcnM
  119. PLUGIN_MANUFACTURER_CODE Dstr
  120. PRODUCT_NAME "Cardinal")
  121. target_sources(Cardinal
  122. PRIVATE
  123. CardinalWrapper.cpp)
  124. target_include_directories(Cardinal
  125. PRIVATE
  126. ../dpf/distrho
  127. ../src/Cardinal)
  128. target_compile_definitions(Cardinal
  129. PUBLIC
  130. DISTRHO_NAMESPACE=CardinalDISTRHO
  131. DGL_NAMESPACE=CardinalDGL
  132. JucePlugin_PreferredChannelConfigurations=8,8
  133. JUCE_CHECK_MEMORY_LEAKS=0
  134. JUCE_DISABLE_NATIVE_FILECHOOSERS=1
  135. JUCE_DISPLAY_SPLASH_SCREEN=0
  136. JUCE_MODAL_LOOPS_PERMITTED=0
  137. JUCE_USE_CURL=0
  138. JUCE_USE_FLAC=0
  139. JUCE_USE_OGGVORBIS=0
  140. JUCE_USE_XINERAMA=0
  141. JUCE_VST3_CAN_REPLACE_VST2=0
  142. JUCE_ALSA=1
  143. JUCE_DIRECTSOUND=0
  144. JUCE_JACK=1
  145. JUCE_WASAPI=0
  146. JUCE_WEB_BROWSER=0)
  147. target_link_libraries(Cardinal
  148. PRIVATE
  149. juce::juce_audio_utils
  150. ${STATIC_LIBS_START}
  151. sPlugins
  152. sCardinal
  153. sRack
  154. carla_host_plugin
  155. carla_engine_plugin
  156. carla_plugin
  157. native_plugins
  158. audio_decoder
  159. jackbridge
  160. lilv
  161. rtmempool
  162. sfzero
  163. water
  164. ysfx
  165. zita_resampler
  166. dgl
  167. surgedep01
  168. surgedep02
  169. surgedep03
  170. surgedep04
  171. surgedep05
  172. surgedep06
  173. surgedep07
  174. surgedep08
  175. surgedep09
  176. surgedep10
  177. libaubio
  178. libarchive
  179. libjansson
  180. libquickjs
  181. libsamplerate
  182. libspeexdsp
  183. libzstd
  184. ${STATIC_LIBS_END}
  185. ${GL_LIBRARIES}
  186. ${DBUS_LIBRARIES}
  187. -L${LIBLO_LIBRARY_DIRS}
  188. ${FFTW3F_LIBRARIES}
  189. ${LIBLO_LIBRARIES}
  190. ${SNDFILE_LIBRARIES}
  191. ${X11_LIBRARIES}
  192. ${XCURSOR_LIBRARIES}
  193. ${XEXT_LIBRARIES}
  194. ${XRANDR_LIBRARIES}
  195. ${EXTRA_LIBS}
  196. -lmagic
  197. PUBLIC
  198. juce::juce_recommended_config_flags
  199. juce::juce_recommended_lto_flags
  200. juce::juce_recommended_warning_flags)
  201. #]]
  202. # FX variant
  203. juce_add_plugin(CardinalFX
  204. AU_MAIN_TYPE kAudioUnitType_MusicEffect
  205. COMPANY_COPYRIGHT "GPL-3.0-or-later"
  206. COMPANY_NAME "DISTRHO"
  207. COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal"
  208. DESCRIPTION "Virtual modular synthesizer plugin"
  209. EDITOR_WANTS_KEYBOARD_FOCUS FALSE
  210. FORMATS ${PLUGIN_FORMATS}
  211. IS_MIDI_EFFECT FALSE
  212. IS_SYNTH FALSE
  213. NEEDS_MIDI_INPUT TRUE
  214. NEEDS_MIDI_OUTPUT TRUE
  215. PLUGIN_CODE DcnF
  216. PLUGIN_MANUFACTURER_CODE Dstr
  217. PRODUCT_NAME "CardinalFX")
  218. target_sources(CardinalFX
  219. PRIVATE
  220. CardinalWrapper.cpp)
  221. target_include_directories(CardinalFX
  222. PRIVATE
  223. ../dpf/distrho
  224. ../src/CardinalFX)
  225. target_compile_definitions(CardinalFX
  226. PUBLIC
  227. DISTRHO_NAMESPACE=CardinalDISTRHO
  228. DGL_NAMESPACE=CardinalDGL
  229. JucePlugin_PreferredChannelConfigurations=2,2
  230. JUCE_CHECK_MEMORY_LEAKS=0
  231. JUCE_DISABLE_NATIVE_FILECHOOSERS=1
  232. JUCE_DISPLAY_SPLASH_SCREEN=0
  233. JUCE_MODAL_LOOPS_PERMITTED=0
  234. JUCE_USE_CURL=0
  235. JUCE_USE_FLAC=0
  236. JUCE_USE_OGGVORBIS=0
  237. JUCE_USE_XINERAMA=0
  238. JUCE_VST3_CAN_REPLACE_VST2=0
  239. JUCE_ALSA=1
  240. JUCE_DIRECTSOUND=0
  241. JUCE_JACK=1
  242. JUCE_WASAPI=0
  243. JUCE_WEB_BROWSER=0)
  244. target_link_libraries(CardinalFX
  245. PRIVATE
  246. juce::juce_audio_utils
  247. ${STATIC_LIBS_START}
  248. sPlugins
  249. sCardinalFX
  250. sRack
  251. carla_host_plugin
  252. carla_engine_plugin
  253. carla_plugin
  254. native_plugins
  255. audio_decoder
  256. jackbridge
  257. lilv
  258. rtmempool
  259. sfzero
  260. water
  261. ysfx
  262. zita_resampler
  263. dgl
  264. surgedep01
  265. surgedep02
  266. surgedep03
  267. surgedep04
  268. surgedep05
  269. surgedep06
  270. surgedep07
  271. surgedep08
  272. surgedep09
  273. surgedep10
  274. libaubio
  275. libarchive
  276. libjansson
  277. libquickjs
  278. libsamplerate
  279. libspeexdsp
  280. libzstd
  281. ${STATIC_LIBS_END}
  282. ${GL_LIBRARIES}
  283. ${DBUS_LIBRARIES}
  284. -L${LIBLO_LIBRARY_DIRS}
  285. ${FFTW3F_LIBRARIES}
  286. ${LIBLO_LIBRARIES}
  287. ${SNDFILE_LIBRARIES}
  288. ${X11_LIBRARIES}
  289. ${XCURSOR_LIBRARIES}
  290. ${XEXT_LIBRARIES}
  291. ${XRANDR_LIBRARIES}
  292. ${EXTRA_LIBS}
  293. -lmagic
  294. PUBLIC
  295. juce::juce_recommended_config_flags
  296. juce::juce_recommended_lto_flags
  297. juce::juce_recommended_warning_flags)
  298. # Synth variant
  299. juce_add_plugin(CardinalSynth
  300. AU_MAIN_TYPE kAudioUnitType_MusicDevice
  301. COMPANY_COPYRIGHT "GPL-3.0-or-later"
  302. COMPANY_NAME "DISTRHO"
  303. COMPANY_WEBSITE "https://github.com/DISTRHO/Cardinal"
  304. DESCRIPTION "Virtual modular synthesizer plugin"
  305. EDITOR_WANTS_KEYBOARD_FOCUS FALSE
  306. FORMATS ${PLUGIN_FORMATS}
  307. IS_MIDI_EFFECT FALSE
  308. IS_SYNTH TRUE
  309. NEEDS_MIDI_INPUT TRUE
  310. NEEDS_MIDI_OUTPUT TRUE
  311. PLUGIN_CODE DcnS
  312. PLUGIN_MANUFACTURER_CODE Dstr
  313. PRODUCT_NAME "CardinalSynth")
  314. target_sources(CardinalSynth
  315. PRIVATE
  316. CardinalWrapper.cpp)
  317. target_include_directories(CardinalSynth
  318. PRIVATE
  319. ../dpf/distrho
  320. ../src/CardinalSynth)
  321. target_compile_definitions(CardinalSynth
  322. PUBLIC
  323. DISTRHO_NAMESPACE=CardinalDISTRHO
  324. DGL_NAMESPACE=CardinalDGL
  325. JucePlugin_PreferredChannelConfigurations=0,2
  326. JUCE_CHECK_MEMORY_LEAKS=0
  327. JUCE_DISABLE_NATIVE_FILECHOOSERS=1
  328. JUCE_DISPLAY_SPLASH_SCREEN=0
  329. JUCE_MODAL_LOOPS_PERMITTED=0
  330. JUCE_USE_CURL=0
  331. JUCE_USE_FLAC=0
  332. JUCE_USE_OGGVORBIS=0
  333. JUCE_USE_XINERAMA=0
  334. JUCE_VST3_CAN_REPLACE_VST2=0
  335. JUCE_ALSA=1
  336. JUCE_DIRECTSOUND=0
  337. JUCE_JACK=1
  338. JUCE_WASAPI=0
  339. JUCE_WEB_BROWSER=0)
  340. target_link_libraries(CardinalSynth
  341. PRIVATE
  342. juce::juce_audio_utils
  343. ${STATIC_LIBS_START}
  344. sPlugins
  345. sCardinalSynth
  346. sRack
  347. carla_host_plugin
  348. carla_engine_plugin
  349. carla_plugin
  350. native_plugins
  351. audio_decoder
  352. jackbridge
  353. lilv
  354. rtmempool
  355. sfzero
  356. water
  357. ysfx
  358. zita_resampler
  359. dgl
  360. surgedep01
  361. surgedep02
  362. surgedep03
  363. surgedep04
  364. surgedep05
  365. surgedep06
  366. surgedep07
  367. surgedep08
  368. surgedep09
  369. surgedep10
  370. libaubio
  371. libarchive
  372. libjansson
  373. libquickjs
  374. libsamplerate
  375. libspeexdsp
  376. libzstd
  377. ${STATIC_LIBS_END}
  378. ${GL_LIBRARIES}
  379. ${DBUS_LIBRARIES}
  380. -L${LIBLO_LIBRARY_DIRS}
  381. ${FFTW3F_LIBRARIES}
  382. ${LIBLO_LIBRARIES}
  383. ${SNDFILE_LIBRARIES}
  384. ${X11_LIBRARIES}
  385. ${XCURSOR_LIBRARIES}
  386. ${XEXT_LIBRARIES}
  387. ${XRANDR_LIBRARIES}
  388. ${EXTRA_LIBS}
  389. -lmagic
  390. PUBLIC
  391. juce::juce_recommended_config_flags
  392. juce::juce_recommended_lto_flags
  393. juce::juce_recommended_warning_flags)