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