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.

403 lines
12KB

  1. #!/usr/bin/make -f
  2. # Makefile for DISTRHO Plugins #
  3. # ---------------------------- #
  4. # Created by falkTX
  5. #
  6. # --------------------------------------------------------------
  7. # Carla stuff
  8. ifneq ($(STATIC_BUILD),true)
  9. STATIC_PLUGIN_TARGET = true
  10. CWD = ../../carla/source
  11. include $(CWD)/Makefile.deps.mk
  12. CARLA_BUILD_DIR = ../../carla/build
  13. ifeq ($(DEBUG),true)
  14. CARLA_BUILD_TYPE = Debug
  15. else
  16. CARLA_BUILD_TYPE = Release
  17. endif
  18. CARLA_EXTRA_LIBS = $(CARLA_BUILD_DIR)/plugin/$(CARLA_BUILD_TYPE)/carla-host-plugin.cpp.o
  19. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_engine_plugin.a
  20. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/carla_plugin.a
  21. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/native-plugins.a
  22. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/audio_decoder.a
  23. ifneq ($(WASM),true)
  24. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/jackbridge.min.a
  25. endif
  26. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/lilv.a
  27. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/rtmempool.a
  28. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/sfzero.a
  29. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/water.a
  30. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/ysfx.a
  31. CARLA_EXTRA_LIBS += $(CARLA_BUILD_DIR)/modules/$(CARLA_BUILD_TYPE)/zita-resampler.a
  32. endif # STATIC_BUILD
  33. # --------------------------------------------------------------
  34. # Import base definitions
  35. DISTRHO_NAMESPACE = CardinalDISTRHO
  36. DGL_NAMESPACE = CardinalDGL
  37. NVG_DISABLE_SKIPPING_WHITESPACE = true
  38. NVG_FONT_TEXTURE_FLAGS = NVG_IMAGE_NEAREST
  39. USE_NANOVG_FBO = true
  40. WASM_EXCEPTIONS = true
  41. include ../../dpf/Makefile.base.mk
  42. # --------------------------------------------------------------
  43. # Build config
  44. PREFIX ?= /usr/local
  45. ifeq ($(BSD),true)
  46. SYSDEPS ?= true
  47. else
  48. SYSDEPS ?= false
  49. endif
  50. ifeq ($(SYSDEPS),true)
  51. DEP_LIB_PATH = $(abspath ../../deps/sysroot/lib)
  52. else
  53. DEP_LIB_PATH = $(abspath ../Rack/dep/lib)
  54. endif
  55. # --------------------------------------------------------------
  56. # Extra libraries to link against
  57. ifeq ($(NOPLUGINS),true)
  58. RACK_EXTRA_LIBS = ../../plugins/noplugins.a
  59. else
  60. RACK_EXTRA_LIBS = ../../plugins/plugins.a
  61. endif
  62. RACK_EXTRA_LIBS += ../rack.a
  63. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libquickjs.a
  64. ifneq ($(SYSDEPS),true)
  65. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libjansson.a
  66. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libsamplerate.a
  67. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libspeexdsp.a
  68. ifeq ($(WINDOWS),true)
  69. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive_static.a
  70. else
  71. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libarchive.a
  72. endif
  73. RACK_EXTRA_LIBS += $(DEP_LIB_PATH)/libzstd.a
  74. endif
  75. # --------------------------------------------------------------
  76. # surgext libraries
  77. ifneq ($(NOPLUGINS),true)
  78. SURGE_DEP_PATH = $(abspath ../../deps/surge-build)
  79. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/src/common/libsurge-common.a
  80. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/src/common/libjuce_dsp_rack_sub.a
  81. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/airwindows/libairwindows.a
  82. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/eurorack/libeurorack.a
  83. ifeq ($(DEBUG),true)
  84. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/fmt/libfmtd.a
  85. else
  86. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/fmt/libfmt.a
  87. endif
  88. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/sqlite-3.23.3/libsqlite.a
  89. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/sst/sst-plugininfra/libsst-plugininfra.a
  90. ifneq ($(WINDOWS),true)
  91. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/sst/sst-plugininfra/libs/filesystem/libfilesystem.a
  92. endif
  93. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/sst/sst-plugininfra/libs/strnatcmp/libstrnatcmp.a
  94. RACK_EXTRA_LIBS += $(SURGE_DEP_PATH)/libs/sst/sst-plugininfra/libs/tinyxml/libtinyxml.a
  95. endif
  96. # --------------------------------------------------------------
  97. # FIXME
  98. ifeq ($(CIBUILD)$(WASM),truetrue)
  99. ifneq ($(STATIC_BUILD),true)
  100. STATIC_CARLA_PLUGIN_LIBS = -lsndfile -lopus -lFLAC -lvorbisenc -lvorbis -logg -lm
  101. endif
  102. endif
  103. EXTRA_DEPENDENCIES = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS)
  104. EXTRA_LIBS = $(RACK_EXTRA_LIBS) $(CARLA_EXTRA_LIBS) $(STATIC_CARLA_PLUGIN_LIBS)
  105. ifeq ($(shell $(PKG_CONFIG) --exists fftw3f && echo true),true)
  106. EXTRA_DEPENDENCIES += ../../deps/aubio/libaubio.a
  107. EXTRA_LIBS += ../../deps/aubio/libaubio.a
  108. EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs fftw3f)
  109. endif
  110. ifneq ($(NOPLUGINS),true)
  111. ifeq ($(MACOS),true)
  112. EXTRA_LIBS += -framework Accelerate
  113. endif
  114. endif
  115. # --------------------------------------------------------------
  116. # Extra flags for VCV stuff
  117. ifeq ($(MACOS),true)
  118. BASE_FLAGS += -DARCH_MAC
  119. else ifeq ($(WINDOWS),true)
  120. BASE_FLAGS += -DARCH_WIN
  121. else
  122. BASE_FLAGS += -DARCH_LIN
  123. endif
  124. BASE_FLAGS += -DPRIVATE=
  125. BASE_FLAGS += -I..
  126. BASE_FLAGS += -I../../dpf/dgl/src/nanovg
  127. BASE_FLAGS += -I../../include
  128. BASE_FLAGS += -I../../include/simd-compat
  129. BASE_FLAGS += -I../Rack/include
  130. ifeq ($(SYSDEPS),true)
  131. BASE_FLAGS += -DCARDINAL_SYSDEPS
  132. BASE_FLAGS += $(shell $(PKG_CONFIG) --cflags jansson libarchive samplerate speexdsp)
  133. else
  134. BASE_FLAGS += -DZSTDLIB_VISIBILITY=
  135. BASE_FLAGS += -I../Rack/dep/include
  136. endif
  137. BASE_FLAGS += -I../Rack/dep/glfw/include
  138. BASE_FLAGS += -I../Rack/dep/nanosvg/src
  139. BASE_FLAGS += -I../Rack/dep/oui-blendish
  140. ifeq ($(HEADLESS),true)
  141. BASE_FLAGS += -DHEADLESS
  142. endif
  143. ifeq ($(MOD_BUILD),true)
  144. BASE_FLAGS += -DDISTRHO_PLUGIN_USES_MODGUI=1 -DDISTRHO_PLUGIN_MINIMUM_BUFFER_SIZE=0xffff
  145. endif
  146. ifneq ($(WASM),true)
  147. ifneq ($(HAIKU),true)
  148. BASE_FLAGS += -pthread
  149. endif
  150. endif
  151. ifeq ($(WINDOWS),true)
  152. BASE_FLAGS += -D_USE_MATH_DEFINES
  153. BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
  154. BASE_FLAGS += -D_WIN32_WINNT=0x0600
  155. BASE_FLAGS += -I../../include/mingw-compat
  156. endif
  157. ifeq ($(USE_GLES2),true)
  158. BASE_FLAGS += -DNANOVG_GLES2_FORCED
  159. else ifeq ($(USE_GLES3),true)
  160. BASE_FLAGS += -DNANOVG_GLES3_FORCED
  161. endif
  162. BUILD_C_FLAGS += -std=gnu11
  163. BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  164. BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  165. ifneq ($(MACOS),true)
  166. BUILD_CXX_FLAGS += -faligned-new -Wno-abi
  167. ifeq ($(MOD_BUILD),true)
  168. BUILD_CXX_FLAGS += -std=gnu++17
  169. endif
  170. endif
  171. # Rack code is not tested for this flag, unset it
  172. BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS
  173. # Ignore bad behaviour from Rack API
  174. BUILD_CXX_FLAGS += -Wno-format-security
  175. # --------------------------------------------------------------
  176. # FIXME lots of warnings from VCV side
  177. BASE_FLAGS += -Wno-unused-parameter
  178. BASE_FLAGS += -Wno-unused-variable
  179. ifeq ($(WASM),true)
  180. ifneq ($(STATIC_BUILD),true)
  181. LINK_FLAGS += --use-preload-plugins
  182. LINK_FLAGS += --preload-file=./jsfx
  183. LINK_FLAGS += --preload-file=./lv2
  184. endif
  185. LINK_FLAGS += --preload-file=../../bin/CardinalNative.lv2/resources@/resources
  186. LINK_FLAGS += --use-preload-cache
  187. ifneq ($(NOPLUGINS),true)
  188. SYMLINKED_DIRS_RESOURCES =
  189. # find . -type l | grep -v svg | grep -v ttf | grep -v art | grep -v json | grep -v png | grep -v otf | sort
  190. SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/chopin
  191. SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/debussy
  192. SYMLINKED_DIRS_RESOURCES += BaconPlugs/res/midi/goldberg
  193. SYMLINKED_DIRS_RESOURCES += cf/playeroscs
  194. SYMLINKED_DIRS_RESOURCES += DrumKit/res/samples
  195. SYMLINKED_DIRS_RESOURCES += Fundamental/presets
  196. SYMLINKED_DIRS_RESOURCES += GrandeModular/presets
  197. SYMLINKED_DIRS_RESOURCES += LyraeModules/presets
  198. SYMLINKED_DIRS_RESOURCES += Meander/res
  199. SYMLINKED_DIRS_RESOURCES += MindMeldModular/presets
  200. SYMLINKED_DIRS_RESOURCES += MindMeldModular/res/ShapeMaster/CommunityPresets
  201. SYMLINKED_DIRS_RESOURCES += MindMeldModular/res/ShapeMaster/CommunityShapes
  202. SYMLINKED_DIRS_RESOURCES += MindMeldModular/res/ShapeMaster/MindMeldPresets
  203. SYMLINKED_DIRS_RESOURCES += MindMeldModular/res/ShapeMaster/MindMeldShapes
  204. SYMLINKED_DIRS_RESOURCES += Mog/res
  205. SYMLINKED_DIRS_RESOURCES += nonlinearcircuits/res
  206. SYMLINKED_DIRS_RESOURCES += Orbits/presets
  207. SYMLINKED_DIRS_RESOURCES += stoermelder-packone/presets
  208. SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/fx_presets
  209. SYMLINKED_DIRS_RESOURCES += surgext/build/surge-data/wavetables
  210. SYMLINKED_DIRS_RESOURCES += surgext/patches
  211. SYMLINKED_DIRS_RESOURCES += surgext/presets
  212. LINK_FLAGS += $(foreach d,$(SYMLINKED_DIRS_RESOURCES),--preload-file=../../bin/CardinalNative.lv2/resources/$(d)@/resources/$(d))
  213. endif
  214. LINK_FLAGS += -sALLOW_MEMORY_GROWTH
  215. LINK_FLAGS += -sINITIAL_MEMORY=64Mb
  216. LINK_FLAGS += -sLZ4=1
  217. LINK_FLAGS += --shell-file=../emscripten/shell.html
  218. LINK_FLAGS += -O3
  219. else ifeq ($(HAIKU),true)
  220. LINK_FLAGS += -lpthread
  221. else
  222. LINK_FLAGS += -pthread
  223. endif
  224. ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true)
  225. ifneq ($(STATIC_BUILD),true)
  226. LINK_FLAGS += -ldl
  227. endif
  228. endif
  229. ifeq ($(BSD),true)
  230. ifeq ($(DEBUG),true)
  231. LINK_FLAGS += -lexecinfo
  232. endif
  233. endif
  234. ifeq ($(MACOS),true)
  235. LINK_FLAGS += -framework IOKit
  236. else ifeq ($(WINDOWS),true)
  237. # needed by VCVRack
  238. EXTRA_LIBS += -ldbghelp -lshlwapi -Wl,--stack,0x100000
  239. # needed by JW-Modules
  240. EXTRA_LIBS += -lws2_32 -lwinmm
  241. endif
  242. ifeq ($(SYSDEPS),true)
  243. EXTRA_LIBS += $(shell $(PKG_CONFIG) --libs jansson libarchive samplerate speexdsp)
  244. endif
  245. ifeq ($(WITH_LTO),true)
  246. # false positive
  247. LINK_FLAGS += -Wno-alloc-size-larger-than
  248. ifneq ($(SYSDEPS),true)
  249. # triggered by jansson
  250. LINK_FLAGS += -Wno-stringop-overflow
  251. endif
  252. endif
  253. # --------------------------------------------------------------
  254. # Extra flags for liblo
  255. BASE_FLAGS += -DHAVE_LIBLO
  256. BASE_FLAGS += $(LIBLO_FLAGS)
  257. LINK_FLAGS += $(LIBLO_LIBS)
  258. # --------------------------------------------------------------
  259. # fallback path to resource files
  260. ifneq ($(CIBUILD),true)
  261. ifneq ($(SYSDEPS),true)
  262. ifeq ($(EXE_WRAPPER),wine)
  263. SOURCE_DIR = Z:$(subst /,\\,$(abspath $(CURDIR)/..))
  264. else
  265. SOURCE_DIR = $(abspath $(CURDIR)/..)
  266. endif
  267. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_SOURCE_DIR='"$(SOURCE_DIR)"'
  268. endif
  269. endif
  270. # --------------------------------------------------------------
  271. # install path prefix for resource files
  272. BUILD_CXX_FLAGS += -DCARDINAL_PLUGIN_PREFIX='"$(PREFIX)"'
  273. # --------------------------------------------------------------
  274. # Files to build
  275. FILES = main.cpp
  276. FILES += RemoteUI.cpp
  277. FILES += CardinalCommon.cpp
  278. FILES += CardinalRemote.cpp
  279. FILES += common.cpp
  280. FILES += glfw.cpp
  281. FILES += MenuBar.cpp
  282. FILES += Window.cpp
  283. ifeq ($(WINDOWS),true)
  284. FILES += distrho.rc
  285. endif
  286. # --------------------------------------------------------------
  287. # Build setup
  288. TARGET_DIR = ../../bin
  289. BUILD_DIR = ../../build/CardinalRemote
  290. DPF_PATH = ../../dpf
  291. DGL_FLAGS += -DDGL_OPENGL -DHAVE_DGL
  292. DGL_FLAGS += $(OPENGL_FLAGS)
  293. DGL_LIBS += $(OPENGL_LIBS)
  294. DGL_LIBS += $(DGL_SYSTEM_LIBS) -lm
  295. DGL_LIB = $(DPF_PATH)/build/libdgl-opengl.a
  296. BUILD_C_FLAGS += -I.
  297. BUILD_CXX_FLAGS += -I. -I$(DPF_PATH)/distrho -I$(DPF_PATH)/dgl
  298. OBJS = $(FILES:%=$(BUILD_DIR)/%.o)
  299. all: $(TARGET_DIR)/CardinalRemote$(APP_EXT)
  300. # ---------------------------------------------------------------------------------------------------------------------
  301. $(TARGET_DIR)/CardinalRemote$(APP_EXT): $(OBJS) $(DGL_LIB)
  302. -@mkdir -p $(shell dirname $@)
  303. @echo "Linking CardinalRemote"
  304. $(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(DGL_LIBS) $(JACK_LIBS) -o $@
  305. # ---------------------------------------------------------------------------------------------------------------------
  306. # Common
  307. $(BUILD_DIR)/%.S.o: %.S
  308. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  309. @echo "Compiling $<"
  310. @$(CC) $< $(BUILD_C_FLAGS) -c -o $@
  311. $(BUILD_DIR)/%.c.o: %.c
  312. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  313. @echo "Compiling $<"
  314. $(SILENT)$(CC) $< $(BUILD_C_FLAGS) -c -o $@
  315. $(BUILD_DIR)/%.cc.o: %.cc
  316. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  317. @echo "Compiling $<"
  318. $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
  319. $(BUILD_DIR)/%.cpp.o: %.cpp
  320. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  321. @echo "Compiling $<"
  322. $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
  323. # --------------------------------------------------------------
  324. # Extra rules for Windows icon
  325. ifeq ($(WINDOWS),true)
  326. JACK_LIBS += -Wl,-subsystem,windows
  327. $(BUILD_DIR)/distrho.rc.o: ../../utils/distrho.rc ../../utils/distrho.ico
  328. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  329. @echo "Compiling distrho.rc"
  330. $(SILENT)$(WINDRES) $< -O coff -o $@
  331. endif