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.

324 lines
8.4KB

  1. #!/usr/bin/make -f
  2. # Makefile for DISTRHO Plugins #
  3. # ---------------------------- #
  4. # Created by falkTX
  5. #
  6. # --------------------------------------------------------------
  7. # Import base definitions
  8. DISTRHO_NAMESPACE = CardinalDISTRHO
  9. DGL_NAMESPACE = CardinalDGL
  10. USE_NANOVG_FBO = true
  11. WASM_EXCEPTIONS = true
  12. include ../dpf/Makefile.base.mk
  13. # --------------------------------------------------------------
  14. # Build config
  15. ifeq ($(BSD),true)
  16. SYSDEPS ?= true
  17. else
  18. SYSDEPS ?= false
  19. endif
  20. # --------------------------------------------------------------
  21. # Build setup
  22. ifeq ($(HEADLESS),true)
  23. BUILD_DIR = ../build-headless/rack
  24. else
  25. BUILD_DIR = ../build/rack
  26. endif
  27. ifeq ($(MACOS),true)
  28. BASE_FLAGS += -DARCH_MAC
  29. else ifeq ($(WINDOWS),true)
  30. BASE_FLAGS += -DARCH_WIN
  31. else
  32. BASE_FLAGS += -DARCH_LIN
  33. endif
  34. ifeq ($(HAIKU),true)
  35. BASE_FLAGS += -I../include/linux-compat
  36. else ifeq ($(WASM),true)
  37. BASE_FLAGS += -I../include/linux-compat
  38. endif
  39. BASE_FLAGS += -DPRIVATE=
  40. BASE_FLAGS += -I../dpf/dgl/src/nanovg
  41. BASE_FLAGS += -I../dpf/distrho
  42. BASE_FLAGS += -I../include
  43. BASE_FLAGS += -I../include/simd-compat
  44. BASE_FLAGS += -IRack/include
  45. ifeq ($(SYSDEPS),true)
  46. BASE_FLAGS += -DCARDINAL_SYSDEPS
  47. BASE_FLAGS += $(shell pkg-config --cflags jansson libarchive samplerate speexdsp)
  48. else
  49. BASE_FLAGS += -DZSTDLIB_VISIBILITY=
  50. BASE_FLAGS += -IRack/dep/include
  51. endif
  52. BASE_FLAGS += -IRack/dep/filesystem/include
  53. BASE_FLAGS += -IRack/dep/fuzzysearchdatabase/src
  54. BASE_FLAGS += -IRack/dep/glfw/include
  55. BASE_FLAGS += -IRack/dep/nanosvg/src
  56. BASE_FLAGS += -IRack/dep/osdialog
  57. BASE_FLAGS += -IRack/dep/oui-blendish
  58. BASE_FLAGS += -IRack/dep/pffft
  59. ifeq ($(CPU_I386),true)
  60. # needed for enabling SSE in pffft
  61. BASE_FLAGS += -Di386
  62. endif
  63. ifeq ($(DEBUG),true)
  64. BASE_FLAGS += -UDEBUG
  65. endif
  66. ifeq ($(HAVE_LIBLO),true)
  67. BASE_FLAGS += -DHAVE_LIBLO $(LIBLO_FLAGS)
  68. endif
  69. ifeq ($(HEADLESS),true)
  70. BASE_FLAGS += -DHEADLESS
  71. endif
  72. # SIMD must always be enabled, even in debug builds
  73. ifeq ($(NOSIMD),true)
  74. BASE_FLAGS += -DCARDINAL_NOSIMD
  75. else ifeq ($(DEBUG),true)
  76. ifeq ($(WASM),true)
  77. BASE_FLAGS += -msse -msse2 -msse3 -msimd128
  78. else ifeq ($(CPU_ARM32),true)
  79. BASE_FLAGS += -mfpu=neon-vfpv4 -mfloat-abi=hard
  80. else ifeq ($(CPU_I386_OR_X86_64),true)
  81. BASE_FLAGS += -msse -msse2 -mfpmath=sse
  82. endif
  83. endif
  84. ifeq ($(BSD),true)
  85. BASE_FLAGS += -DCLOCK_MONOTONIC_RAW=CLOCK_MONOTONIC_PRECISE
  86. endif
  87. ifeq ($(HAIKU),true)
  88. BASE_FLAGS += -DCLOCK_MONOTONIC_RAW=CLOCK_MONOTONIC
  89. endif
  90. ifeq ($(MOD_BUILD),true)
  91. BASE_FLAGS += -DSIMDE_ENABLE_OPENMP -fopenmp
  92. endif
  93. ifneq ($(WASM),true)
  94. ifneq ($(HAIKU),true)
  95. BASE_FLAGS += -pthread
  96. endif
  97. endif
  98. ifeq ($(WINDOWS),true)
  99. BASE_FLAGS += -D_USE_MATH_DEFINES
  100. BASE_FLAGS += -DWIN32_LEAN_AND_MEAN
  101. BASE_FLAGS += -D_WIN32_WINNT=0x0600
  102. BASE_FLAGS += -I../include/mingw-compat
  103. BASE_FLAGS += -I../include/mingw-std-threads
  104. endif
  105. ifeq ($(USE_GLES2),true)
  106. BASE_FLAGS += -DNANOVG_GLES2_FORCED
  107. else ifeq ($(USE_GLES3),true)
  108. BASE_FLAGS += -DNANOVG_GLES3_FORCED
  109. endif
  110. BUILD_C_FLAGS += -std=gnu11
  111. BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  112. BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing
  113. ifneq ($(MACOS),true)
  114. BUILD_CXX_FLAGS += -faligned-new -Wno-abi
  115. ifeq ($(MOD_BUILD),true)
  116. BUILD_CXX_FLAGS += -std=gnu++17
  117. endif
  118. endif
  119. # use our custom function to invert some colors
  120. BUILD_CXX_FLAGS += -DnsvgDelete=nsvgDeleteCardinal
  121. BUILD_CXX_FLAGS += -DnsvgParseFromFile=nsvgParseFromFileCardinal
  122. # Rack code is not tested for this flag, unset it
  123. BUILD_CXX_FLAGS += -U_GLIBCXX_ASSERTIONS -Wp,-U_GLIBCXX_ASSERTIONS
  124. # Ignore bad behaviour from Rack API
  125. BUILD_CXX_FLAGS += -Wno-format-security
  126. # Ignore warnings from simde
  127. ifeq ($(MOD_BUILD),true)
  128. BUILD_CXX_FLAGS += -Wno-overflow
  129. endif
  130. # --------------------------------------------------------------
  131. # Rack files to build
  132. RACK_FILES += AsyncDialog.cpp
  133. RACK_FILES += CardinalModuleWidget.cpp
  134. RACK_FILES += custom/asset.cpp
  135. RACK_FILES += custom/dep.cpp
  136. RACK_FILES += custom/library.cpp
  137. RACK_FILES += custom/network.cpp
  138. RACK_FILES += custom/osdialog.cpp
  139. RACK_FILES += override/blendish.c
  140. RACK_FILES += override/context.cpp
  141. RACK_FILES += override/minblep.cpp
  142. RACK_FILES += override/plugin.cpp
  143. RACK_FILES += override/Engine.cpp
  144. RACK_FILES += override/Model.cpp
  145. RACK_FILES += override/ModuleWidget.cpp
  146. RACK_FILES += override/OpenGlWidget.cpp
  147. RACK_FILES += override/Scene.cpp
  148. RACK_FILES += Rack/dep/pffft/pffft.c
  149. RACK_FILES += Rack/dep/pffft/fftpack.c
  150. RACK_FILES += Rack/dep/osdialog/osdialog.c
  151. IGNORED_FILES = Rack/src/asset.cpp
  152. IGNORED_FILES += Rack/src/audio.cpp
  153. IGNORED_FILES += Rack/src/common.cpp
  154. IGNORED_FILES += Rack/src/context.cpp
  155. IGNORED_FILES += Rack/src/dep.cpp
  156. IGNORED_FILES += Rack/src/discord.cpp
  157. IGNORED_FILES += Rack/src/gamepad.cpp
  158. IGNORED_FILES += Rack/src/keyboard.cpp
  159. IGNORED_FILES += Rack/src/library.cpp
  160. IGNORED_FILES += Rack/src/midi.cpp
  161. IGNORED_FILES += Rack/src/network.cpp
  162. IGNORED_FILES += Rack/src/plugin.cpp
  163. IGNORED_FILES += Rack/src/rtaudio.cpp
  164. IGNORED_FILES += Rack/src/rtmidi.cpp
  165. IGNORED_FILES += Rack/src/app/AudioDisplay.cpp
  166. IGNORED_FILES += Rack/src/app/MenuBar.cpp
  167. IGNORED_FILES += Rack/src/app/MidiDisplay.cpp
  168. IGNORED_FILES += Rack/src/app/ModuleWidget.cpp
  169. IGNORED_FILES += Rack/src/app/Scene.cpp
  170. IGNORED_FILES += Rack/src/app/TipWindow.cpp
  171. IGNORED_FILES += Rack/src/dsp/minblep.cpp
  172. IGNORED_FILES += Rack/src/engine/Engine.cpp
  173. IGNORED_FILES += Rack/src/plugin/Model.cpp
  174. IGNORED_FILES += Rack/src/widget/OpenGlWidget.cpp
  175. IGNORED_FILES += Rack/src/window/Window.cpp
  176. IGNORED_FILES += $(wildcard Rack/src/core/*.cpp)
  177. RACK_FILES += $(wildcard Rack/src/*.c)
  178. RACK_FILES += $(wildcard Rack/src/*/*.c)
  179. RACK_FILES += $(filter-out $(IGNORED_FILES),$(wildcard Rack/src/*.cpp))
  180. RACK_FILES += $(filter-out $(IGNORED_FILES), $(wildcard Rack/src/*/*.cpp))
  181. ifeq ($(WASM),true)
  182. RACK_FILES += emscripten/WasmUtils.cpp
  183. endif
  184. # --------------------------------------------------------------
  185. # lots of warnings from VCV side
  186. BASE_FLAGS += -Wno-unused-but-set-variable
  187. BASE_FLAGS += -Wno-unused-parameter
  188. BASE_FLAGS += -Wno-unused-result
  189. BASE_FLAGS += -Wno-unused-variable
  190. ifeq ($(MACOS),true)
  191. BASE_FLAGS += -Wno-unknown-warning-option
  192. endif
  193. # --------------------------------------------------------------
  194. # Build targets
  195. ifeq ($(HEADLESS),true)
  196. TARGET_SUFFIX = -headless
  197. endif
  198. TARGETS = rack$(TARGET_SUFFIX).a rack-headless.a
  199. ifneq ($(MACOS),true)
  200. CARDINAL_FX_ARGS = VST2_FILENAME=Cardinal.vst/CardinalFX$(LIB_EXT) CLAP_FILENAME=Cardinal.clap/CardinalFX.clap
  201. CARDINAL_SYNTH_ARGS = VST2_FILENAME=Cardinal.vst/CardinalSynth$(LIB_EXT) CLAP_FILENAME=Cardinal.clap/CardinalSynth.clap
  202. endif
  203. all: $(TARGETS)
  204. ifeq ($(MOD_BUILD),true)
  205. $(MAKE) -C Cardinal lv2
  206. $(MAKE) -C CardinalFX lv2
  207. $(MAKE) -C CardinalMiniSep lv2_sep
  208. else ifeq ($(WASM),true)
  209. $(MAKE) -C CardinalNative
  210. $(MAKE) -C CardinalMini
  211. else
  212. $(MAKE) -C Cardinal
  213. $(MAKE) -C CardinalMini
  214. $(MAKE) -C CardinalMiniSep
  215. $(MAKE) -C CardinalNative
  216. $(MAKE) -C CardinalFX $(CARDINAL_FX_ARGS)
  217. $(MAKE) -C CardinalSynth $(CARDINAL_SYNTH_ARGS)
  218. endif
  219. jack: $(TARGETS)
  220. $(MAKE) jack -C Cardinal
  221. native: $(TARGETS)
  222. $(MAKE) jack -C CardinalNative
  223. lv2: $(TARGETS)
  224. $(MAKE) lv2 -C Cardinal
  225. $(MAKE) lv2 -C CardinalFX $(CARDINAL_FX_ARGS)
  226. $(MAKE) lv2 -C CardinalSynth $(CARDINAL_SYNTH_ARGS)
  227. $(MAKE) lv2_sep -C CardinalMiniSep
  228. vst2: $(TARGETS)
  229. $(MAKE) vst2 -C CardinalFX $(CARDINAL_FX_ARGS)
  230. $(MAKE) vst2 -C CardinalSynth $(CARDINAL_SYNTH_ARGS)
  231. vst3: $(TARGETS)
  232. $(MAKE) vst3 -C Cardinal
  233. $(MAKE) vst3 -C CardinalFX $(CARDINAL_FX_ARGS)
  234. $(MAKE) vst3 -C CardinalSynth $(CARDINAL_SYNTH_ARGS)
  235. clap: $(TARGETS)
  236. $(MAKE) clap -C CardinalFX $(CARDINAL_FX_ARGS)
  237. $(MAKE) clap -C CardinalSynth $(CARDINAL_SYNTH_ARGS)
  238. clean:
  239. rm -f *.a
  240. rm -rf $(BUILD_DIR)
  241. $(MAKE) clean -C Cardinal
  242. $(MAKE) clean -C CardinalFX $(CARDINAL_FX_ARGS)
  243. $(MAKE) clean -C CardinalSynth $(CARDINAL_SYNTH_ARGS)
  244. # --------------------------------------------------------------
  245. # Build commands
  246. RACK_OBJS = $(RACK_FILES:%=$(BUILD_DIR)/%.o)
  247. rack$(TARGET_SUFFIX).a: $(RACK_OBJS)
  248. @echo "Creating $@"
  249. $(SILENT)rm -f $@
  250. $(SILENT)$(AR) crs $@ $^
  251. ifneq ($(HEADLESS),true)
  252. rack-headless.a:
  253. $(MAKE) HEADLESS=true $@
  254. endif
  255. $(BUILD_DIR)/%.c.o: %.c
  256. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  257. @echo "Compiling $<"
  258. $(SILENT)$(CC) $< $(BUILD_C_FLAGS) -c -o $@
  259. $(BUILD_DIR)/%.cpp.o: %.cpp
  260. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  261. @echo "Compiling $<"
  262. $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
  263. $(BUILD_DIR)/emscripten/WasmUtils.cpp.o: BUILD_CXX_FLAGS += -fno-exceptions
  264. # --------------------------------------------------------------
  265. -include $(RACK_OBJS:%.o=%.d)
  266. # --------------------------------------------------------------