1#!/usr/bin/make -f
2# Makefile for DPF Example Plugins #
3# -------------------------------- #
4# Created by falkTX
5#
6
7# NOTE: NAME, FILES_DSP and FILES_UI must have been defined before including this file!
8
9
10ifeq (,$(wildcard ../../Makefile.base.mk))
11DPF_PATH=../../dpf
12else
13DPF_PATH=../..
14endif
15
16include $(DPF_PATH)/Makefile.base.mk
17
18# ---------------------------------------------------------------------------------------------------------------------
19# Basic setup
20
21TARGET_DIR = ../../bin
22BUILD_DIR = ../../build/$(NAME)
23
24BUILD_C_FLAGS   += -I.
25BUILD_CXX_FLAGS += -I. -I$(DPF_PATH)/distrho -I$(DPF_PATH)/dgl
26
27ifeq ($(HAVE_CAIRO),true)
28DGL_FLAGS += -DHAVE_CAIRO
29endif
30
31ifeq ($(HAVE_OPENGL),true)
32DGL_FLAGS += -DHAVE_OPENGL
33endif
34
35ifeq ($(HAVE_JACK),true)
36BASE_FLAGS += -DHAVE_JACK
37endif
38
39ifeq ($(HAVE_LIBLO),true)
40BASE_FLAGS += -DHAVE_LIBLO
41endif
42
43# ---------------------------------------------------------------------------------------------------------------------
44# Set files to build
45
46OBJS_DSP = $(FILES_DSP:%=$(BUILD_DIR)/%.o)
47OBJS_UI  = $(FILES_UI:%=$(BUILD_DIR)/%.o)
48
49# ---------------------------------------------------------------------------------------------------------------------
50# Set plugin binary file targets
51
52jack       = $(TARGET_DIR)/$(NAME)$(APP_EXT)
53ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT)
54dssi_dsp   = $(TARGET_DIR)/$(NAME)-dssi$(LIB_EXT)
55dssi_ui    = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui$(APP_EXT)
56lv2        = $(TARGET_DIR)/$(NAME).lv2/$(NAME)$(LIB_EXT)
57lv2_dsp    = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp$(LIB_EXT)
58lv2_ui     = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui$(LIB_EXT)
59vst        = $(TARGET_DIR)/$(NAME)-vst$(LIB_EXT)
60
61# ---------------------------------------------------------------------------------------------------------------------
62# Handle UI stuff, disable UI support automatically
63
64ifeq ($(FILES_UI),)
65UI_TYPE = none
66endif
67
68ifeq ($(UI_TYPE),)
69UI_TYPE = opengl
70endif
71
72ifeq ($(UI_TYPE),cairo)
73DGL_FLAGS += -DDGL_CAIRO
74ifeq ($(HAVE_CAIRO),true)
75DGL_FLAGS += $(CAIRO_FLAGS)
76DGL_LIBS  += $(CAIRO_LIBS)
77DGL_LIB    = $(DPF_PATH)/build/libdgl-cairo.a
78HAVE_DGL   = true
79else
80HAVE_DGL   = false
81endif
82endif
83
84ifeq ($(UI_TYPE),opengl)
85DGL_FLAGS += -DDGL_OPENGL
86ifeq ($(HAVE_OPENGL),true)
87DGL_FLAGS += $(OPENGL_FLAGS)
88DGL_LIBS  += $(OPENGL_LIBS)
89DGL_LIB    = $(DPF_PATH)/build/libdgl-opengl.a
90HAVE_DGL   = true
91else
92HAVE_DGL   = false
93endif
94endif
95
96ifeq ($(UI_TYPE),external)
97DGL_FLAGS += -DDGL_EXTERNAL
98HAVE_DGL   = true
99endif
100
101DGL_LIBS += $(DGL_SYSTEM_LIBS)
102
103ifneq ($(HAVE_DGL),true)
104dssi_ui =
105lv2_ui =
106DGL_LIBS =
107OBJS_UI =
108endif
109
110# TODO split dsp and ui object build flags
111BASE_FLAGS += $(DGL_FLAGS)
112
113# ---------------------------------------------------------------------------------------------------------------------
114# all needs to be first
115
116all:
117
118# ---------------------------------------------------------------------------------------------------------------------
119# Common
120
121$(BUILD_DIR)/%.c.o: %.c
122	-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
123	@echo "Compiling $<"
124	$(SILENT)$(CC) $< $(BUILD_C_FLAGS) -c -o $@
125
126$(BUILD_DIR)/%.cc.o: %.cc
127	-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
128	@echo "Compiling $<"
129	$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
130
131$(BUILD_DIR)/%.cpp.o: %.cpp
132	-@mkdir -p "$(shell dirname $(BUILD_DIR)/$<)"
133	@echo "Compiling $<"
134	$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
135
136clean:
137	rm -rf $(BUILD_DIR)
138	rm -rf $(TARGET_DIR)/$(NAME) $(TARGET_DIR)/$(NAME)-* $(TARGET_DIR)/$(NAME).lv2
139
140# ---------------------------------------------------------------------------------------------------------------------
141
142$(BUILD_DIR)/DistrhoPluginMain_%.cpp.o: $(DPF_PATH)/distrho/DistrhoPluginMain.cpp
143	-@mkdir -p $(BUILD_DIR)
144	@echo "Compiling DistrhoPluginMain.cpp ($*)"
145	$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DDISTRHO_PLUGIN_TARGET_$* -c -o $@
146
147$(BUILD_DIR)/DistrhoUIMain_%.cpp.o: $(DPF_PATH)/distrho/DistrhoUIMain.cpp
148	-@mkdir -p $(BUILD_DIR)
149	@echo "Compiling DistrhoUIMain.cpp ($*)"
150	$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -DDISTRHO_PLUGIN_TARGET_$* -c -o $@
151
152$(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o: $(DPF_PATH)/distrho/DistrhoPluginMain.cpp
153	-@mkdir -p $(BUILD_DIR)
154	@echo "Compiling DistrhoPluginMain.cpp (JACK)"
155	$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(shell $(PKG_CONFIG) --cflags jack) -DDISTRHO_PLUGIN_TARGET_JACK -c -o $@
156
157$(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.o: $(DPF_PATH)/distrho/DistrhoUIMain.cpp
158	-@mkdir -p $(BUILD_DIR)
159	@echo "Compiling DistrhoUIMain.cpp (DSSI)"
160	$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(shell $(PKG_CONFIG) --cflags liblo) -DDISTRHO_PLUGIN_TARGET_DSSI -c -o $@
161
162# ---------------------------------------------------------------------------------------------------------------------
163# JACK
164
165jack: $(jack)
166
167ifeq ($(HAVE_DGL),true)
168$(jack): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o $(BUILD_DIR)/DistrhoUIMain_JACK.cpp.o $(DGL_LIB)
169else
170$(jack): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o
171endif
172	-@mkdir -p $(shell dirname $@)
173	@echo "Creating JACK standalone for $(NAME)"
174	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell $(PKG_CONFIG) --libs jack) -o $@
175
176# ---------------------------------------------------------------------------------------------------------------------
177# LADSPA
178
179ladspa: $(ladspa_dsp)
180
181$(ladspa_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_LADSPA.cpp.o
182	-@mkdir -p $(shell dirname $@)
183	@echo "Creating LADSPA plugin for $(NAME)"
184	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@
185
186# ---------------------------------------------------------------------------------------------------------------------
187# DSSI
188
189dssi:     $(dssi_dsp) $(dssi_ui)
190dssi_dsp: $(dssi_dsp)
191dssi_ui:  $(dssi_ui)
192
193$(dssi_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_DSSI.cpp.o
194	-@mkdir -p $(shell dirname $@)
195	@echo "Creating DSSI plugin library for $(NAME)"
196	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@
197
198$(dssi_ui): $(OBJS_UI) $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.o $(DGL_LIB)
199	-@mkdir -p $(shell dirname $@)
200	@echo "Creating DSSI UI for $(NAME)"
201	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(shell $(PKG_CONFIG) --libs liblo) -o $@
202
203# ---------------------------------------------------------------------------------------------------------------------
204# LV2
205
206lv2: $(lv2)
207lv2_dsp: $(lv2_dsp)
208lv2_sep: $(lv2_dsp) $(lv2_ui)
209
210$(lv2): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.o $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.o $(DGL_LIB)
211	-@mkdir -p $(shell dirname $@)
212	@echo "Creating LV2 plugin for $(NAME)"
213	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@
214
215$(lv2_dsp): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.o
216	-@mkdir -p $(shell dirname $@)
217	@echo "Creating LV2 plugin library for $(NAME)"
218	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(SHARED) -o $@
219
220$(lv2_ui): $(OBJS_UI) $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.o $(DGL_LIB)
221	-@mkdir -p $(shell dirname $@)
222	@echo "Creating LV2 plugin UI for $(NAME)"
223	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@
224
225# ---------------------------------------------------------------------------------------------------------------------
226# VST
227
228vst: $(vst)
229
230ifeq ($(HAVE_DGL),true)
231$(vst): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_VST.cpp.o $(BUILD_DIR)/DistrhoUIMain_VST.cpp.o $(DGL_LIB)
232else
233$(vst): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_VST.cpp.o
234endif
235	-@mkdir -p $(shell dirname $@)
236	@echo "Creating VST plugin for $(NAME)"
237	$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(DGL_LIBS) $(SHARED) -o $@
238
239# ---------------------------------------------------------------------------------------------------------------------
240
241-include $(OBJS_DSP:%.o=%.d)
242ifeq ($(HAVE_DGL),true)
243-include $(OBJS_UI:%.o=%.d)
244endif
245
246-include $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.d
247-include $(BUILD_DIR)/DistrhoPluginMain_LADSPA.cpp.d
248-include $(BUILD_DIR)/DistrhoPluginMain_DSSI.cpp.d
249-include $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.d
250-include $(BUILD_DIR)/DistrhoPluginMain_VST.cpp.d
251
252-include $(BUILD_DIR)/DistrhoUIMain_JACK.cpp.d
253-include $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.d
254-include $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.d
255-include $(BUILD_DIR)/DistrhoUIMain_VST.cpp.d
256
257# ---------------------------------------------------------------------------------------------------------------------
258