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.

333 lines
9.1KB

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