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.

361 lines
9.8KB

  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. ifneq ($(DEBUG),true)
  18. EXTERNAL_PLUGINS = true
  19. endif
  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. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a
  34. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a
  35. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a
  36. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a
  37. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/water.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. USE_NANOVG_FBO = true
  43. include ../../dpf/Makefile.base.mk
  44. # --------------------------------------------------------------
  45. # Build config
  46. PREFIX ?= /usr/local
  47. ifeq ($(BSD),true)
  48. SYSDEPS ?= true
  49. else
  50. SYSDEPS ?= false
  51. endif
  52. ifeq ($(SYSDEPS),true)
  53. DEP_LIB_PATH = $(abspath ../../deps/sysroot/lib)
  54. else
  55. DEP_LIB_PATH = $(abspath ../Rack/dep/lib)
  56. endif
  57. # --------------------------------------------------------------
  58. # Files to build (DPF stuff)
  59. FILES_DSP = CardinalPlugin.cpp
  60. FILES_DSP += CardinalCommon.cpp
  61. FILES_DSP += common.cpp
  62. ifeq ($(HEADLESS),true)
  63. FILES_DSP += RemoteNanoVG.cpp
  64. FILES_DSP += RemoteWindow.cpp
  65. else
  66. FILES_UI = CardinalUI.cpp
  67. FILES_UI += Window.cpp
  68. endif
  69. ifeq ($(WINDOWS),true)
  70. FILES_UI += distrho.rc
  71. endif
  72. # --------------------------------------------------------------
  73. # Extra libraries to link against
  74. RACK_EXTRA_LIBS = ../../plugins/plugins.a
  75. RACK_EXTRA_LIBS += ../rack.a
  76. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libquickjs.a
  77. ifneq ($(SYSDEPS),true)
  78. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libjansson.a
  79. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libsamplerate.a
  80. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libspeexdsp.a
  81. ifeq ($(WINDOWS),true)
  82. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive_static.a
  83. else
  84. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive.a
  85. endif
  86. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libzstd.a
  87. endif
  88. # --------------------------------------------------------------
  89. EXTRA_DEPENDENCIES = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS)
  90. EXTRA_LIBS = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS)
  91. # --------------------------------------------------------------
  92. # Do some magic
  93. NVG_DISABLE_SKIPPING_WHITESPACE = true
  94. NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST
  95. USE_NANOVG_FBO = true
  96. USE_VST2_BUNDLE = true
  97. include ../../dpf/Makefile.plugins.mk
  98. # --------------------------------------------------------------
  99. # Extra flags for VCV stuff
  100. ifeq ($(MACOS),true)
  101. BASE_FLAGS += -DARCH_MAC
  102. else ifeq ($(WINDOWS),true)
  103. BASE_FLAGS += -DARCH_WIN
  104. else
  105. BASE_FLAGS += -DARCH_LIN
  106. endif
  107. BASE_FLAGS += -DPRIVATE=
  108. BASE_FLAGS += -I..
  109. BASE_FLAGS += -I../../dpf/dgl/src/nanovg
  110. BASE_FLAGS += -I../../include
  111. BASE_FLAGS += -I../../include/neon-compat
  112. BASE_FLAGS += -I../Rack/include
  113. ifeq ($(SYSDEPS),true)
  114. BASE_FLAGS += -DCARDINAL_SYSDEPS
  115. BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp)
  116. else
  117. BASE_FLAGS += -DZSTDLIB_VISIBILITY=
  118. BASE_FLAGS += -I../Rack/dep/include
  119. endif
  120. BASE_FLAGS += -I../Rack/dep/glfw/include
  121. BASE_FLAGS += -I../Rack/dep/nanosvg/src
  122. BASE_FLAGS += -I../Rack/dep/oui-blendish
  123. ifeq ($(HEADLESS),true)
  124. BASE_FLAGS += -DHEADLESS
  125. endif
  126. ifeq ($(MOD_BUILD),true)
  127. BASE_FLAGS += -DDISTRHO_PLUGIN_USES_MODGUI=1 -DDISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE=0xffff
  128. endif
  129. ifeq ($(WASM),true)
  130. BASE_FLAGS += -DNANOVG_GLES2=1
  131. BASE_FLAGS += -msse -msse2 -msse3 -msimd128
  132. else ifneq ($(HAIKU),true)
  133. BASE_FLAGS += -pthread
  134. endif
  135. ifeq ($(WINDOWS),true)
  136. BASE_FLAGS += -D_USE_MATH_DEFINES
  137. BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
  138. BASE_FLAGS += -I../../include/mingw-compat
  139. BASE_FLAGS += -I../../include/mingw-std-threads
  140. endif
  141. BUILD_C_FLAGS += -std=gnu11
  142. BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  143. BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing -faligned-new
  144. # Rack code is not tested for this flag, unset it
  145. BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS
  146. # --------------------------------------------------------------
  147. # FIXME lots of warnings from VCV side
  148. BASE_FLAGS += -Wno-unused-parameter
  149. BASE_FLAGS += -Wno-unused-variable
  150. # --------------------------------------------------------------
  151. # extra linker flags
  152. ifeq ($(HAIKU),true)
  153. LINK_FLAGS += -lpthread
  154. else
  155. LINK_FLAGS += -pthread
  156. endif
  157. ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true)
  158. ifneq ($(STATIC_BUILD),true)
  159. LINK_FLAGS += -ldl
  160. endif
  161. endif
  162. ifeq ($(BSD),true)
  163. ifeq ($(DEBUG),true)
  164. LINK_FLAGS += -lexecinfo
  165. endif
  166. endif
  167. ifeq ($(MACOS),true)
  168. LINK_FLAGS += -framework IOKit
  169. else ifeq ($(WINDOWS),true)
  170. # needed by VCVRack
  171. EXTRA_LIBS += -ldbghelp -lshlwapi -Wl,--stack,0x100000
  172. # needed by JW-Modules
  173. EXTRA_LIBS += -lws2_32 -lwinmm
  174. endif
  175. ifeq ($(SYSDEPS),true)
  176. EXTRA_LIBS += $(shell pkg-config --libs jansson libarchive samplerate speexdsp)
  177. endif
  178. ifeq ($(WITH_LTO),true)
  179. # false positive
  180. LINK_FLAGS += -Wno-alloc-size-larger-than
  181. ifneq ($(SYSDEPS),true)
  182. # triggered by jansson
  183. LINK_FLAGS += -Wno-stringop-overflow
  184. endif
  185. endif
  186. # --------------------------------------------------------------
  187. # optional liblo
  188. ifeq ($(HAVE_LIBLO),true)
  189. BASE_FLAGS += $(LIBLO_FLAGS)
  190. LINK_FLAGS += $(LIBLO_LIBS)
  191. endif
  192. # --------------------------------------------------------------
  193. # fallback path to resource files
  194. ifneq ($(CIBUILD),true)
  195. ifneq ($(SYSDEPS),true)
  196. ifeq ($(EXE_WRAPPER),wine)
  197. SOURCE_DIR = Z:$(subst /,\\,$(abspath $(CURDIR)/..))
  198. else
  199. SOURCE_DIR = $(abspath $(CURDIR)/..)
  200. endif
  201. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"'
  202. endif
  203. endif
  204. # --------------------------------------------------------------
  205. # install path prefix for resource files
  206. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"'
  207. # --------------------------------------------------------------
  208. # Enable all possible plugin types and setup resources
  209. ifeq ($(CARDINAL_VARIANT),main)
  210. ifneq ($(STATIC_BUILD),true)
  211. all: jack lv2 vst3
  212. else
  213. all: lv2 vst3
  214. endif # STATIC_BUILD
  215. else
  216. all: lv2 vst2 vst3 static
  217. endif
  218. CORE_RESOURCES = $(subst ../Rack/res/,,$(wildcard ../Rack/res/ComponentLibrary/*.svg ../Rack/res/fonts/*.ttf))
  219. CORE_RESOURCES += $(subst ../,,$(wildcard ../template*.vcv))
  220. LV2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).lv2/resources/%)
  221. VST3_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).vst3/Contents/Resources/%)
  222. # Install modgui resources if MOD build
  223. ifeq ($(MOD_BUILD),true)
  224. LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui.ttl
  225. LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui/documentation.pdf
  226. LV2_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/modgui
  227. endif
  228. # Cardinal main variant should not use rtaudio fallback (it has CV ports)
  229. ifeq ($(CARDINAL_VARIANT),main)
  230. jack: BUILD_CXX_FLAGS += -DDPF_JACK_STANDALONE_SKIP_RTAUDIO_FALLBACK
  231. endif
  232. # Cardinal main variant is not available as VST2 due to lack of CV ports
  233. ifneq ($(CARDINAL_VARIANT),main)
  234. ifeq ($(MACOS),true)
  235. VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/$(NAME).vst/Contents/Resources/%)
  236. else
  237. VST2_RESOURCES = $(CORE_RESOURCES:%=$(TARGET_DIR)/Cardinal.vst/resources/%)
  238. endif
  239. endif
  240. lv2: $(LV2_RESOURCES)
  241. vst2: $(VST2_RESOURCES)
  242. vst3: $(VST3_RESOURCES)
  243. # --------------------------------------------------------------
  244. # Extra rules for Windows icon
  245. ifeq ($(WINDOWS),true)
  246. JACK_LIBS += -Wl,-subsystem,windows
  247. $(BUILD_DIR)/distrho.rc.o: ../../utils/distrho.rc ../../utils/distrho.ico
  248. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  249. @echo "Compiling distrho.rc"
  250. $(SILENT)$(WINDRES) $< -O coff -o $@
  251. endif
  252. # --------------------------------------------------------------
  253. $(TARGET_DIR)/%/template.vcv: ../template.vcv
  254. -@mkdir -p "$(shell dirname $@)"
  255. $(SILENT)ln -sf $(abspath $<) $@
  256. $(TARGET_DIR)/%/template-fx.vcv: ../template-fx.vcv
  257. -@mkdir -p "$(shell dirname $@)"
  258. $(SILENT)ln -sf $(abspath $<) $@
  259. $(TARGET_DIR)/%/template-synth.vcv: ../template-synth.vcv
  260. -@mkdir -p "$(shell dirname $@)"
  261. $(SILENT)ln -sf $(abspath $<) $@
  262. $(TARGET_DIR)/$(NAME).lv2/resources/%: ../Rack/res/%
  263. -@mkdir -p "$(shell dirname $@)"
  264. $(SILENT)ln -sf $(abspath $<) $@
  265. ifeq ($(MOD_BUILD),true)
  266. $(TARGET_DIR)/$(NAME).lv2/resources/%.svg: ../Rack/res/%.svg ../../deps/svg2stub.py
  267. -@mkdir -p "$(shell dirname $@)"
  268. $(SILENT)python3 ../../deps/svg2stub.py $< $@
  269. $(TARGET_DIR)/$(NAME).lv2/mod%: ../MOD/$(NAME).lv2/mod%
  270. -@mkdir -p "$(shell dirname $@)"
  271. $(SILENT)ln -sf $(abspath $<) $@
  272. $(TARGET_DIR)/$(NAME).lv2/modgui/documentation.pdf: ../../docs/MODDEVICES.md $(TARGET_DIR)/$(NAME).lv2/modgui
  273. (cd ../../docs/ && pandoc MODDEVICES.md -f markdown+implicit_figures -o $(abspath $@))
  274. endif
  275. $(TARGET_DIR)/Cardinal.vst/resources/%: ../Rack/res/%
  276. -@mkdir -p "$(shell dirname $@)"
  277. $(SILENT)ln -sf $(abspath $<) $@
  278. $(TARGET_DIR)/$(NAME).vst/Contents/Resources/%: ../Rack/res/%
  279. -@mkdir -p "$(shell dirname $@)"
  280. $(SILENT)ln -sf $(abspath $<) $@
  281. $(TARGET_DIR)/$(NAME).vst3/Contents/Resources/%: ../Rack/res/%
  282. -@mkdir -p "$(shell dirname $@)"
  283. $(SILENT)ln -sf $(abspath $<) $@
  284. # --------------------------------------------------------------