DISTRHO Plugin Framework
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.

353 lines
12KB

  1. #!/usr/bin/make -f
  2. # Makefile for DPF Example Plugins #
  3. # -------------------------------- #
  4. # Created by falkTX
  5. #
  6. # NOTE: NAME, FILES_DSP and FILES_UI must have been defined before including this file!
  7. ifeq (,$(wildcard ../../Makefile.base.mk))
  8. DPF_PATH=../../dpf
  9. else
  10. DPF_PATH=../..
  11. endif
  12. include $(DPF_PATH)/Makefile.base.mk
  13. # ---------------------------------------------------------------------------------------------------------------------
  14. # Basic setup
  15. TARGET_DIR = ../../bin
  16. BUILD_DIR = ../../build/$(NAME)
  17. BUILD_C_FLAGS += -I.
  18. BUILD_CXX_FLAGS += -I. -I$(DPF_PATH)/distrho -I$(DPF_PATH)/dgl
  19. ifeq ($(HAVE_CAIRO),true)
  20. DGL_FLAGS += -DHAVE_CAIRO
  21. endif
  22. ifeq ($(HAVE_OPENGL),true)
  23. DGL_FLAGS += -DHAVE_OPENGL
  24. endif
  25. ifeq ($(HAVE_JACK),true)
  26. BASE_FLAGS += -DHAVE_JACK
  27. endif
  28. ifeq ($(HAVE_LIBLO),true)
  29. BASE_FLAGS += -DHAVE_LIBLO
  30. endif
  31. # ---------------------------------------------------------------------------------------------------------------------
  32. # Set files to build
  33. OBJS_DSP = $(FILES_DSP:%=$(BUILD_DIR)/%.o)
  34. OBJS_UI = $(FILES_UI:%=$(BUILD_DIR)/%.o)
  35. # ---------------------------------------------------------------------------------------------------------------------
  36. # Set plugin binary file targets
  37. jack = $(TARGET_DIR)/$(NAME)$(APP_EXT)
  38. ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT)
  39. dssi_dsp = $(TARGET_DIR)/$(NAME)-dssi$(LIB_EXT)
  40. dssi_ui = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui$(APP_EXT)
  41. lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME)$(LIB_EXT)
  42. lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp$(LIB_EXT)
  43. lv2_ui = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui$(LIB_EXT)
  44. vst = $(TARGET_DIR)/$(NAME)-vst$(LIB_EXT)
  45. au_plugin = $(TARGET_DIR)/$(NAME).component/Contents/MacOS/$(NAME)
  46. au_pkginfo = $(TARGET_DIR)/$(NAME).component/Contents/PkgInfo
  47. au_plist = $(TARGET_DIR)/$(NAME).component/Contents/Info.plist
  48. au_rsrc = $(TARGET_DIR)/$(NAME).component/Contents/Resources/$(NAME).rsrc
  49. # ---------------------------------------------------------------------------------------------------------------------
  50. # Set stuff needed for AU
  51. AU_BUILD_FLAGS = \
  52. -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/AUBase \
  53. -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/Utility \
  54. -I$(DPF_PATH)/distrho/src/CoreAudio106/PublicUtility\
  55. -Wno-deprecated-declarations \
  56. -Wno-four-char-constants \
  57. -Wno-overloaded-virtual \
  58. -Wno-unused-parameter \
  59. -DTARGET_OS_MAC
  60. AU_LINK_FLAGS = \
  61. -bundle \
  62. -framework AudioToolbox \
  63. -framework AudioUnit \
  64. -framework CoreAudio \
  65. -framework CoreServices \
  66. -exported_symbols_list $(DPF_PATH)/distrho/src/DistrhoPluginAU.exp
  67. # not needed yet
  68. # -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/AUCarbonViewBase
  69. # -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/AUInstrumentBase
  70. # -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/AUViewBase
  71. # -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/OtherBases
  72. # ---------------------------------------------------------------------------------------------------------------------
  73. # Handle UI stuff, disable UI support automatically
  74. ifeq ($(FILES_UI),)
  75. UI_TYPE = none
  76. endif
  77. ifeq ($(UI_TYPE),)
  78. UI_TYPE = opengl
  79. endif
  80. ifeq ($(UI_TYPE),cairo)
  81. ifeq ($(HAVE_CAIRO),true)
  82. DGL_FLAGS += $(CAIRO_FLAGS) -DDGL_CAIRO
  83. DGL_LIBS += $(CAIRO_LIBS)
  84. DGL_LIB = $(DPF_PATH)/build/libdgl-cairo.a
  85. HAVE_DGL = true
  86. else
  87. HAVE_DGL = false
  88. endif
  89. endif
  90. ifeq ($(UI_TYPE),opengl)
  91. ifeq ($(HAVE_OPENGL),true)
  92. DGL_FLAGS += $(OPENGL_FLAGS) -DDGL_OPENGL
  93. DGL_LIBS += $(OPENGL_LIBS)
  94. DGL_LIB = $(DPF_PATH)/build/libdgl-opengl.a
  95. HAVE_DGL = true
  96. else
  97. HAVE_DGL = false
  98. endif
  99. endif
  100. DGL_LIBS += $(DGL_SYSTEM_LIBS)
  101. ifneq ($(HAVE_DGL),true)
  102. dssi_ui =
  103. lv2_ui =
  104. DGL_LIBS =
  105. OBJS_UI =
  106. endif
  107. # TODO split dsp and ui object build flags
  108. BASE_FLAGS += $(DGL_FLAGS)
  109. # ---------------------------------------------------------------------------------------------------------------------
  110. # all needs to be first
  111. all:
  112. # ---------------------------------------------------------------------------------------------------------------------
  113. # Common
  114. $(BUILD_DIR)/%.c.o: %.c
  115. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  116. @echo "Compiling $<"
  117. @$(CC) $< $(BUILD_C_FLAGS) -c -o $@
  118. $(BUILD_DIR)/%.cc.o: %.cc
  119. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  120. @echo "Compiling $<"
  121. @$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
  122. $(BUILD_DIR)/%.cpp.o: %.cpp
  123. -@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
  124. @echo "Compiling $<"
  125. @$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
  126. clean:
  127. rm -rf $(BUILD_DIR)
  128. rm -rf $(TARGET_DIR)/$(NAME) $(TARGET_DIR)/$(NAME)-* $(TARGET_DIR)/$(NAME).lv2
  129. # ---------------------------------------------------------------------------------------------------------------------
  130. $(BUILD_DIR)/DistrhoPluginMain_%.cpp.o: $(DPF_PATH)/distrho/DistrhoPluginMain.cpp
  131. -@mkdir -p $(BUILD_DIR)
  132. @echo "Compiling DistrhoPluginMain.cpp ($*)"
  133. @$(CXX) $< $(BUILD_CXX_FLAGS) -DDISTRHO_PLUGIN_TARGET_$* -c -o $@
  134. $(BUILD_DIR)/DistrhoUIMain_%.cpp.o: $(DPF_PATH)/distrho/DistrhoUIMain.cpp
  135. -@mkdir -p $(BUILD_DIR)
  136. @echo "Compiling DistrhoUIMain.cpp ($*)"
  137. @$(CXX) $< $(BUILD_CXX_FLAGS) -DDISTRHO_PLUGIN_TARGET_$* -c -o $@
  138. $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o: $(DPF_PATH)/distrho/DistrhoPluginMain.cpp
  139. -@mkdir -p $(BUILD_DIR)
  140. @echo "Compiling DistrhoPluginMain.cpp (JACK)"
  141. @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell $(PKG_CONFIG) --cflags jack) -DDISTRHO_PLUGIN_TARGET_JACK -c -o $@
  142. $(BUILD_DIR)/DistrhoPluginMain_AU.cpp.o: $(DPF_PATH)/distrho/DistrhoPluginMain.cpp
  143. -@mkdir -p $(BUILD_DIR)
  144. @echo "Compiling DistrhoPluginMain.cpp (AU)"
  145. $(CXX) $< $(BUILD_CXX_FLAGS) $(AU_BUILD_FLAGS) -DDISTRHO_PLUGIN_TARGET_AU -c -o $@
  146. $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.o: $(DPF_PATH)/distrho/DistrhoUIMain.cpp
  147. -@mkdir -p $(BUILD_DIR)
  148. @echo "Compiling DistrhoUIMain.cpp (DSSI)"
  149. @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell $(PKG_CONFIG) --cflags liblo) -DDISTRHO_PLUGIN_TARGET_DSSI -c -o $@
  150. $(BUILD_DIR)/DistrhoPluginAUexport.cpp.o: $(DPF_PATH)/distrho/src/DistrhoPluginAUexport.cpp
  151. -@mkdir -p $(BUILD_DIR)
  152. @echo "Compiling DistrhoPluginAUexport.cpp"
  153. $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
  154. # ---------------------------------------------------------------------------------------------------------------------
  155. # JACK
  156. jack: $(jack)
  157. ifeq ($(HAVE_DGL),true)
  158. $(jack): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o $(BUILD_DIR)/DistrhoUIMain_JACK.cpp.o $(DGL_LIB)
  159. else
  160. $(jack): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o
  161. endif
  162. -@mkdir -p $(shell dirname $@)
  163. @echo "Creating JACK standalone for $(NAME)"
  164. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell $(PKG_CONFIG) --libs jack) -o $@
  165. # ---------------------------------------------------------------------------------------------------------------------
  166. # LADSPA
  167. ladspa: $(ladspa_dsp)
  168. $(ladspa_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_LADSPA.cpp.o
  169. -@mkdir -p $(shell dirname $@)
  170. @echo "Creating LADSPA plugin for $(NAME)"
  171. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@
  172. # ---------------------------------------------------------------------------------------------------------------------
  173. # DSSI
  174. dssi: $(dssi_dsp) $(dssi_ui)
  175. dssi_dsp: $(dssi_dsp)
  176. dssi_ui: $(dssi_ui)
  177. $(dssi_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_DSSI.cpp.o
  178. -@mkdir -p $(shell dirname $@)
  179. @echo "Creating DSSI plugin library for $(NAME)"
  180. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@
  181. $(dssi_ui): $(OBJS_UI) $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.o $(DGL_LIB)
  182. -@mkdir -p $(shell dirname $@)
  183. @echo "Creating DSSI UI for $(NAME)"
  184. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell $(PKG_CONFIG) --libs liblo) -o $@
  185. # ---------------------------------------------------------------------------------------------------------------------
  186. # LV2
  187. lv2: $(lv2)
  188. lv2_dsp: $(lv2_dsp)
  189. lv2_sep: $(lv2_dsp) $(lv2_ui)
  190. $(lv2): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.o $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.o $(DGL_LIB)
  191. -@mkdir -p $(shell dirname $@)
  192. @echo "Creating LV2 plugin for $(NAME)"
  193. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@
  194. $(lv2_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.o
  195. -@mkdir -p $(shell dirname $@)
  196. @echo "Creating LV2 plugin library for $(NAME)"
  197. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@
  198. $(lv2_ui): $(OBJS_UI) $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.o $(DGL_LIB)
  199. -@mkdir -p $(shell dirname $@)
  200. @echo "Creating LV2 plugin UI for $(NAME)"
  201. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@
  202. # ---------------------------------------------------------------------------------------------------------------------
  203. # VST
  204. vst: $(vst)
  205. ifeq ($(HAVE_DGL),true)
  206. $(vst): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_VST.cpp.o $(BUILD_DIR)/DistrhoUIMain_VST.cpp.o $(DGL_LIB)
  207. else
  208. $(vst): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_VST.cpp.o
  209. endif
  210. -@mkdir -p $(shell dirname $@)
  211. @echo "Creating VST plugin for $(NAME)"
  212. @$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@
  213. # ---------------------------------------------------------------------------------------------------------------------
  214. # AU
  215. au: $(au_plugin) $(au_pkginfo) $(au_plist) $(au_rsrc)
  216. ifeq ($(HAVE_DGL),true)
  217. $(au_plugin): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_AU.cpp.o $(BUILD_DIR)/DistrhoUIMain_AU.cpp.o $(DGL_LIB)
  218. else
  219. $(au_plugin): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_AU.cpp.o
  220. endif
  221. -@mkdir -p $(shell dirname $@)
  222. @echo "Creating AU plugin for $(NAME)"
  223. $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(AU_LINK_FLAGS) $(DGL_LIBS) -o $@
  224. $(au_pkginfo):
  225. -@mkdir -p $(shell dirname $@)
  226. @echo "Creating AU PkgInfo for $(NAME)"
  227. cp $(DPF_PATH)/distrho/src/CoreAudio106/PkgInfo $@
  228. $(au_plist):
  229. -@mkdir -p $(shell dirname $@)
  230. @echo "Creating AU Info.plist for $(NAME)"
  231. sed -e "s/X-DPF-EXECUTABLE-DPF-X/$(NAME)/g" $(DPF_PATH)/distrho/src/CoreAudio106/Info.plist > $@
  232. $(au_rsrc): $(BUILD_DIR)/step2.rsrc
  233. -@mkdir -p $(shell dirname $@)
  234. @echo "Creating AU rsrc for $(NAME) (part 3/3)"
  235. ResMerger $< -dstIs DF -o $@
  236. $(BUILD_DIR)/step2.rsrc: $(BUILD_DIR)/step1.rsrc
  237. -@mkdir -p $(shell dirname $@)
  238. @echo "Creating AU rsrc for $(NAME) (part 2/3)"
  239. ResMerger -dstIs DF $< -o $@
  240. $(BUILD_DIR)/step1.rsrc: $(DPF_PATH)/distrho/src/DistrhoPluginAU.r $(BUILD_DIR)/DistrhoPluginInfo.r $(OBJS_DSP)
  241. -@mkdir -p $(shell dirname $@)
  242. @echo "Creating AU rsrc for $(NAME) (part 1/3)"
  243. Rez $< \
  244. -d SystemSevenOrLater=1 \
  245. -useDF -script Roman \
  246. -d x86_64_YES -d i386_YES -arch x86_64 -arch i386 \
  247. -i . \
  248. -i $(BUILD_DIR) \
  249. -i $(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic \
  250. -i $(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/AUBase \
  251. -i $(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/OtherBases \
  252. -i $(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/Utility \
  253. -i $(DPF_PATH)/distrho/src/CoreAudio106/PublicUtility \
  254. -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers \
  255. -o $@
  256. $(BUILD_DIR)/DistrhoPluginInfo.r: $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginAUexport.cpp.o
  257. -@mkdir -p $(shell dirname $@)
  258. @echo "Creating DistrhoPluginInfo.r for $(NAME)"
  259. $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $(BUILD_DIR)/DistrhoPluginInfoGenerator && \
  260. $(BUILD_DIR)/DistrhoPluginInfoGenerator "$(BUILD_DIR)" && \
  261. rm $(BUILD_DIR)/DistrhoPluginInfoGenerator
  262. # ---------------------------------------------------------------------------------------------------------------------
  263. -include $(OBJS_DSP:%.o=%.d)
  264. ifeq ($(HAVE_DGL),true)
  265. -include $(OBJS_UI:%.o=%.d)
  266. endif
  267. -include $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.d
  268. -include $(BUILD_DIR)/DistrhoPluginMain_LADSPA.cpp.d
  269. -include $(BUILD_DIR)/DistrhoPluginMain_DSSI.cpp.d
  270. -include $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.d
  271. -include $(BUILD_DIR)/DistrhoPluginMain_VST.cpp.d
  272. -include $(BUILD_DIR)/DistrhoPluginMain_AU.cpp.d
  273. -include $(BUILD_DIR)/DistrhoUIMain_JACK.cpp.d
  274. -include $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.d
  275. -include $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.d
  276. -include $(BUILD_DIR)/DistrhoUIMain_VST.cpp.d
  277. -include $(BUILD_DIR)/DistrhoUIMain_AU.cpp.d
  278. # ---------------------------------------------------------------------------------------------------------------------