comparison Makefile @ 0:e20e214bdfb5

Added VAMP-Python binding project vampy
author fazekasgy
date Tue, 11 Mar 2008 19:47:34 +0000
parents
children e1b508f2f914
comparison
equal deleted inserted replaced
-1:000000000000 0:e20e214bdfb5
1
2 # Makefile for the Vamp plugin SDK. This builds the SDK objects,
3 # libraries, example plugins, and the test host. Please adjust to
4 # suit your operating system requirements.
5
6 APIDIR = sdk/vamp
7 SDKDIR = sdk/vamp-sdk
8 HOSTEXTDIR = sdk/vamp-sdk/hostext
9 #EXAMPLEDIR = sdk/examples
10 HOSTDIR = sdk/host
11 EXAMPLEDIR = .
12
13 ###
14 ### Start of user-serviceable parts
15 ###
16
17 # Default build target (or use "make <target>" to select one).
18 # Targets are:
19 # all -- build everything
20 # sdk -- build all the Vamp SDK libraries for plugins and hosts
21 # sdkstatic -- build only the static versions of the SDK libraries
22 # plugins -- build the example plugins (and the SDK if required)
23 # host -- build the simple Vamp plugin host (and the SDK if required)
24 # test -- build the host and example plugins, and run a quick test
25 # _clean -- remove binary targets
26 # distclean -- remove all targets
27 # cleanplug -- remove compiled plugin files
28
29 default: plugins
30
31 # Compile flags
32 #
33 CXXFLAGS := $(CXXFLAGS) -O2 -Wall -I. -fPIC
34
35 # ar, ranlib
36 #
37 AR := ar
38 RANLIB := ranlib
39
40 # Libraries required for the plugins.
41 # (Note that it is desirable to statically link libstdc++ if possible,
42 # because our plugin exposes only a C API so there are no boundary
43 # compatibility problems.)
44 #
45 PLUGIN_LIBS = $(SDKDIR)/libvamp-sdk.a
46 #PLUGIN_LIBS = $(SDKDIR)/libvamp-sdk.a $(shell g++ -print-file-name=libstdc++.a)
47
48 # File extension for a dynamically loadable object
49 #
50 #PLUGIN_EXT = .so
51 #PLUGIN_EXT = .dll
52 PLUGIN_EXT = .dylib
53
54 # Libraries required for the host.
55 #
56 HOST_LIBS = $(SDKDIR)/libvamp-hostsdk.a -lsndfile -ldl
57
58 # Locations for "make install". This will need quite a bit of
59 # editing for non-Linux platforms. Of course you don't necessarily
60 # have to use "make install".
61 #
62 INSTALL_PREFIX := /usr/local
63 INSTALL_API_HEADERS := $(INSTALL_PREFIX)/include/vamp
64 INSTALL_SDK_HEADERS := $(INSTALL_PREFIX)/include/vamp-sdk
65 INSTALL_HOSTEXT_HEADERS := $(INSTALL_PREFIX)/include/vamp-sdk/hostext
66 INSTALL_SDK_LIBS := $(INSTALL_PREFIX)/lib
67
68 INSTALL_SDK_LIBNAME := libvamp-sdk.dylib.1.1.0
69 INSTALL_SDK_LINK_ABI := libvamp-sdk.dylib.1
70 INSTALL_SDK_LINK_DEV := libvamp-sdk.dylib
71 INSTALL_SDK_STATIC := libvamp-sdk.o
72 INSTALL_SDK_LA := libvamp-sdk.la
73
74 INSTALL_HOSTSDK_LIBNAME := libvamp-hostsdk.dylib.2.0.0
75 INSTALL_HOSTSDK_LINK_ABI := libvamp-hostsdk.dylib.2
76 INSTALL_HOSTSDK_LINK_DEV := libvamp-hostsdk.dylib
77 INSTALL_HOSTSDK_STATIC := libvamp-hostsdk.a
78 INSTALL_HOSTSDK_LA := libvamp-hostsdk.la
79
80 INSTALL_PKGCONFIG := $(INSTALL_PREFIX)/lib/pkgconfig
81
82 # Install plugins to this location
83 #
84 LIBRARY_PREFIX :=/Library
85 INSTALL_PLUGIN :=$(LIBRARY_PREFIX)/Audio/Plug-Ins/Vamp
86
87 # Flags required to tell the compiler to create a dynamically loadable object
88 #
89 #DYNAMIC_LDFLAGS = --static-libgcc -shared -Wl,-Bsymbolic
90 DYNAMIC_LDFLAGS = -dynamiclib
91 PLUGIN_LDFLAGS = $(DYNAMIC_LDFLAGS)
92 SDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS) -Wl,-soname=$(INSTALL_SDK_LINK_ABI)
93 HOSTSDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS) -Wl,-soname=$(INSTALL_HOSTSDK_LINK_ABI)
94
95 ## For OS/X with g++:
96 #DYNAMIC_LDFLAGS = -dynamiclib
97 PLUGIN_LDFLAGS = $(DYNAMIC_LDFLAGS)
98 SDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS)
99 HOSTSDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS)
100
101
102 ### End of user-serviceable parts
103
104 # Plugin headers, compiler objects and targets
105
106 PLUGIN_HEADERS = \
107 $(EXAMPLEDIR)/PyPlugScanner.h \
108 $(EXAMPLEDIR)/PyPlugin.h
109
110 PLUGIN_OBJECTS = \
111 $(EXAMPLEDIR)/PyPlugScanner.o \
112 $(EXAMPLEDIR)/PyPlugin.o \
113 $(EXAMPLEDIR)/pyvamp-main.o
114
115 PLUGIN_NAME = vamp-pyvamp-plugin
116
117 PLUGIN_TARGET = \
118 $(EXAMPLEDIR)/$(PLUGIN_NAME)$(PLUGIN_EXT)
119
120 PLUGIN_DESCRIPTORS = \
121 $(EXAMPLEDIR)/exampleplugin.n3
122
123 # We need to link with python
124 # Links the actual python executable. forces to export symbol _PyMac_Error
125 PYTHON_LINK_AS_SHARED := \
126 -u _PyMac_Error /Library/Frameworks/Python.framework/Versions/2.5/Python
127
128 API_HEADERS = \
129 $(APIDIR)/vamp.h
130
131 SDK_HEADERS = \
132 $(SDKDIR)/Plugin.h \
133 $(SDKDIR)/PluginAdapter.h \
134 $(SDKDIR)/PluginBase.h \
135 $(SDKDIR)/RealTime.h
136
137 HOSTSDK_HEADERS = \
138 $(SDKDIR)/Plugin.h \
139 $(SDKDIR)/PluginBase.h \
140 $(SDKDIR)/PluginHostAdapter.h \
141 $(SDKDIR)/RealTime.h
142
143 HOSTEXT_HEADERS = \
144 $(HOSTEXTDIR)/PluginBufferingAdapter.h \
145 $(HOSTEXTDIR)/PluginChannelAdapter.h \
146 $(HOSTEXTDIR)/PluginInputDomainAdapter.h \
147 $(HOSTEXTDIR)/PluginLoader.h \
148 $(HOSTEXTDIR)/PluginWrapper.h
149
150 SDK_OBJECTS = \
151 $(SDKDIR)/PluginAdapter.o \
152 $(SDKDIR)/RealTime.o
153
154 HOSTSDK_OBJECTS = \
155 $(SDKDIR)/PluginHostAdapter.o \
156 $(HOSTEXTDIR)/PluginBufferingAdapter.o \
157 $(HOSTEXTDIR)/PluginChannelAdapter.o \
158 $(HOSTEXTDIR)/PluginInputDomainAdapter.o \
159 $(HOSTEXTDIR)/PluginLoader.o \
160 $(HOSTEXTDIR)/PluginWrapper.o \
161 $(SDKDIR)/RealTime.o
162
163 SDK_STATIC = \
164 $(SDKDIR)/libvamp-sdk.a
165
166 HOSTSDK_STATIC = \
167 $(SDKDIR)/libvamp-hostsdk.a
168
169 SDK_DYNAMIC = \
170 $(SDKDIR)/libvamp-sdk$(PLUGIN_EXT)
171
172 HOSTSDK_DYNAMIC = \
173 $(SDKDIR)/libvamp-hostsdk$(PLUGIN_EXT)
174
175 SDK_LA = \
176 $(SDKDIR)/libvamp-sdk.la
177
178 HOSTSDK_LA = \
179 $(SDKDIR)/libvamp-hostsdk.la
180
181 HOST_HEADERS = \
182 $(HOSTDIR)/system.h
183
184 HOST_OBJECTS = \
185 $(HOSTDIR)/vamp-simple-host.o
186
187 HOST_TARGET = \
188 $(HOSTDIR)/vamp-simple-host
189
190 #Primary Make rules
191 #
192
193 sdk: sdkstatic $(SDK_DYNAMIC) $(HOSTSDK_DYNAMIC)
194
195 sdkstatic:
196 $(SDK_STATIC) $(HOSTSDK_STATIC)
197 $(RANLIB) $(SDK_STATIC)
198 $(RANLIB) $(HOSTSDK_STATIC)
199
200 plugins: $(PLUGIN_TARGET)
201
202 host: $(HOST_TARGET)
203
204 all: sdk plugins host test
205
206 #This is where all the stuff gets built
207 #
208
209 $(SDK_STATIC): $(SDK_OBJECTS) $(API_HEADERS) $(SDK_HEADERS)
210 $(AR) r $@ $(SDK_OBJECTS)
211
212 $(HOSTSDK_STATIC): $(HOSTSDK_OBJECTS) $(API_HEADERS) $(HOSTSDK_HEADERS) $(HOSTEXT_HEADERS)
213 $(AR) r $@ $(HOSTSDK_OBJECTS)
214
215 $(SDK_DYNAMIC): $(SDK_OBJECTS) $(API_HEADERS) $(SDK_HEADERS)
216 $(CXX) $(LDFLAGS) $(SDK_DYNAMIC_LDFLAGS) -o $@ $(SDK_OBJECTS)
217
218 $(HOSTSDK_DYNAMIC): $(HOSTSDK_OBJECTS) $(API_HEADERS) $(HOSTSDK_HEADERS) $(HOSTEXT_HEADERS)
219 $(CXX) $(LDFLAGS) $(HOSTSDK_DYNAMIC_LDFLAGS) -o $@ $(HOSTSDK_OBJECTS)
220
221 $(PLUGIN_TARGET): $(PLUGIN_OBJECTS) $(SDK_STATIC) $(PLUGIN_HEADERS)
222 $(CXX) $(LDFLAGS) $(PLUGIN_LDFLAGS) -o $@ $(PLUGIN_OBJECTS) $(PLUGIN_LIBS) $(PYTHON_LINK_AS_SHARED)
223
224 $(HOST_TARGET): $(HOST_OBJECTS) $(HOSTSDK_STATIC) $(HOST_HEADERS)
225 $(CXX) $(LDFLAGS) $(HOST_LDFLAGS) -o $@ $(HOST_OBJECTS) $(HOST_LIBS)
226
227 test: plugins host
228 VAMP_PATH=$(EXAMPLEDIR) $(HOST_TARGET) -l
229
230 _clean:
231 rm -f $(SDK_OBJECTS) $(HOSTSDK_OBJECTS) $(PLUGIN_OBJECTS) $(HOST_OBJECTS)
232
233 cleanplug :
234 rm -f $(PLUGIN_OBJECTS)
235 rm -f $(EXAMPLEDIR)/$(PLUGIN_NAME)$(PLUGIN_EXT)
236 # rm -f $(LIBRARY_PREFIX)/$(INSTALL_PLUGIN)/$(PLUGIN_NAME)$(PLUGIN_EXT)
237
238
239 distclean: clean
240 rm -f $(SDK_STATIC) $(SDK_DYNAMIC) $(HOSTSDK_STATIC) $(HOSTSDK_DYNAMIC) $(PLUGIN_TARGET) $(HOST_TARGET) *~ */*~
241
242 _install: $(SDK_STATIC) $(SDK_DYNAMIC) $(HOSTSDK_STATIC) $(HOSTSDK_DYNAMIC) $(PLUGIN_TARGET) $(HOST_TARGET)
243 mkdir -p $(DESTDIR)$(INSTALL_API_HEADERS)
244 mkdir -p $(DESTDIR)$(INSTALL_SDK_HEADERS)
245 mkdir -p $(DESTDIR)$(INSTALL_HOSTEXT_HEADERS)
246 mkdir -p $(DESTDIR)$(INSTALL_SDK_LIBS)
247 mkdir -p $(DESTDIR)$(INSTALL_PKGCONFIG)
248 cp $(API_HEADERS) $(DESTDIR)$(INSTALL_API_HEADERS)
249 cp $(SDK_HEADERS) $(DESTDIR)$(INSTALL_SDK_HEADERS)
250 cp $(HOSTSDK_HEADERS) $(DESTDIR)$(INSTALL_SDK_HEADERS)
251 cp $(HOSTEXT_HEADERS) $(DESTDIR)$(INSTALL_HOSTEXT_HEADERS)
252 cp $(SDK_STATIC) $(DESTDIR)$(INSTALL_SDK_LIBS)
253 cp $(HOSTSDK_STATIC) $(DESTDIR)$(INSTALL_SDK_LIBS)
254 cp $(SDK_DYNAMIC) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LIBNAME)
255 cp $(HOSTSDK_DYNAMIC) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LIBNAME)
256 rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_ABI)
257 ln -s $(INSTALL_SDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_ABI)
258 rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_ABI)
259 ln -s $(INSTALL_HOSTSDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_ABI)
260 rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_DEV)
261 ln -s $(INSTALL_SDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_DEV)
262 rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_DEV)
263 ln -s $(INSTALL_HOSTSDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_DEV)
264 sed "s,%PREFIX%,$(INSTALL_PREFIX)," $(APIDIR)/vamp.pc.in \
265 > $(DESTDIR)$(INSTALL_PKGCONFIG)/vamp.pc
266 sed "s,%PREFIX%,$(INSTALL_PREFIX)," $(SDKDIR)/vamp-sdk.pc.in \
267 > $(DESTDIR)$(INSTALL_PKGCONFIG)/vamp-sdk.pc
268 sed "s,%PREFIX%,$(INSTALL_PREFIX)," $(SDKDIR)/vamp-hostsdk.pc.in \
269 > $(DESTDIR)$(INSTALL_PKGCONFIG)/vamp-hostsdk.pc
270 sed -e "s,%LIBNAME%,$(INSTALL_SDK_LIBNAME),g" \
271 -e "s,%LINK_ABI%,$(INSTALL_SDK_LINK_ABI),g" \
272 -e "s,%LINK_DEV%,$(INSTALL_SDK_LINK_DEV),g" \
273 -e "s,%STATIC%,$(INSTALL_SDK_STATIC),g" \
274 -e "s,%LIBS%,$(INSTALL_SDK_LIBS),g" $(SDK_LA).in \
275 > $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LA)
276 sed -e "s,%LIBNAME%,$(INSTALL_HOSTSDK_LIBNAME),g" \
277 -e "s,%LINK_ABI%,$(INSTALL_HOSTSDK_LINK_ABI),g" \
278 -e "s,%LINK_DEV%,$(INSTALL_HOSTSDK_LINK_DEV),g" \
279 -e "s,%STATIC%,$(INSTALL_HOSTSDK_STATIC),g" \
280 -e "s,%LIBS%,$(INSTALL_SDK_LIBS),g" $(HOSTSDK_LA).in \
281 > $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LA)
282
283 installplug:
284 mkdir -p $(INSTALL_PLUGIN)
285 rm -f $(INSTALL_PLUGIN)/$(PLUGIN_NAME)$(PLUGIN_EXT)
286 cp $(PLUGIN_NAME)$(PLUGIN_EXT) $(INSTALL_PLUGIN)/$(PLUGIN_NAME)$(PLUGIN_EXT)
287 # cp $(PLUGIN_DESCRIPTORS) $(INSTALL_PLUGIN)
288
289 installplugin: installplug