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.

459 lines
13KB

  1. #!/usr/bin/make -f
  2. # Makefile for DISTRHO Plugins #
  3. # ---------------------------- #
  4. # Created by falkTX
  5. #
  6. # Must have NAME defined
  7. ifeq ($(NAME),Cardinal)
  8. CARDINAL_VARIANT = main
  9. else ifeq ($(NAME),CardinalFX)
  10. CARDINAL_VARIANT = fx
  11. else ifeq ($(NAME),CardinalNative)
  12. CARDINAL_VARIANT = native
  13. else ifeq ($(NAME),CardinalSynth)
  14. CARDINAL_VARIANT = synth
  15. endif
  16. # --------------------------------------------------------------
  17. # Carla stuff
  18. ifneq ($(STATIC_BUILD),true)
  19. STATIC_PLUGIN_TARGET = true
  20. CWD = ../../carla/source
  21. include $(CWD)/Makefile.deps.mk
  22. CARLA_BUILD_DIR = ../../carla/build
  23. ifeq ($(DEBUG),true)
  24. CARLA_BUILD_TYPE = Debug
  25. else
  26. CARLA_BUILD_TYPE = Release
  27. endif
  28. CARLA_EXTRA_LIBS = $(CARLA_BUILD_DIR)/plugin/$(CARLA_BUILD_TYPE)/carla-host-plugin.cpp.o
  29. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_engine_plugin.a
  30. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a
  31. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a
  32. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a
  33. ifneq ($(WASM),true)
  34. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a
  35. endif
  36. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a
  37. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a
  38. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a
  39. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/water.a
  40. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/ysfx.a
  41. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/zita-resampler.a
  42. endif # STATIC_BUILD
  43. # --------------------------------------------------------------
  44. # Import base definitions
  45. DISTRHO_NAMESPACE = CardinalDISTRHO
  46. DGL_NAMESPACE = CardinalDGL
  47. NVG_DISABLE_SKIPPING_WHITESPACE = true
  48. NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST
  49. USE_NANOVG_FBO = true
  50. WASM_EXCEPTIONS = true
  51. ifeq ($(CARDINAL_VARIANT),main)
  52. # main variant should not use rtaudio/sdl2 fallback (it has CV ports)
  53. SKIP_NATIVE_AUDIO_FALLBACK = true
  54. else
  55. # fx and synth variants should only use rtaudio/sdl2 fallbacks
  56. FORCE_NATIVE_AUDIO_FALLBACK = true
  57. endif
  58. include ../../dpf/Makefile.base.mk
  59. # --------------------------------------------------------------
  60. # Build config
  61. PREFIX ?= /usr/local
  62. ifeq ($(BSD),true)
  63. SYSDEPS ?= true
  64. else
  65. SYSDEPS ?= false
  66. endif
  67. ifeq ($(SYSDEPS),true)
  68. DEP_LIB_PATH = $(abspath ../../deps/sysroot/lib)
  69. else
  70. DEP_LIB_PATH = $(abspath ../Rack/dep/lib)
  71. endif
  72. # --------------------------------------------------------------
  73. # Files to build (DPF stuff)
  74. FILES_DSP = CardinalPlugin.cpp
  75. FILES_DSP += CardinalCommon.cpp
  76. FILES_DSP += common.cpp
  77. ifeq ($(HEADLESS),true)
  78. FILES_DSP += RemoteNanoVG.cpp
  79. FILES_DSP += RemoteWindow.cpp
  80. else
  81. FILES_UI = CardinalUI.cpp
  82. FILES_UI += glfw.cpp
  83. FILES_UI += Window.cpp
  84. endif
  85. ifeq ($(WINDOWS),true)
  86. FILES_UI += distrho.rc
  87. endif
  88. # --------------------------------------------------------------
  89. # Extra libraries to link against
  90. RACK_EXTRA_LIBS = ../../plugins/plugins.a
  91. RACK_EXTRA_LIBS += ../rack.a
  92. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libquickjs.a
  93. ifneq ($(SYSDEPS),true)
  94. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libjansson.a
  95. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libsamplerate.a
  96. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libspeexdsp.a
  97. ifeq ($(WINDOWS),true)
  98. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive_static.a
  99. else
  100. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive.a
  101. endif
  102. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libzstd.a
  103. endif
  104. # --------------------------------------------------------------
  105. # FIXME
  106. ifeq ($(WASM),true)
  107. ifneq ($(STATIC_BUILD),true)
  108. STATIC_CARLA_PLUGIN_LIBS = -lsndfile -lopus -lFLAC -lvorbisenc -lvorbis -logg -lm
  109. endif
  110. endif
  111. EXTRA_DEPENDENCIES = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS)
  112. EXTRA_LIBS = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS)
  113. ifeq ($(shell $(PKG_CONFIG) --exists fftw3f && echo true),true)
  114. EXTRA_DEPENDENCIES += ../../deps/aubio/libaubio.a
  115. EXTRA_LIBS += ../../deps/aubio/libaubio.a
  116. EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs fftw3f)
  117. endif
  118. # --------------------------------------------------------------
  119. # Setup resources
  120. CORE_RESOURCES = patches
  121. CORE_RESOURCES += $(subst ../Rack/res/,,$(wildcard ../Rack/res/ComponentLibrary/*.svg ../Rack/res/fonts/*.ttf))
  122. LV2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).lv2/resources/%)
  123. VST3_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).vst3/Contents/Resources/%)
  124. # Install modgui resources if MOD build
  125. ifeq ($(MOD_BUILD),true)
  126. LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/Plateau_Reverb.ttl
  127. LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui.ttl
  128. LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui/documentation.pdf
  129. LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui
  130. endif
  131. # Cardinal main variant is not available as VST2 due to lack of CV ports
  132. ifneq ($(CARDINAL_VARIANT),main)
  133. ifeq ($(MACOS),true)
  134. VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).vst/Contents/Resources/%)
  135. CLAP_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).clap/Contents/Resources/%)
  136. else
  137. VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/Cardinal.vst/resources/%)
  138. CLAP_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/Cardinal.clap/resources/%)
  139. endif
  140. endif
  141. ifeq ($(WASM),true)
  142. WASM_RESOURCES = $(LV2_RESOURCES)
  143. ifneq ($(STATIC_BUILD),true)
  144. WASM_RESOURCES += $(CURDIR)/lv2
  145. endif
  146. EXTRA_DEPENDENCIES += $(WASM_RESOURCES)
  147. endif
  148. # --------------------------------------------------------------
  149. # Do some magic
  150. USE_VST2_BUNDLE = true
  151. USE_CLAP_BUNDLE = true
  152. include ../../dpf/Makefile.plugins.mk
  153. # --------------------------------------------------------------
  154. # Extra flags for VCV stuff
  155. ifeq ($(MACOS),true)
  156. BASE_FLAGS += -DARCH_MAC
  157. else ifeq ($(WINDOWS),true)
  158. BASE_FLAGS += -DARCH_WIN
  159. else
  160. BASE_FLAGS += -DARCH_LIN
  161. endif
  162. BASE_FLAGS += -DPRIVATE=
  163. BASE_FLAGS += -I..
  164. BASE_FLAGS += -I../../dpf/dgl/src/nanovg
  165. BASE_FLAGS += -I../../include
  166. BASE_FLAGS += -I../../include/simd-compat
  167. BASE_FLAGS += -I../Rack/include
  168. ifeq ($(SYSDEPS),true)
  169. BASE_FLAGS += -DCARDINAL_SYSDEPS
  170. BASE_FLAGS += $(shell $(PKG_CONFIG) --cflags jansson libarchive samplerate speexdsp)
  171. else
  172. BASE_FLAGS += -DZSTDLIB_VISIBILITY=
  173. BASE_FLAGS += -I../Rack/dep/include
  174. endif
  175. BASE_FLAGS += -I../Rack/dep/glfw/include
  176. BASE_FLAGS += -I../Rack/dep/nanosvg/src
  177. BASE_FLAGS += -I../Rack/dep/oui-blendish
  178. ifeq ($(HEADLESS),true)
  179. BASE_FLAGS += -DHEADLESS
  180. endif
  181. ifeq ($(MOD_BUILD),true)
  182. BASE_FLAGS += -DDISTRHO_PLUGIN_USES_MODGUI=1 -DDISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE=0xffff
  183. endif
  184. ifneq ($(WASM),true)
  185. ifneq ($(HAIKU),true)
  186. BASE_FLAGS += -pthread
  187. endif
  188. endif
  189. ifeq ($(WINDOWS),true)
  190. BASE_FLAGS += -D_USE_MATH_DEFINES
  191. BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
  192. BASE_FLAGS += -I../../include/mingw-compat
  193. BASE_FLAGS += -I../../include/mingw-std-threads
  194. endif
  195. ifeq ($(USE_GLES2),true)
  196. BASE_FLAGS += -DNANOVG_GLES2_FORCED
  197. else ifeq ($(USE_GLES3),true)
  198. BASE_FLAGS += -DNANOVG_GLES3_FORCED
  199. endif
  200. BUILD_C_FLAGS += -std=gnu11
  201. BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  202. BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  203. ifneq ($(MACOS),true)
  204. BUILD_CXX_FLAGS += -faligned-new -Wno-abi
  205. endif
  206. # Rack code is not tested for this flag, unset it
  207. BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS
  208. # Ignore bad behaviour from Rack API
  209. BUILD_CXX_FLAGS += -Wno-format-security
  210. # --------------------------------------------------------------
  211. # FIXME lots of warnings from VCV side
  212. BASE_FLAGS += -Wno-unused-parameter
  213. BASE_FLAGS += -Wno-unused-variable
  214. # --------------------------------------------------------------
  215. # extra linker flags
  216. ifeq ($(WASM),true)
  217. ifneq ($(STATIC_BUILD),true)
  218. LINK_FLAGS += --use-preload-plugins
  219. LINK_FLAGS += --preload-file=./jsfx
  220. LINK_FLAGS += --preload-file=./lv2
  221. endif
  222. LINK_FLAGS += --preload-file=../../bin/CardinalNative.lv2/resources@/resources
  223. LINK_FLAGS += -sALLOW_MEMORY_GROWTH
  224. LINK_FLAGS += -sINITIAL_MEMORY=64Mb
  225. LINK_FLAGS += -sLZ4=1
  226. LINK_FLAGS += --shell-file=../emscripten/shell.html
  227. LINK_FLAGS += -O3
  228. else ifeq ($(HAIKU),true)
  229. LINK_FLAGS += -lpthread
  230. else
  231. LINK_FLAGS += -pthread
  232. endif
  233. ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true)
  234. ifneq ($(STATIC_BUILD),true)
  235. LINK_FLAGS += -ldl
  236. endif
  237. endif
  238. ifeq ($(BSD),true)
  239. ifeq ($(DEBUG),true)
  240. LINK_FLAGS += -lexecinfo
  241. endif
  242. endif
  243. ifeq ($(MACOS),true)
  244. LINK_FLAGS += -framework IOKit
  245. else ifeq ($(WINDOWS),true)
  246. # needed by VCVRack
  247. EXTRA_LIBS += -ldbghelp -lshlwapi -Wl,--stack,0x100000
  248. # needed by JW-Modules
  249. EXTRA_LIBS += -lws2_32 -lwinmm
  250. endif
  251. ifeq ($(SYSDEPS),true)
  252. EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs jansson libarchive samplerate speexdsp)
  253. endif
  254. ifeq ($(WITH_LTO),true)
  255. # false positive
  256. LINK_FLAGS += -Wno-alloc-size-larger-than
  257. ifneq ($(SYSDEPS),true)
  258. # triggered by jansson
  259. LINK_FLAGS += -Wno-stringop-overflow
  260. endif
  261. endif
  262. # --------------------------------------------------------------
  263. # optional liblo
  264. ifeq ($(HAVE_LIBLO),true)
  265. BASE_FLAGS += $(LIBLO_FLAGS)
  266. LINK_FLAGS += $(LIBLO_LIBS)
  267. endif
  268. # --------------------------------------------------------------
  269. # fallback path to resource files
  270. ifneq ($(CIBUILD),true)
  271. ifneq ($(SYSDEPS),true)
  272. ifeq ($(EXE_WRAPPER),wine)
  273. SOURCE_DIR = Z:$(subst /,\\,$(abspath $(CURDIR)/..))
  274. else
  275. SOURCE_DIR = $(abspath $(CURDIR)/..)
  276. endif
  277. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"'
  278. endif
  279. endif
  280. # --------------------------------------------------------------
  281. # install path prefix for resource files
  282. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"'
  283. # --------------------------------------------------------------
  284. # Enable all possible plugin types and setup resources
  285. ifeq ($(CARDINAL_VARIANT),main)
  286. TARGETS = lv2 vst3
  287. ifeq ($(HAVE_JACK),true)
  288. TARGETS += jack
  289. endif
  290. else ifeq ($(CARDINAL_VARIANT),native)
  291. TARGETS = jack
  292. else
  293. TARGETS = lv2 vst2 vst3 clap static
  294. endif
  295. all: $(TARGETS)
  296. lv2: $(LV2_RESOURCES)
  297. vst2: $(VST2_RESOURCES)
  298. vst3: $(VST3_RESOURCES)
  299. clap: $(CLAP_RESOURCES)
  300. # --------------------------------------------------------------
  301. # Extra rules for macOS app bundle
  302. $(TARGET_DIR)/Cardinal.app/Contents/Info.plist: ../../utils/macOS/Info_JACK.plist $(TARGET_DIR)/Cardinal.app/Contents/Resources/distrho.icns
  303. -@mkdir -p $(shell dirname $@)
  304. cp $< $@
  305. $(TARGET_DIR)/CardinalNative.app/Contents/Info.plist: ../../utils/macOS/Info_Native.plist $(TARGET_DIR)/CardinalNative.app/Contents/Resources/distrho.icns
  306. -@mkdir -p $(shell dirname $@)
  307. cp $< $@
  308. $(TARGET_DIR)/%.app/Contents/Resources/distrho.icns: ../../utils/distrho.icns
  309. -@mkdir -p $(shell dirname $@)
  310. cp $< $@
  311. # --------------------------------------------------------------
  312. # Extra rules for wasm resources
  313. ifeq ($(WASM),true)
  314. $(CURDIR)/lv2: $(LV2_RESOURCES)
  315. wget -O - https://falktx.com/data/wasm-things-2022-08-15.tar.gz | tar xz -C $(CURDIR)
  316. endif
  317. # --------------------------------------------------------------
  318. # Extra rules for Windows icon
  319. ifeq ($(WINDOWS),true)
  320. JACK_LIBS += -Wl,-subsystem,windows
  321. $(BUILD_DIR)/distrho.rc.o: ../../utils/distrho.rc ../../utils/distrho.ico
  322. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  323. @echo "Compiling distrho.rc"
  324. $(SILENT)$(WINDRES) $< -O coff -o $@
  325. endif
  326. # --------------------------------------------------------------
  327. $(TARGET_DIR)/%/patches: ../../patches
  328. -@mkdir -p "$(shell dirname $@)"
  329. ifeq ($(WASM),true)
  330. cp -rL $< $@
  331. else
  332. $(SILENT)ln -sf $(abspath $<) $@
  333. endif
  334. $(TARGET_DIR)/$(NAME).lv2/resources/%: ../Rack/res/%
  335. -@mkdir -p "$(shell dirname $@)"
  336. $(SILENT)ln -sf $(abspath $<) $@
  337. ifeq ($(MOD_BUILD),true)
  338. $(TARGET_DIR)/$(NAME).lv2/resources/%.svg: ../Rack/res/%.svg ../../deps/svg2stub.py
  339. -@mkdir -p "$(shell dirname $@)"
  340. $(SILENT)python3 ../../deps/svg2stub.py $< $@
  341. $(TARGET_DIR)/$(NAME).lv2/mod%: ../MOD/$(NAME).lv2/mod%
  342. -@mkdir -p "$(shell dirname $@)"
  343. $(SILENT)ln -sf $(abspath $<) $@
  344. $(TARGET_DIR)/$(NAME).lv2/%.ttl: ../MOD/$(NAME).lv2/%.ttl
  345. -@mkdir -p "$(shell dirname $@)"
  346. $(SILENT)ln -sf $(abspath $<) $@
  347. $(TARGET_DIR)/$(NAME).lv2/modgui/documentation.pdf: ../../docs/MODDEVICES.md $(TARGET_DIR)/$(NAME).lv2/modgui
  348. (cd ../../docs/ && pandoc MODDEVICES.md -f markdown+implicit_figures -o $(abspath $@))
  349. endif
  350. $(TARGET_DIR)/Cardinal.vst/resources/%: ../Rack/res/%
  351. -@mkdir -p "$(shell dirname $@)"
  352. $(SILENT)ln -sf $(abspath $<) $@
  353. $(TARGET_DIR)/Cardinal.clap/resources/%: ../Rack/res/%
  354. -@mkdir -p "$(shell dirname $@)"
  355. $(SILENT)ln -sf $(abspath $<) $@
  356. $(TARGET_DIR)/$(NAME).vst/Contents/Resources/%: ../Rack/res/%
  357. -@mkdir -p "$(shell dirname $@)"
  358. $(SILENT)ln -sf $(abspath $<) $@
  359. $(TARGET_DIR)/$(NAME).vst3/Contents/Resources/%: ../Rack/res/%
  360. -@mkdir -p "$(shell dirname $@)"
  361. $(SILENT)ln -sf $(abspath $<) $@
  362. $(TARGET_DIR)/$(NAME).clap/Contents/Resources/%: ../Rack/res/%
  363. -@mkdir -p "$(shell dirname $@)"
  364. $(SILENT)ln -sf $(abspath $<) $@
  365. # --------------------------------------------------------------