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.

415 lines
13KB

  1. #!/usr/bin/make -f
  2. # Makefile for DISTRHO Plugins #
  3. # ---------------------------- #
  4. # Created by falkTX
  5. #
  6. ROOT = .
  7. include $(ROOT)/Makefile.base.mk
  8. # -----------------------------------------------------------------------------
  9. # Set version
  10. # also set in:
  11. # jucewrapper/CMakeLists.txt `project`
  12. # src/CardinalCommon.cpp `CARDINAL_VERSION`
  13. # src/CardinalPlugin.cpp `getVersion`
  14. VERSION = 23.05
  15. # --------------------------------------------------------------
  16. # Build targets
  17. all: cardinal carla deps dgl plugins gen resources
  18. # --------------------------------------------------------------
  19. # Build config
  20. PREFIX ?= /usr/local
  21. DESTDIR ?=
  22. # --------------------------------------------------------------
  23. # Carla config
  24. CARLA_EXTRA_ARGS = \
  25. CARLA_BACKEND_NAMESPACE=Cardinal \
  26. DGL_NAMESPACE=CardinalDGL \
  27. HAVE_FFMPEG=false \
  28. HAVE_FLUIDSYNTH=false \
  29. HAVE_PROJECTM=false \
  30. HAVE_ZYN_DEPS=false \
  31. HAVE_ZYN_UI_DEPS=false
  32. ifneq ($(DEBUG),true)
  33. CARLA_EXTRA_ARGS += EXTERNAL_PLUGINS=true
  34. endif
  35. # --------------------------------------------------------------
  36. # Check for required system-wide dependencies
  37. ifeq ($(SYSDEPS),true)
  38. ifneq ($(shell $(PKG_CONFIG) --exists jansson && echo true),true)
  39. $(error jansson dependency not installed/available)
  40. endif
  41. ifneq ($(shell $(PKG_CONFIG) --exists libarchive && echo true),true)
  42. $(error libarchive dependency not installed/available)
  43. endif
  44. ifneq ($(shell $(PKG_CONFIG) --exists samplerate && echo true),true)
  45. $(error samplerate dependency not installed/available)
  46. endif
  47. ifneq ($(shell $(PKG_CONFIG) --exists speexdsp && echo true),true)
  48. $(error speexdsp dependency not installed/available)
  49. endif
  50. endif
  51. ifeq ($(HEADLESS),true)
  52. ifneq ($(shell $(PKG_CONFIG) --exists liblo && echo true),true)
  53. $(error liblo dependency not installed/available)
  54. endif
  55. endif
  56. # --------------------------------------------------------------
  57. # Check for X11+OpenGL dependencies (unless headless build)
  58. ifneq ($(HAIKU_OR_MACOS_OR_WASM_OR_WINDOWS),true)
  59. ifneq ($(HEADLESS),true)
  60. ifneq ($(HAVE_OPENGL),true)
  61. $(error OpenGL dependency not installed/available)
  62. endif
  63. ifneq ($(HAVE_X11),true)
  64. $(error X11 dependency not installed/available)
  65. endif
  66. ifneq ($(HAVE_XCURSOR),true)
  67. $(warning Xcursor dependency not installed/available)
  68. endif
  69. ifneq ($(HAVE_XEXT),true)
  70. $(warning Xext dependency not installed/available)
  71. endif
  72. ifneq ($(HAVE_XRANDR),true)
  73. $(warning Xrandr dependency not installed/available)
  74. endif
  75. else
  76. CARLA_EXTRA_ARGS += HAVE_OPENGL=false
  77. CARLA_EXTRA_ARGS += HAVE_X11=false
  78. CARLA_EXTRA_ARGS += HAVE_XCURSOR=false
  79. CARLA_EXTRA_ARGS += HAVE_XEXT=false
  80. CARLA_EXTRA_ARGS += HAVE_XRANDR=false
  81. endif
  82. endif
  83. # --------------------------------------------------------------
  84. # Check for optional system-wide dependencies
  85. ifeq ($(shell $(PKG_CONFIG) --exists fftw3f && echo true),true)
  86. HAVE_FFTW3F = true
  87. else
  88. $(warning fftw3f dependency not installed/available)
  89. endif
  90. # --------------------------------------------------------------
  91. # MOD builds
  92. EXTRA_MOD_FLAGS = -I../include/single-precision -fsingle-precision-constant -Wno-attributes
  93. ifeq ($(MODDUO),true)
  94. EXTRA_MOD_FLAGS += -mno-unaligned-access
  95. endif
  96. ifeq ($(WITH_LTO),true)
  97. EXTRA_MOD_FLAGS += -ffat-lto-objects
  98. endif
  99. MOD_ENVIRONMENT += HEADLESS=true
  100. MOD_ENVIRONMENT += MOD_BUILD=true
  101. MOD_ENVIRONMENT += STATIC_BUILD=true
  102. # --------------------------------------------------------------
  103. # Individual targets
  104. cardinal: carla deps dgl plugins resources
  105. $(MAKE) all -C src $(CARLA_EXTRA_ARGS)
  106. carla:
  107. ifneq ($(STATIC_BUILD),true)
  108. $(MAKE) static-plugin -C carla $(CARLA_EXTRA_ARGS) \
  109. CAN_GENERATE_LV2_TTL=false \
  110. CUSTOM_DPF_PATH=$(CURDIR)/dpf \
  111. STATIC_PLUGIN_TARGET=true \
  112. USING_CUSTOM_DPF=true
  113. endif
  114. carla-win32:
  115. ifneq ($(STATIC_BUILD),true)
  116. $(MAKE) all -C carla $(CARLA_EXTRA_ARGS) \
  117. CAN_GENERATE_LV2_TTL=false \
  118. CUSTOM_DPF_PATH=$(CURDIR)/dpf \
  119. DGL_NAMESPACE=CardinalDGL \
  120. HAVE_FRONTEND=true \
  121. HAVE_PYQT=true \
  122. HAVE_QT5=true \
  123. HAVE_QT5PKG=true \
  124. STATIC_PLUGIN_TARGET=true \
  125. USING_CUSTOM_DPF=true
  126. ifeq ($(CPU_X86_64),true)
  127. $(MAKE) win32r -C carla $(CARLA_EXTRA_ARGS) \
  128. CAN_GENERATE_LV2_TTL=false \
  129. CUSTOM_DPF_PATH=$(CURDIR)/dpf \
  130. DGL_NAMESPACE=CardinalDGL \
  131. HAVE_FRONTEND=true \
  132. HAVE_PYQT=true \
  133. HAVE_QT5=true \
  134. HAVE_QT5PKG=true \
  135. STATIC_PLUGIN_TARGET=true \
  136. USING_CUSTOM_DPF=true
  137. endif
  138. endif
  139. deps:
  140. ifeq ($(SYSDEPS),true)
  141. $(MAKE) quickjs surge -C deps
  142. else
  143. $(MAKE) all -C deps
  144. endif
  145. ifeq ($(HAVE_FFTW3F),true)
  146. $(MAKE) all -C deps/aubio
  147. endif
  148. dgl:
  149. ifneq ($(HEADLESS),true)
  150. $(MAKE) opengl -C dpf/dgl $(DGL_EXTRA_ARGS)
  151. endif
  152. plugins: deps
  153. $(MAKE) all -C plugins
  154. resources:
  155. $(MAKE) resources -C plugins
  156. ifneq ($(CROSS_COMPILING),true)
  157. gen: cardinal resources dpf/utils/lv2_ttl_generator
  158. @$(CURDIR)/dpf/utils/generate-ttl.sh
  159. dpf/utils/lv2_ttl_generator:
  160. $(MAKE) -C dpf/utils/lv2-ttl-generator
  161. else
  162. gen:
  163. endif
  164. # --------------------------------------------------------------
  165. # extra rules, for quick testing
  166. jack: carla deps dgl plugins resources
  167. $(MAKE) jack -C src $(CARLA_EXTRA_ARGS)
  168. native: carla deps dgl plugins resources
  169. $(MAKE) native -C src $(CARLA_EXTRA_ARGS)
  170. # --------------------------------------------------------------
  171. # Packaging standalone for CI
  172. unzipfx: deps/unzipfx/unzipfx2cat$(APP_EXT) CardinalJACK.zip CardinalNative.zip
  173. cat deps/unzipfx/unzipfx2cat$(APP_EXT) CardinalJACK.zip > CardinalJACK$(APP_EXT)
  174. cat deps/unzipfx/unzipfx2cat$(APP_EXT) CardinalNative.zip > CardinalNative$(APP_EXT)
  175. chmod +x CardinalJACK$(APP_EXT) CardinalNative$(APP_EXT)
  176. CardinalJACK.zip: bin/Cardinal$(APP_EXT) bin/CardinalFX.lv2/resources
  177. mkdir -p build/unzipfx-jack
  178. ln -sf ../../bin/Cardinal$(APP_EXT) build/unzipfx-jack/Cardinal$(APP_EXT)
  179. ln -sf ../../bin/CardinalFX.lv2/resources build/unzipfx-jack/resources
  180. cd build/unzipfx-jack && \
  181. zip -r -9 ../../$@ Cardinal$(APP_EXT) resources
  182. CardinalNative.zip: bin/CardinalNative$(APP_EXT) bin/CardinalFX.lv2/resources
  183. mkdir -p build/unzipfx-native
  184. ln -sf ../../bin/CardinalNative$(APP_EXT) build/unzipfx-native/Cardinal$(APP_EXT)
  185. ln -sf ../../bin/CardinalFX.lv2/resources build/unzipfx-native/resources
  186. cd build/unzipfx-native && \
  187. zip -r -9 ../../$@ Cardinal$(APP_EXT) resources
  188. deps/unzipfx/unzipfx2cat:
  189. make -C deps/unzipfx -f Makefile.linux
  190. deps/unzipfx/unzipfx2cat.exe:
  191. make -C deps/unzipfx -f Makefile.win32
  192. # --------------------------------------------------------------
  193. # Clean step
  194. clean:
  195. $(MAKE) distclean -C carla $(CARLA_EXTRA_ARGS) CAN_GENERATE_LV2_TTL=false STATIC_PLUGIN_TARGET=true
  196. $(MAKE) clean -C deps
  197. $(MAKE) clean -C deps/aubio
  198. $(MAKE) clean -C dpf/dgl
  199. $(MAKE) clean -C dpf/utils/lv2-ttl-generator
  200. $(MAKE) clean -C plugins
  201. $(MAKE) clean -C src
  202. rm -rf bin build build-headless dpf/utils/lv2_ttl_generator.d
  203. # FIXME
  204. rm -f src/Rack/BaconMusic/default-skin.json
  205. rm -f src/Rack/SurgeXTRack/default-skin.json
  206. # --------------------------------------------------------------
  207. # Install step
  208. install:
  209. install -d $(DESTDIR)$(PREFIX)/bin
  210. install -d $(DESTDIR)$(PREFIX)/lib/lv2/Cardinal.lv2
  211. install -d $(DESTDIR)$(PREFIX)/lib/lv2/CardinalFX.lv2
  212. install -d $(DESTDIR)$(PREFIX)/lib/lv2/CardinalMini.lv2
  213. install -d $(DESTDIR)$(PREFIX)/lib/lv2/CardinalSynth.lv2
  214. install -d $(DESTDIR)$(PREFIX)/lib/clap/Cardinal.clap
  215. install -d $(DESTDIR)$(PREFIX)/lib/vst/Cardinal.vst
  216. ifneq ($(VST3_BINARY_DIR),)
  217. install -d $(DESTDIR)$(PREFIX)/lib/vst3/Cardinal.vst3/$(VST3_BINARY_DIR)
  218. install -d $(DESTDIR)$(PREFIX)/lib/vst3/CardinalFX.vst3/$(VST3_BINARY_DIR)
  219. install -d $(DESTDIR)$(PREFIX)/lib/vst3/CardinalSynth.vst3/$(VST3_BINARY_DIR)
  220. endif
  221. install -d $(DESTDIR)$(PREFIX)/share/cardinal
  222. install -d $(DESTDIR)$(PREFIX)/share/doc/cardinal/docs
  223. install -m 644 bin/Cardinal.lv2/*.* $(DESTDIR)$(PREFIX)/lib/lv2/Cardinal.lv2/
  224. install -m 644 bin/CardinalFX.lv2/*.* $(DESTDIR)$(PREFIX)/lib/lv2/CardinalFX.lv2/
  225. install -m 644 bin/CardinalMini.lv2/*.* $(DESTDIR)$(PREFIX)/lib/lv2/CardinalMini.lv2/
  226. install -m 644 bin/CardinalSynth.lv2/*.* $(DESTDIR)$(PREFIX)/lib/lv2/CardinalSynth.lv2/
  227. install -m 644 bin/Cardinal.clap/*.* $(DESTDIR)$(PREFIX)/lib/clap/Cardinal.clap/
  228. install -m 644 bin/Cardinal.vst/*.* $(DESTDIR)$(PREFIX)/lib/vst/Cardinal.vst/
  229. ifneq ($(VST3_BINARY_DIR),)
  230. install -m 644 bin/Cardinal.vst3/$(VST3_BINARY_DIR)/* $(DESTDIR)$(PREFIX)/lib/vst3/Cardinal.vst3/$(VST3_BINARY_DIR)/
  231. install -m 644 bin/CardinalFX.vst3/$(VST3_BINARY_DIR)/* $(DESTDIR)$(PREFIX)/lib/vst3/CardinalFX.vst3/$(VST3_BINARY_DIR)/
  232. install -m 644 bin/CardinalSynth.vst3/$(VST3_BINARY_DIR)/* $(DESTDIR)$(PREFIX)/lib/vst3/CardinalSynth.vst3/$(VST3_BINARY_DIR)/
  233. endif
  234. install -m 755 bin/Cardinal$(APP_EXT) $(DESTDIR)$(PREFIX)/bin/
  235. install -m 755 bin/CardinalMini$(APP_EXT) $(DESTDIR)$(PREFIX)/bin/
  236. install -m 755 bin/CardinalNative$(APP_EXT) $(DESTDIR)$(PREFIX)/bin/
  237. cp -rL bin/Cardinal.lv2/resources/* $(DESTDIR)$(PREFIX)/share/cardinal/
  238. install -m 644 README.md $(DESTDIR)$(PREFIX)/share/doc/cardinal/
  239. install -m 644 docs/*.md docs/*.png $(DESTDIR)$(PREFIX)/share/doc/cardinal/docs/
  240. # --------------------------------------------------------------
  241. # Tarball step, for releases
  242. TAR_ARGS = \
  243. --exclude=".appveyor*" \
  244. --exclude=".ci*" \
  245. --exclude=".clang*" \
  246. --exclude=".drone*" \
  247. --exclude=".editor*" \
  248. --exclude=".git*" \
  249. --exclude="*.kdev*" \
  250. --exclude=".travis*" \
  251. --exclude=".vscode*" \
  252. --exclude="carla/source/native-plugins/external/zynaddsubfx*" \
  253. --exclude="src/Rack/dep/osdialog/osdialog_*" \
  254. --exclude="src/Rack/icon.*" \
  255. --exclude=bin \
  256. --exclude=build \
  257. --exclude=jucewrapper \
  258. --exclude=lv2export \
  259. --exclude=carla/data \
  260. --exclude=carla/source/frontend \
  261. --exclude=carla/source/interposer \
  262. --exclude=carla/source/libjack \
  263. --exclude=carla/source/native-plugins/resources \
  264. --exclude=carla/source/rest \
  265. --exclude=carla/source/tests.old \
  266. --exclude=carla/source/theme \
  267. --exclude=carla/resources \
  268. --exclude=deps/PawPaw \
  269. --exclude=deps/sysroot \
  270. --exclude=deps/unzipfx \
  271. --exclude=docs/.generate-plugin-licenses.sh \
  272. --exclude=docs/MODDEVICES.md \
  273. --exclude=dpf/cmake \
  274. --exclude=dpf/examples \
  275. --exclude=dpf/lac \
  276. --exclude=dpf/tests \
  277. --exclude=plugins/.kdev_include_paths \
  278. --exclude=plugins/todo.txt \
  279. --exclude=plugins/AriaModules/res/Arcane \
  280. --exclude=plugins/AudibleInstruments/design \
  281. --exclude=plugins/BaconPlugs/res/midi/beeth \
  282. --exclude=plugins/BogaudioModules/res-pp \
  283. --exclude=plugins/BogaudioModules/res-src \
  284. --exclude=plugins/Cardinal/orig \
  285. --exclude=plugins/GrandeModular/res-src \
  286. --exclude=plugins/surgext/surge/libs/JUCE \
  287. --exclude=plugins/surgext/surge/resources/data/patches_3rdparty \
  288. --exclude=plugins/surgext/surge/resources/data/patches_factory \
  289. --exclude=plugins/surgext/surge/resources/data/wavetables_3rdparty \
  290. --exclude=src/Rack/adapters \
  291. --exclude=src/Rack/dep/filesystem/cmake \
  292. --exclude=src/Rack/dep/filesystem/examples \
  293. --exclude=src/Rack/dep/filesystem/test \
  294. --exclude=src/Rack/dep/glfw/CMake \
  295. --exclude=src/Rack/dep/glfw/deps \
  296. --exclude=src/Rack/dep/glfw/docs \
  297. --exclude=src/Rack/dep/glfw/examples \
  298. --exclude=src/Rack/dep/glfw/src \
  299. --exclude=src/Rack/dep/glfw/tests \
  300. --exclude=src/Rack/dep/nanosvg/example \
  301. --exclude=src/Rack/dep/nanovg \
  302. --exclude=src/Rack/dep/rtaudio \
  303. --exclude=src/Rack/include/audio.hpp \
  304. --exclude=src/Rack/include/midi.hpp \
  305. --exclude=src/Rack/include/engine/Port.hpp \
  306. --exclude=src/Rack/src/core \
  307. --exclude=src/Rack/src/asset.cpp \
  308. --exclude=src/Rack/src/audio.cpp \
  309. --exclude=src/Rack/src/common.cpp \
  310. --exclude=src/Rack/src/context.cpp \
  311. --exclude=src/Rack/src/dep.cpp \
  312. --exclude=src/Rack/src/discord.cpp \
  313. --exclude=src/Rack/src/gamepad.cpp \
  314. --exclude=src/Rack/src/keyboard.cpp \
  315. --exclude=src/Rack/src/library.cpp \
  316. --exclude=src/Rack/src/midi.cpp \
  317. --exclude=src/Rack/src/network.cpp \
  318. --exclude=src/Rack/src/plugin.cpp \
  319. --exclude=src/Rack/src/rtaudio.cpp \
  320. --exclude=src/Rack/src/rtmidi.cpp \
  321. --exclude=src/Rack/src/app/AudioDisplay.cpp \
  322. --exclude=src/Rack/src/app/MenuBar.cpp \
  323. --exclude=src/Rack/src/app/MidiDisplay.cpp \
  324. --exclude=src/Rack/src/app/ModuleWidget.cpp \
  325. --exclude=src/Rack/src/app/Scene.cpp \
  326. --exclude=src/Rack/src/app/TipWindow.cpp \
  327. --exclude=src/Rack/src/dsp/minblep.cpp \
  328. --exclude=src/Rack/src/engine/Engine.cpp \
  329. --exclude=src/Rack/src/plugin/Model.cpp \
  330. --exclude=src/Rack/src/widget/OpenGlWidget.cpp \
  331. --exclude=src/Rack/src/window/Window.cpp \
  332. --exclude=src/Rack/res/Core \
  333. --exclude=src/Rack/res/icon.png \
  334. --transform='s,^\.\.,-.-.,' \
  335. --transform='s,^\.,cardinal-$(VERSION),' \
  336. --transform='s,^-\.-\.,..,' \
  337. download:
  338. $(MAKE) download -C deps
  339. tarball:
  340. $(MAKE) clean -C deps
  341. rm -f ../cardinal-$(VERSION).tar.xz
  342. tar -c --lzma $(TAR_ARGS) -f ../cardinal-$(VERSION).tar.xz .
  343. tarball+deps: download
  344. rm -f ../cardinal+deps-$(VERSION).tar.xz
  345. tar -c --lzma $(TAR_ARGS) -f ../cardinal+deps-$(VERSION).tar.xz .
  346. version:
  347. @echo $(VERSION)
  348. # --------------------------------------------------------------
  349. .PHONY: carla deps plugins