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.

420 lines
12KB

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