fazekasgy@0: fazekasgy@0: # Makefile for the Vamp plugin SDK. This builds the SDK objects, fazekasgy@0: # libraries, example plugins, and the test host. Please adjust to fazekasgy@0: # suit your operating system requirements. fazekasgy@0: fazekasgy@0: APIDIR = sdk/vamp fazekasgy@0: SDKDIR = sdk/vamp-sdk fazekasgy@0: HOSTEXTDIR = sdk/vamp-sdk/hostext fazekasgy@0: #EXAMPLEDIR = sdk/examples fazekasgy@0: HOSTDIR = sdk/host fazekasgy@0: EXAMPLEDIR = . fazekasgy@0: fazekasgy@0: ### fazekasgy@0: ### Start of user-serviceable parts fazekasgy@0: ### fazekasgy@0: fazekasgy@0: # Default build target (or use "make " to select one). fazekasgy@0: # Targets are: fazekasgy@0: # all -- build everything fazekasgy@0: # sdk -- build all the Vamp SDK libraries for plugins and hosts fazekasgy@0: # sdkstatic -- build only the static versions of the SDK libraries fazekasgy@0: # plugins -- build the example plugins (and the SDK if required) fazekasgy@0: # host -- build the simple Vamp plugin host (and the SDK if required) fazekasgy@0: # test -- build the host and example plugins, and run a quick test fazekasgy@0: # _clean -- remove binary targets fazekasgy@0: # distclean -- remove all targets fazekasgy@0: # cleanplug -- remove compiled plugin files fazekasgy@0: fazekasgy@0: default: plugins fazekasgy@0: fazekasgy@0: # Compile flags fazekasgy@0: # fazekasgy@0: CXXFLAGS := $(CXXFLAGS) -O2 -Wall -I. -fPIC fazekasgy@0: fazekasgy@0: # ar, ranlib fazekasgy@0: # fazekasgy@0: AR := ar fazekasgy@0: RANLIB := ranlib fazekasgy@0: fazekasgy@0: # Libraries required for the plugins. fazekasgy@0: # (Note that it is desirable to statically link libstdc++ if possible, fazekasgy@0: # because our plugin exposes only a C API so there are no boundary fazekasgy@0: # compatibility problems.) fazekasgy@0: # fazekasgy@0: PLUGIN_LIBS = $(SDKDIR)/libvamp-sdk.a fazekasgy@0: #PLUGIN_LIBS = $(SDKDIR)/libvamp-sdk.a $(shell g++ -print-file-name=libstdc++.a) fazekasgy@0: fazekasgy@0: # File extension for a dynamically loadable object fazekasgy@0: # fazekasgy@0: #PLUGIN_EXT = .so fazekasgy@0: #PLUGIN_EXT = .dll fazekasgy@0: PLUGIN_EXT = .dylib fazekasgy@0: fazekasgy@0: # Libraries required for the host. fazekasgy@0: # fazekasgy@0: HOST_LIBS = $(SDKDIR)/libvamp-hostsdk.a -lsndfile -ldl fazekasgy@0: fazekasgy@0: # Locations for "make install". This will need quite a bit of fazekasgy@0: # editing for non-Linux platforms. Of course you don't necessarily fazekasgy@0: # have to use "make install". fazekasgy@0: # fazekasgy@0: INSTALL_PREFIX := /usr/local fazekasgy@0: INSTALL_API_HEADERS := $(INSTALL_PREFIX)/include/vamp fazekasgy@0: INSTALL_SDK_HEADERS := $(INSTALL_PREFIX)/include/vamp-sdk fazekasgy@0: INSTALL_HOSTEXT_HEADERS := $(INSTALL_PREFIX)/include/vamp-sdk/hostext fazekasgy@0: INSTALL_SDK_LIBS := $(INSTALL_PREFIX)/lib fazekasgy@0: fazekasgy@0: INSTALL_SDK_LIBNAME := libvamp-sdk.dylib.1.1.0 fazekasgy@0: INSTALL_SDK_LINK_ABI := libvamp-sdk.dylib.1 fazekasgy@0: INSTALL_SDK_LINK_DEV := libvamp-sdk.dylib fazekasgy@0: INSTALL_SDK_STATIC := libvamp-sdk.o fazekasgy@0: INSTALL_SDK_LA := libvamp-sdk.la fazekasgy@0: fazekasgy@0: INSTALL_HOSTSDK_LIBNAME := libvamp-hostsdk.dylib.2.0.0 fazekasgy@0: INSTALL_HOSTSDK_LINK_ABI := libvamp-hostsdk.dylib.2 fazekasgy@0: INSTALL_HOSTSDK_LINK_DEV := libvamp-hostsdk.dylib fazekasgy@0: INSTALL_HOSTSDK_STATIC := libvamp-hostsdk.a fazekasgy@0: INSTALL_HOSTSDK_LA := libvamp-hostsdk.la fazekasgy@0: fazekasgy@0: INSTALL_PKGCONFIG := $(INSTALL_PREFIX)/lib/pkgconfig fazekasgy@0: fazekasgy@0: # Install plugins to this location fazekasgy@0: # fazekasgy@0: LIBRARY_PREFIX :=/Library fazekasgy@0: INSTALL_PLUGIN :=$(LIBRARY_PREFIX)/Audio/Plug-Ins/Vamp fazekasgy@0: fazekasgy@0: # Flags required to tell the compiler to create a dynamically loadable object fazekasgy@0: # fazekasgy@0: #DYNAMIC_LDFLAGS = --static-libgcc -shared -Wl,-Bsymbolic fazekasgy@0: DYNAMIC_LDFLAGS = -dynamiclib fazekasgy@0: PLUGIN_LDFLAGS = $(DYNAMIC_LDFLAGS) fazekasgy@0: SDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS) -Wl,-soname=$(INSTALL_SDK_LINK_ABI) fazekasgy@0: HOSTSDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS) -Wl,-soname=$(INSTALL_HOSTSDK_LINK_ABI) fazekasgy@0: fazekasgy@0: ## For OS/X with g++: fazekasgy@0: #DYNAMIC_LDFLAGS = -dynamiclib fazekasgy@0: PLUGIN_LDFLAGS = $(DYNAMIC_LDFLAGS) fazekasgy@0: SDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS) fazekasgy@0: HOSTSDK_DYNAMIC_LDFLAGS = $(DYNAMIC_LDFLAGS) fazekasgy@0: fazekasgy@0: fazekasgy@0: ### End of user-serviceable parts fazekasgy@0: fazekasgy@0: # Plugin headers, compiler objects and targets fazekasgy@0: fazekasgy@0: PLUGIN_HEADERS = \ fazekasgy@0: $(EXAMPLEDIR)/PyPlugScanner.h \ fazekasgy@0: $(EXAMPLEDIR)/PyPlugin.h fazekasgy@0: fazekasgy@0: PLUGIN_OBJECTS = \ fazekasgy@0: $(EXAMPLEDIR)/PyPlugScanner.o \ fazekasgy@0: $(EXAMPLEDIR)/PyPlugin.o \ fazekasgy@0: $(EXAMPLEDIR)/pyvamp-main.o fazekasgy@0: fazekasgy@0: PLUGIN_NAME = vamp-pyvamp-plugin fazekasgy@0: fazekasgy@0: PLUGIN_TARGET = \ fazekasgy@0: $(EXAMPLEDIR)/$(PLUGIN_NAME)$(PLUGIN_EXT) fazekasgy@0: fazekasgy@0: PLUGIN_DESCRIPTORS = \ fazekasgy@0: $(EXAMPLEDIR)/exampleplugin.n3 fazekasgy@0: fazekasgy@0: # We need to link with python fazekasgy@0: # Links the actual python executable. forces to export symbol _PyMac_Error fazekasgy@0: PYTHON_LINK_AS_SHARED := \ fazekasgy@0: -u _PyMac_Error /Library/Frameworks/Python.framework/Versions/2.5/Python fazekasgy@0: fazekasgy@0: API_HEADERS = \ fazekasgy@0: $(APIDIR)/vamp.h fazekasgy@0: fazekasgy@0: SDK_HEADERS = \ fazekasgy@0: $(SDKDIR)/Plugin.h \ fazekasgy@0: $(SDKDIR)/PluginAdapter.h \ fazekasgy@0: $(SDKDIR)/PluginBase.h \ fazekasgy@0: $(SDKDIR)/RealTime.h fazekasgy@0: fazekasgy@0: HOSTSDK_HEADERS = \ fazekasgy@0: $(SDKDIR)/Plugin.h \ fazekasgy@0: $(SDKDIR)/PluginBase.h \ fazekasgy@0: $(SDKDIR)/PluginHostAdapter.h \ fazekasgy@0: $(SDKDIR)/RealTime.h fazekasgy@0: fazekasgy@0: HOSTEXT_HEADERS = \ fazekasgy@0: $(HOSTEXTDIR)/PluginBufferingAdapter.h \ fazekasgy@0: $(HOSTEXTDIR)/PluginChannelAdapter.h \ fazekasgy@0: $(HOSTEXTDIR)/PluginInputDomainAdapter.h \ fazekasgy@0: $(HOSTEXTDIR)/PluginLoader.h \ fazekasgy@0: $(HOSTEXTDIR)/PluginWrapper.h fazekasgy@0: fazekasgy@0: SDK_OBJECTS = \ fazekasgy@0: $(SDKDIR)/PluginAdapter.o \ fazekasgy@0: $(SDKDIR)/RealTime.o fazekasgy@0: fazekasgy@0: HOSTSDK_OBJECTS = \ fazekasgy@0: $(SDKDIR)/PluginHostAdapter.o \ fazekasgy@0: $(HOSTEXTDIR)/PluginBufferingAdapter.o \ fazekasgy@0: $(HOSTEXTDIR)/PluginChannelAdapter.o \ fazekasgy@0: $(HOSTEXTDIR)/PluginInputDomainAdapter.o \ fazekasgy@0: $(HOSTEXTDIR)/PluginLoader.o \ fazekasgy@0: $(HOSTEXTDIR)/PluginWrapper.o \ fazekasgy@0: $(SDKDIR)/RealTime.o fazekasgy@0: fazekasgy@0: SDK_STATIC = \ fazekasgy@0: $(SDKDIR)/libvamp-sdk.a fazekasgy@0: fazekasgy@0: HOSTSDK_STATIC = \ fazekasgy@0: $(SDKDIR)/libvamp-hostsdk.a fazekasgy@0: fazekasgy@0: SDK_DYNAMIC = \ fazekasgy@0: $(SDKDIR)/libvamp-sdk$(PLUGIN_EXT) fazekasgy@0: fazekasgy@0: HOSTSDK_DYNAMIC = \ fazekasgy@0: $(SDKDIR)/libvamp-hostsdk$(PLUGIN_EXT) fazekasgy@0: fazekasgy@0: SDK_LA = \ fazekasgy@0: $(SDKDIR)/libvamp-sdk.la fazekasgy@0: fazekasgy@0: HOSTSDK_LA = \ fazekasgy@0: $(SDKDIR)/libvamp-hostsdk.la fazekasgy@0: fazekasgy@0: HOST_HEADERS = \ fazekasgy@0: $(HOSTDIR)/system.h fazekasgy@0: fazekasgy@0: HOST_OBJECTS = \ fazekasgy@0: $(HOSTDIR)/vamp-simple-host.o fazekasgy@0: fazekasgy@0: HOST_TARGET = \ fazekasgy@0: $(HOSTDIR)/vamp-simple-host fazekasgy@0: fazekasgy@0: #Primary Make rules fazekasgy@0: # fazekasgy@0: fazekasgy@0: sdk: sdkstatic $(SDK_DYNAMIC) $(HOSTSDK_DYNAMIC) fazekasgy@0: fazekasgy@0: sdkstatic: fazekasgy@0: $(SDK_STATIC) $(HOSTSDK_STATIC) fazekasgy@0: $(RANLIB) $(SDK_STATIC) fazekasgy@0: $(RANLIB) $(HOSTSDK_STATIC) fazekasgy@0: fazekasgy@0: plugins: $(PLUGIN_TARGET) fazekasgy@0: fazekasgy@0: host: $(HOST_TARGET) fazekasgy@0: fazekasgy@0: all: sdk plugins host test fazekasgy@0: fazekasgy@0: #This is where all the stuff gets built fazekasgy@0: # fazekasgy@0: fazekasgy@0: $(SDK_STATIC): $(SDK_OBJECTS) $(API_HEADERS) $(SDK_HEADERS) fazekasgy@0: $(AR) r $@ $(SDK_OBJECTS) fazekasgy@0: fazekasgy@0: $(HOSTSDK_STATIC): $(HOSTSDK_OBJECTS) $(API_HEADERS) $(HOSTSDK_HEADERS) $(HOSTEXT_HEADERS) fazekasgy@0: $(AR) r $@ $(HOSTSDK_OBJECTS) fazekasgy@0: fazekasgy@0: $(SDK_DYNAMIC): $(SDK_OBJECTS) $(API_HEADERS) $(SDK_HEADERS) fazekasgy@0: $(CXX) $(LDFLAGS) $(SDK_DYNAMIC_LDFLAGS) -o $@ $(SDK_OBJECTS) fazekasgy@0: fazekasgy@0: $(HOSTSDK_DYNAMIC): $(HOSTSDK_OBJECTS) $(API_HEADERS) $(HOSTSDK_HEADERS) $(HOSTEXT_HEADERS) fazekasgy@0: $(CXX) $(LDFLAGS) $(HOSTSDK_DYNAMIC_LDFLAGS) -o $@ $(HOSTSDK_OBJECTS) fazekasgy@0: fazekasgy@0: $(PLUGIN_TARGET): $(PLUGIN_OBJECTS) $(SDK_STATIC) $(PLUGIN_HEADERS) fazekasgy@0: $(CXX) $(LDFLAGS) $(PLUGIN_LDFLAGS) -o $@ $(PLUGIN_OBJECTS) $(PLUGIN_LIBS) $(PYTHON_LINK_AS_SHARED) fazekasgy@0: fazekasgy@0: $(HOST_TARGET): $(HOST_OBJECTS) $(HOSTSDK_STATIC) $(HOST_HEADERS) fazekasgy@0: $(CXX) $(LDFLAGS) $(HOST_LDFLAGS) -o $@ $(HOST_OBJECTS) $(HOST_LIBS) fazekasgy@0: fazekasgy@0: test: plugins host fazekasgy@0: VAMP_PATH=$(EXAMPLEDIR) $(HOST_TARGET) -l fazekasgy@0: fazekasgy@0: _clean: fazekasgy@0: rm -f $(SDK_OBJECTS) $(HOSTSDK_OBJECTS) $(PLUGIN_OBJECTS) $(HOST_OBJECTS) fazekasgy@0: fazekasgy@0: cleanplug : fazekasgy@0: rm -f $(PLUGIN_OBJECTS) fazekasgy@0: rm -f $(EXAMPLEDIR)/$(PLUGIN_NAME)$(PLUGIN_EXT) fazekasgy@0: # rm -f $(LIBRARY_PREFIX)/$(INSTALL_PLUGIN)/$(PLUGIN_NAME)$(PLUGIN_EXT) fazekasgy@0: fazekasgy@0: fazekasgy@0: distclean: clean fazekasgy@0: rm -f $(SDK_STATIC) $(SDK_DYNAMIC) $(HOSTSDK_STATIC) $(HOSTSDK_DYNAMIC) $(PLUGIN_TARGET) $(HOST_TARGET) *~ */*~ fazekasgy@0: fazekasgy@0: _install: $(SDK_STATIC) $(SDK_DYNAMIC) $(HOSTSDK_STATIC) $(HOSTSDK_DYNAMIC) $(PLUGIN_TARGET) $(HOST_TARGET) fazekasgy@0: mkdir -p $(DESTDIR)$(INSTALL_API_HEADERS) fazekasgy@0: mkdir -p $(DESTDIR)$(INSTALL_SDK_HEADERS) fazekasgy@0: mkdir -p $(DESTDIR)$(INSTALL_HOSTEXT_HEADERS) fazekasgy@0: mkdir -p $(DESTDIR)$(INSTALL_SDK_LIBS) fazekasgy@0: mkdir -p $(DESTDIR)$(INSTALL_PKGCONFIG) fazekasgy@0: cp $(API_HEADERS) $(DESTDIR)$(INSTALL_API_HEADERS) fazekasgy@0: cp $(SDK_HEADERS) $(DESTDIR)$(INSTALL_SDK_HEADERS) fazekasgy@0: cp $(HOSTSDK_HEADERS) $(DESTDIR)$(INSTALL_SDK_HEADERS) fazekasgy@0: cp $(HOSTEXT_HEADERS) $(DESTDIR)$(INSTALL_HOSTEXT_HEADERS) fazekasgy@0: cp $(SDK_STATIC) $(DESTDIR)$(INSTALL_SDK_LIBS) fazekasgy@0: cp $(HOSTSDK_STATIC) $(DESTDIR)$(INSTALL_SDK_LIBS) fazekasgy@0: cp $(SDK_DYNAMIC) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LIBNAME) fazekasgy@0: cp $(HOSTSDK_DYNAMIC) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LIBNAME) fazekasgy@0: rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_ABI) fazekasgy@0: ln -s $(INSTALL_SDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_ABI) fazekasgy@0: rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_ABI) fazekasgy@0: ln -s $(INSTALL_HOSTSDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_ABI) fazekasgy@0: rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_DEV) fazekasgy@0: ln -s $(INSTALL_SDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LINK_DEV) fazekasgy@0: rm -f $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_DEV) fazekasgy@0: ln -s $(INSTALL_HOSTSDK_LIBNAME) $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LINK_DEV) fazekasgy@0: sed "s,%PREFIX%,$(INSTALL_PREFIX)," $(APIDIR)/vamp.pc.in \ fazekasgy@0: > $(DESTDIR)$(INSTALL_PKGCONFIG)/vamp.pc fazekasgy@0: sed "s,%PREFIX%,$(INSTALL_PREFIX)," $(SDKDIR)/vamp-sdk.pc.in \ fazekasgy@0: > $(DESTDIR)$(INSTALL_PKGCONFIG)/vamp-sdk.pc fazekasgy@0: sed "s,%PREFIX%,$(INSTALL_PREFIX)," $(SDKDIR)/vamp-hostsdk.pc.in \ fazekasgy@0: > $(DESTDIR)$(INSTALL_PKGCONFIG)/vamp-hostsdk.pc fazekasgy@0: sed -e "s,%LIBNAME%,$(INSTALL_SDK_LIBNAME),g" \ fazekasgy@0: -e "s,%LINK_ABI%,$(INSTALL_SDK_LINK_ABI),g" \ fazekasgy@0: -e "s,%LINK_DEV%,$(INSTALL_SDK_LINK_DEV),g" \ fazekasgy@0: -e "s,%STATIC%,$(INSTALL_SDK_STATIC),g" \ fazekasgy@0: -e "s,%LIBS%,$(INSTALL_SDK_LIBS),g" $(SDK_LA).in \ fazekasgy@0: > $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_SDK_LA) fazekasgy@0: sed -e "s,%LIBNAME%,$(INSTALL_HOSTSDK_LIBNAME),g" \ fazekasgy@0: -e "s,%LINK_ABI%,$(INSTALL_HOSTSDK_LINK_ABI),g" \ fazekasgy@0: -e "s,%LINK_DEV%,$(INSTALL_HOSTSDK_LINK_DEV),g" \ fazekasgy@0: -e "s,%STATIC%,$(INSTALL_HOSTSDK_STATIC),g" \ fazekasgy@0: -e "s,%LIBS%,$(INSTALL_SDK_LIBS),g" $(HOSTSDK_LA).in \ fazekasgy@0: > $(DESTDIR)$(INSTALL_SDK_LIBS)/$(INSTALL_HOSTSDK_LA) fazekasgy@0: fazekasgy@0: installplug: fazekasgy@0: mkdir -p $(INSTALL_PLUGIN) fazekasgy@0: rm -f $(INSTALL_PLUGIN)/$(PLUGIN_NAME)$(PLUGIN_EXT) fazekasgy@0: cp $(PLUGIN_NAME)$(PLUGIN_EXT) $(INSTALL_PLUGIN)/$(PLUGIN_NAME)$(PLUGIN_EXT) fazekasgy@0: # cp $(PLUGIN_DESCRIPTORS) $(INSTALL_PLUGIN) fazekasgy@0: fazekasgy@0: installplugin: installplug