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.

292 lines
7.8KB

  1. #!/usr/bin/make -f
  2. # Makefile for DISTRHO Plugins #
  3. # ---------------------------- #
  4. # Created by falkTX
  5. #
  6. # Must have NAME defined
  7. # --------------------------------------------------------------
  8. # Build config
  9. PREFIX ?= /usr/local
  10. DESTDIR ?=
  11. SYSDEPS ?= false
  12. # --------------------------------------------------------------
  13. # Carla stuff
  14. ifneq ($(STATIC_BUILD),true)
  15. ifneq ($(DEBUG),true)
  16. EXTERNAL_PLUGINS = true
  17. endif
  18. CWD = ../../carla/source
  19. include $(CWD)/Makefile.deps.mk
  20. CARLA_BUILD_DIR = ../../carla/build
  21. ifeq ($(DEBUG),true)
  22. CARLA_BUILD_TYPE = Debug
  23. else
  24. CARLA_BUILD_TYPE = Release
  25. endif
  26. CARLA_EXTRA_LIBS = $(CARLA_BUILD_DIR)/plugin/$(CARLA_BUILD_TYPE)/carla-host-plugin.cpp.o
  27. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_engine_plugin.a
  28. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a
  29. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a
  30. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a
  31. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a
  32. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a
  33. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a
  34. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a
  35. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/water.a
  36. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/zita-resampler.a
  37. endif # STATIC_BUILD
  38. # --------------------------------------------------------------
  39. # Import base definitions
  40. include ../../dpf/Makefile.base.mk
  41. # --------------------------------------------------------------
  42. # Files to build (DPF stuff)
  43. FILES_DSP = CardinalPlugin.cpp
  44. FILES_DSP += CardinalCommon.cpp
  45. FILES_DSP += common.cpp
  46. ifeq ($(HEADLESS),true)
  47. FILES_DSP += RemoteNanoVG.cpp
  48. FILES_DSP += RemoteWindow.cpp
  49. else
  50. FILES_UI = CardinalUI.cpp
  51. FILES_UI += Window.cpp
  52. endif
  53. # --------------------------------------------------------------
  54. # Extra libraries to link against
  55. RACK_EXTRA_LIBS = ../../plugins/plugins.a
  56. RACK_EXTRA_LIBS += ../rack.a
  57. RACK_EXTRA_LIBS += ../Rack/dep/lib/libquickjs.a
  58. ifneq ($(SYSDEPS),true)
  59. RACK_EXTRA_LIBS += ../Rack/dep/lib/libjansson.a
  60. RACK_EXTRA_LIBS += ../Rack/dep/lib/libsamplerate.a
  61. RACK_EXTRA_LIBS += ../Rack/dep/lib/libspeexdsp.a
  62. ifeq ($(WINDOWS),true)
  63. RACK_EXTRA_LIBS += ../Rack/dep/lib/libarchive_static.a
  64. else
  65. RACK_EXTRA_LIBS += ../Rack/dep/lib/libarchive.a
  66. endif
  67. RACK_EXTRA_LIBS += ../Rack/dep/lib/libzstd.a
  68. endif
  69. # --------------------------------------------------------------
  70. EXTRA_DEPENDENCIES = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS)
  71. EXTRA_LIBS = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS)
  72. # --------------------------------------------------------------
  73. # Do some magic
  74. NVG_DISABLE_SKIPPING_WHITESPACE = true
  75. NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST
  76. USE_NANOVG_FBO = true
  77. USE_VST2_BUNDLE = true
  78. include ../../dpf/Makefile.plugins.mk
  79. # --------------------------------------------------------------
  80. # Extra flags for VCV stuff
  81. ifeq ($(MACOS),true)
  82. BASE_FLAGS += -DARCH_MAC
  83. else ifeq ($(WINDOWS),true)
  84. BASE_FLAGS += -DARCH_WIN
  85. else
  86. BASE_FLAGS += -DARCH_LIN
  87. endif
  88. BASE_FLAGS += -DPRIVATE=
  89. BASE_FLAGS += -I..
  90. BASE_FLAGS += -I../../dpf/dgl/src/nanovg
  91. BASE_FLAGS += -I../../include
  92. BASE_FLAGS += -I../../include/neon-compat
  93. BASE_FLAGS += -I../Rack/include
  94. ifeq ($(SYSDEPS),true)
  95. BASE_FLAGS += -DCARDINAL_SYSDEPS
  96. BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp)
  97. else
  98. BASE_FLAGS += -DZSTDLIB_VISIBILITY=
  99. BASE_FLAGS += -I../Rack/dep/include
  100. endif
  101. BASE_FLAGS += -I../Rack/dep/glfw/include
  102. BASE_FLAGS += -I../Rack/dep/nanosvg/src
  103. BASE_FLAGS += -I../Rack/dep/oui-blendish
  104. BASE_FLAGS += -pthread
  105. ifeq ($(HEADLESS),true)
  106. BASE_FLAGS += -DHEADLESS
  107. ifeq ($(WITH_LTO),true)
  108. BASE_FLAGS += -ffat-lto-objects
  109. endif
  110. endif
  111. ifeq ($(WASM),true)
  112. BASE_FLAGS += -DNANOVG_GLES2=1
  113. BASE_FLAGS += -msse -msse2 -msse3 -msimd128
  114. else
  115. BASE_FLAGS += -pthread
  116. endif
  117. ifeq ($(WINDOWS),true)
  118. BASE_FLAGS += -D_USE_MATH_DEFINES
  119. BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
  120. BASE_FLAGS += -I../../include/mingw-compat
  121. BASE_FLAGS += -I../../include/mingw-std-threads
  122. endif
  123. BUILD_C_FLAGS += -std=gnu11
  124. BUILD_C_FLAGS += -fno-finite-math-only
  125. BUILD_CXX_FLAGS += -fno-finite-math-only
  126. # --------------------------------------------------------------
  127. # FIXME lots of warnings from VCV side
  128. BASE_FLAGS += -Wno-unused-parameter
  129. BASE_FLAGS += -Wno-unused-variable
  130. # --------------------------------------------------------------
  131. # extra linker flags
  132. LINK_FLAGS += -pthread
  133. ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true)
  134. ifneq ($(STATIC_BUILD),true)
  135. LINK_FLAGS += -ldl
  136. endif
  137. endif
  138. ifeq ($(MACOS),true)
  139. LINK_FLAGS += -framework IOKit
  140. else ifeq ($(WINDOWS),true)
  141. # needed by VCVRack
  142. EXTRA_LIBS += -ldbghelp -lshlwapi
  143. # needed by JW-Modules
  144. EXTRA_LIBS += -lws2_32 -lwinmm
  145. endif
  146. ifeq ($(SYSDEPS),true)
  147. EXTRA_LIBS += $(shell pkg-config --libs jansson libarchive samplerate speexdsp)
  148. endif
  149. ifeq ($(WITH_LTO),true)
  150. # false positive
  151. LINK_FLAGS += -Wno-alloc-size-larger-than
  152. ifneq ($(SYSDEPS),true)
  153. # triggered by jansson
  154. LINK_FLAGS += -Wno-stringop-overflow
  155. endif
  156. endif
  157. # --------------------------------------------------------------
  158. # optional liblo
  159. ifeq ($(HAVE_LIBLO),true)
  160. BASE_FLAGS += $(LIBLO_FLAGS)
  161. LINK_FLAGS += $(LIBLO_LIBS)
  162. endif
  163. # --------------------------------------------------------------
  164. # fallback path to resource files
  165. ifeq ($(EXE_WRAPPER),wine)
  166. SOURCE_DIR = Z:$(subst /,\\,$(abspath $(CURDIR)/..))
  167. else
  168. SOURCE_DIR = $(abspath $(CURDIR)/..)
  169. endif
  170. ifneq ($(SYSDEPS),true)
  171. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"'
  172. endif
  173. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"'
  174. # --------------------------------------------------------------
  175. # Enable all possible plugin types and setup resources
  176. ifeq ($(NAME),CardinalFX)
  177. all: lv2 vst2 vst3 resources
  178. CORE_RESOURCES = $(filter-out icon.png,$(subst ../Rack/res/,,$(wildcard ../Rack/res/*))) template.vcv
  179. PLUGIN_RESOURCES += $(CORE_RESOURCES:%=$(TARGET_DIR)/CardinalFX.lv2/resources/%)
  180. ifeq ($(MACOS),true)
  181. PLUGIN_RESOURCES += $(CORE_RESOURCES:%=$(TARGET_DIR)/CardinalFX.vst/Contents/Resources/%)
  182. else
  183. PLUGIN_RESOURCES += $(CORE_RESOURCES:%=$(TARGET_DIR)/CardinalFX.vst/resources/%)
  184. endif
  185. PLUGIN_RESOURCES += $(CORE_RESOURCES:%=$(TARGET_DIR)/CardinalFX.vst3/Contents/Resources/%)
  186. else # CardinalFX
  187. ifeq ($(NAME),Cardinal)
  188. all: jack lv2 vst3 resources
  189. else
  190. all: lv2 vst2 vst3 resources
  191. endif
  192. PLUGIN_RESOURCES += $(TARGET_DIR)/$(NAME).lv2/resources
  193. PLUGIN_RESOURCES += $(TARGET_DIR)/$(NAME).vst3/Contents/Resources
  194. # Cardinal (full) is not available as VST2 due to lack of CV ports
  195. ifneq ($(NAME),Cardinal)
  196. ifeq ($(MACOS),true)
  197. PLUGIN_RESOURCES += $(TARGET_DIR)/$(NAME).vst/Contents/Resources
  198. else
  199. PLUGIN_RESOURCES += $(TARGET_DIR)/$(NAME).vst/resources
  200. endif
  201. endif
  202. endif # CardinalFX
  203. # --------------------------------------------------------------
  204. resources: $(PLUGIN_RESOURCES)
  205. ifneq ($(NAME),CardinalFX)
  206. lv2: resources
  207. vst2: resources
  208. vst3: resources
  209. $(TARGET_DIR)/$(NAME).%: $(TARGET_DIR)/CardinalFX.%
  210. -@mkdir -p "$(shell dirname $@)"
  211. $(SILENT)ln -sf $(abspath $<) $@
  212. endif
  213. $(TARGET_DIR)/CardinalFX.%/template.vcv: ../template.vcv
  214. -@mkdir -p "$(shell dirname $@)"
  215. $(SILENT)ln -sf $(abspath $<) $@
  216. $(TARGET_DIR)/CardinalFX.lv2/resources/%: ../Rack/res/%
  217. -@mkdir -p "$(shell dirname $@)"
  218. $(SILENT)ln -sf $(abspath $<) $@
  219. $(TARGET_DIR)/CardinalFX.vst/resources/%: ../Rack/res/%
  220. -@mkdir -p "$(shell dirname $@)"
  221. $(SILENT)ln -sf $(abspath $<) $@
  222. $(TARGET_DIR)/CardinalFX.vst/Contents/Resources/%: ../Rack/res/%
  223. -@mkdir -p "$(shell dirname $@)"
  224. $(SILENT)ln -sf $(abspath $<) $@
  225. $(TARGET_DIR)/CardinalFX.vst3/Contents/Resources/%: ../Rack/res/%
  226. -@mkdir -p "$(shell dirname $@)"
  227. $(SILENT)ln -sf $(abspath $<) $@
  228. # --------------------------------------------------------------