
# Makefile for the Vamp plugin SDK.  This builds the SDK objects,
# libraries, example plugins, and the test host.  Please adjust to
# suit your operating system requirements.
#
# This version of the Makefile is approximately correct for OS/X 10.7.
# Note that it has no "install" target; the following are the
# library and related files that may be of interest resulting from
# the build:
# 
#   libvamp-sdk.dylib                 [SDK dynamic library for plugins]
#   libvamp-hostsdk.dylib             [SDK dynamic library for hosts]
#
#   libvamp-sdk.a                     [SDK static library for plugins]
#   libvamp-hostsdk.a                 [SDK static library for hosts]
#
#   examples/vamp-example-plugins.cat     [copy this to your Vamp plugin dir]
#   examples/vamp-example-plugins.dylib   [copy this to your Vamp plugin dir]
#
#   host/vamp-simple-host                 [requires libsndfile to build]
#
#   rdf/generator/vamp-rdf-template-generator

# Makefile for the Vamp plugin SDK.  This builds the SDK objects,
# libraries, example plugins, and the test host.  Please adjust to
# suit your operating system requirements.

APIDIR		= vamp

SDKDIR		= vamp-sdk
HOSTSDKDIR	= vamp-hostsdk

SRCDIR		= src
SDKSRCDIR	= src/vamp-sdk
HOSTSDKSRCDIR	= src/vamp-hostsdk

EXAMPLEDIR	= examples
HOSTDIR		= host
PCDIR		= pkgconfig
LADIR		= build
RDFGENDIR	= rdf/generator

###
### Start of user-serviceable parts
###

# Default build target (or use "make <target>" to select one).
# Targets are:
#   all       -- build everything
#   sdk       -- build all the Vamp SDK libraries for plugins and hosts
#   sdkstatic -- build only the static versions of the SDK libraries
#   plugins   -- build the example plugins (and the SDK if required)
#   host      -- build the simple Vamp plugin host (and the SDK if required)
#   rdfgen    -- build the RDF template generator (and the SDK if required)
#   test      -- build the host and example plugins, and run a quick test
#   clean     -- remove binary targets
#   distclean -- remove all targets
#
default:	all

# Minimum version of OS/X to target. This will determine the
# compiler's choice of platform SDK material
MINVERSION := 10.6

# Our default is to try to build for all architectures supported by
# the MINVERSION in a universal binary.
#
ARCHFLAGS = -mmacosx-version-min=$(MINVERSION) -arch x86_64 -arch i386

# Compile flags
#
CFLAGS		= $(ARCHFLAGS) -fPIC
CXXFLAGS	= $(ARCHFLAGS) -O2 -Wall -I. -I../10.6/inst/include -fPIC

# Link flags common to all link targets
#
LDFLAGS		= $(ARCHFLAGS) 

# ar, ranlib
#
AR		= ar
RANLIB		= ranlib
RM_F		= rm -f

# Libraries required for the plugins.
#
PLUGIN_LIBS	= ./libvamp-sdk.a

# File extension for a dynamically loadable object
#
PLUGIN_EXT	= .dylib

# Libraries required for the host.
#
HOST_LIBS	= ./libvamp-hostsdk.a -L../10.6/inst/lib -lsndfile -logg -lvorbis -lvorbisenc -lflac -ldl

# Libraries required for the RDF template generator.
#
RDFGEN_LIBS	= ./libvamp-hostsdk.a -ldl

# Flags required to tell the compiler to create a dynamically loadable object
#
DYNAMIC_LDFLAGS		= $(ARCHFLAGS) -dynamiclib 

# Flags for building specific plugin and library targets.  We need to
# tell the linker the formal name for the library, and for plugins we
# also want to tell the linker to make all symbols in the library
# hidden except for the public entry point (making for a tidier library).
#
PLUGIN_LDFLAGS		= $(DYNAMIC_LDFLAGS) \
			  -install_name vamp-example-plugins.dylib \
			  -exported_symbols_list build/vamp-plugin.list
SDK_DYNAMIC_LDFLAGS	= $(DYNAMIC_LDFLAGS) -install_name libvamp-sdk.dylib
HOSTSDK_DYNAMIC_LDFLAGS	= $(DYNAMIC_LDFLAGS) -install_name libvamp-hostsdk.dylib


### End of user-serviceable parts


API_HEADERS	= \
		$(APIDIR)/vamp.h

SDK_HEADERS	= \
		$(SDKDIR)/Plugin.h \
		$(SDKDIR)/PluginAdapter.h \
		$(SDKDIR)/PluginBase.h \
		$(SDKDIR)/RealTime.h \
		$(SDKDIR)/FFT.h \
		$(SDKDIR)/plugguard.h \
		$(SDKDIR)/vamp-sdk.h

HOSTSDK_HEADERS	= \
		$(HOSTSDKDIR)/Plugin.h \
		$(HOSTSDKDIR)/PluginBase.h \
		$(HOSTSDKDIR)/PluginHostAdapter.h \
		$(HOSTSDKDIR)/RealTime.h \
		$(HOSTSDKDIR)/PluginBufferingAdapter.h \
		$(HOSTSDKDIR)/PluginChannelAdapter.h \
		$(HOSTSDKDIR)/PluginInputDomainAdapter.h \
		$(HOSTSDKDIR)/PluginLoader.h \
		$(HOSTSDKDIR)/PluginSummarisingAdapter.h \
		$(HOSTSDKDIR)/PluginWrapper.h \
		$(HOSTSDKDIR)/hostguard.h \
		$(HOSTSDKDIR)/vamp-hostsdk.h

SDK_OBJECTS	= \
		$(SDKSRCDIR)/PluginAdapter.o \
		$(SDKSRCDIR)/RealTime.o \
		$(SDKSRCDIR)/FFT.o \
		$(SDKSRCDIR)/acsymbols.o 

HOSTSDK_OBJECTS	= \
		$(HOSTSDKSRCDIR)/PluginHostAdapter.o \
		$(HOSTSDKSRCDIR)/RealTime.o \
		$(HOSTSDKSRCDIR)/PluginBufferingAdapter.o \
		$(HOSTSDKSRCDIR)/PluginChannelAdapter.o \
		$(HOSTSDKSRCDIR)/PluginInputDomainAdapter.o \
		$(HOSTSDKSRCDIR)/PluginLoader.o \
		$(HOSTSDKSRCDIR)/PluginSummarisingAdapter.o \
		$(HOSTSDKSRCDIR)/PluginWrapper.o \
		$(HOSTSDKSRCDIR)/acsymbols.o 

SDK_STATIC	= \
		./libvamp-sdk.a

HOSTSDK_STATIC	= \
		./libvamp-hostsdk.a

SDK_DYNAMIC	= \
		./libvamp-sdk$(PLUGIN_EXT)

HOSTSDK_DYNAMIC	= \
		./libvamp-hostsdk$(PLUGIN_EXT)

SDK_LA		= \
		$(LADIR)/libvamp-sdk.la

HOSTSDK_LA	= \
		$(LADIR)/libvamp-hostsdk.la

PLUGIN_HEADERS	= \
		$(EXAMPLEDIR)/SpectralCentroid.h \
		$(EXAMPLEDIR)/PowerSpectrum.h \
		$(EXAMPLEDIR)/PercussionOnsetDetector.h \
		$(EXAMPLEDIR)/FixedTempoEstimator.h \
		$(EXAMPLEDIR)/AmplitudeFollower.h \
		$(EXAMPLEDIR)/ZeroCrossing.h

PLUGIN_OBJECTS	= \
		$(EXAMPLEDIR)/SpectralCentroid.o \
		$(EXAMPLEDIR)/PowerSpectrum.o \
		$(EXAMPLEDIR)/PercussionOnsetDetector.o \
		$(EXAMPLEDIR)/FixedTempoEstimator.o \
		$(EXAMPLEDIR)/AmplitudeFollower.o \
		$(EXAMPLEDIR)/ZeroCrossing.o \
		$(EXAMPLEDIR)/plugins.o

PLUGIN_TARGET	= \
		$(EXAMPLEDIR)/vamp-example-plugins$(PLUGIN_EXT)

HOST_HEADERS	= \
		$(HOSTDIR)/system.h

HOST_OBJECTS	= \
		$(HOSTDIR)/vamp-simple-host.o

HOST_TARGET	= \
		$(HOSTDIR)/vamp-simple-host

RDFGEN_OBJECTS	= \
		$(RDFGENDIR)/vamp-rdf-template-generator.o

RDFGEN_TARGET	= \
		$(RDFGENDIR)/vamp-rdf-template-generator

sdk:		sdkstatic $(SDK_DYNAMIC) $(HOSTSDK_DYNAMIC)

sdkstatic:	$(SDK_STATIC) $(HOSTSDK_STATIC)
		$(RANLIB) $(SDK_STATIC)
		$(RANLIB) $(HOSTSDK_STATIC)

plugins:	$(PLUGIN_TARGET)

host:		$(HOST_TARGET)

rdfgen:		$(RDFGEN_TARGET)

all:		sdk plugins host rdfgen test

$(SDK_STATIC):	$(SDK_OBJECTS) $(API_HEADERS) $(SDK_HEADERS)
		$(RM_F) $@
		$(AR) r $@ $(SDK_OBJECTS)

$(HOSTSDK_STATIC):	$(HOSTSDK_OBJECTS) $(API_HEADERS) $(HOSTSDK_HEADERS)
		$(RM_F) $@
		$(AR) r $@ $(HOSTSDK_OBJECTS)

$(SDK_DYNAMIC):	$(SDK_OBJECTS) $(API_HEADERS) $(SDK_HEADERS)
		$(CXX) $(LDFLAGS) $(SDK_DYNAMIC_LDFLAGS) -o $@ $(SDK_OBJECTS)

$(HOSTSDK_DYNAMIC):	$(HOSTSDK_OBJECTS) $(API_HEADERS) $(HOSTSDK_HEADERS)
		$(CXX) $(LDFLAGS) $(HOSTSDK_DYNAMIC_LDFLAGS) -o $@ $(HOSTSDK_OBJECTS)

$(PLUGIN_TARGET):	$(PLUGIN_OBJECTS) $(SDK_STATIC) $(PLUGIN_HEADERS)
		$(CXX) $(LDFLAGS) $(PLUGIN_LDFLAGS) -o $@ $(PLUGIN_OBJECTS) $(PLUGIN_LIBS)

$(HOST_TARGET):	$(HOST_OBJECTS) $(HOSTSDK_STATIC) $(HOST_HEADERS)
		$(CXX) $(LDFLAGS) $(HOST_LDFLAGS) -o $@ $(HOST_OBJECTS) $(HOST_LIBS)

$(RDFGEN_TARGET):	$(RDFGEN_OBJECTS) $(HOSTSDK_STATIC) 
		$(CXX) $(LDFLAGS) $(RDFGEN_LDFLAGS) -o $@ $(RDFGEN_OBJECTS) $(RDFGEN_LIBS)

test:		plugins host
		VAMP_PATH=$(EXAMPLEDIR) $(HOST_TARGET) -l

clean:		
		rm -f $(SDK_OBJECTS) $(HOSTSDK_OBJECTS) $(PLUGIN_OBJECTS) $(HOST_OBJECTS) $(RDFGEN_OBJECTS)

distclean:	clean
		rm -f $(SDK_STATIC) $(SDK_DYNAMIC) $(HOSTSDK_STATIC) $(HOSTSDK_DYNAMIC) $(PLUGIN_TARGET) $(HOST_TARGET) $(RDFGEN_TARGET) *~ */*~

# DO NOT DELETE

examples/AmplitudeFollower.o: examples/AmplitudeFollower.h vamp-sdk/Plugin.h
examples/AmplitudeFollower.o: vamp-sdk/PluginBase.h vamp-sdk/plugguard.h
examples/AmplitudeFollower.o: vamp-sdk/RealTime.h
examples/FixedTempoEstimator.o: examples/FixedTempoEstimator.h
examples/FixedTempoEstimator.o: vamp-sdk/Plugin.h vamp-sdk/PluginBase.h
examples/FixedTempoEstimator.o: vamp-sdk/plugguard.h vamp-sdk/RealTime.h
examples/PercussionOnsetDetector.o: examples/PercussionOnsetDetector.h
examples/PercussionOnsetDetector.o: vamp-sdk/Plugin.h vamp-sdk/PluginBase.h
examples/PercussionOnsetDetector.o: vamp-sdk/plugguard.h vamp-sdk/RealTime.h
examples/SpectralCentroid.o: examples/SpectralCentroid.h vamp-sdk/Plugin.h
examples/SpectralCentroid.o: vamp-sdk/PluginBase.h vamp-sdk/plugguard.h
examples/SpectralCentroid.o: vamp-sdk/RealTime.h
examples/PowerSpectrum.o: examples/PowerSpectrum.h vamp-sdk/Plugin.h
examples/PowerSpectrum.o: vamp-sdk/PluginBase.h vamp-sdk/plugguard.h
examples/PowerSpectrum.o: vamp-sdk/RealTime.h
examples/ZeroCrossing.o: examples/ZeroCrossing.h vamp-sdk/Plugin.h
examples/ZeroCrossing.o: vamp-sdk/PluginBase.h vamp-sdk/plugguard.h
examples/ZeroCrossing.o: vamp-sdk/RealTime.h
examples/plugins.o: vamp/vamp.h vamp-sdk/PluginAdapter.h vamp-sdk/Plugin.h
examples/plugins.o: vamp-sdk/PluginBase.h vamp-sdk/plugguard.h
examples/plugins.o: vamp-sdk/RealTime.h examples/ZeroCrossing.h
examples/plugins.o: vamp-sdk/Plugin.h examples/SpectralCentroid.h
examples/plugins.o: examples/PercussionOnsetDetector.h examples/PowerSpectrum.h
examples/plugins.o: examples/FixedTempoEstimator.h
examples/plugins.o: examples/AmplitudeFollower.h
host/vamp-simple-host.o: ./vamp-hostsdk/PluginHostAdapter.h vamp/vamp.h
host/vamp-simple-host.o: vamp-sdk/Plugin.h vamp-sdk/PluginBase.h
host/vamp-simple-host.o: vamp-sdk/plugguard.h vamp-sdk/RealTime.h
host/vamp-simple-host.o: ./vamp-hostsdk/PluginInputDomainAdapter.h
host/vamp-simple-host.o: ./vamp-hostsdk/PluginWrapper.h
host/vamp-simple-host.o: ./vamp-hostsdk/Plugin.h ./vamp-hostsdk/hostguard.h
host/vamp-simple-host.o: vamp-sdk/Plugin.h
host/vamp-simple-host.o: ./vamp-hostsdk/PluginLoader.h host/system.h
rdf/generator/vamp-rdf-template-generator.o: ./vamp-hostsdk/PluginHostAdapter.h
rdf/generator/vamp-rdf-template-generator.o: vamp/vamp.h vamp-sdk/Plugin.h
rdf/generator/vamp-rdf-template-generator.o: vamp-sdk/PluginBase.h
rdf/generator/vamp-rdf-template-generator.o: vamp-sdk/plugguard.h vamp-sdk/RealTime.h
rdf/generator/vamp-rdf-template-generator.o: ./vamp-hostsdk/PluginChannelAdapter.h
rdf/generator/vamp-rdf-template-generator.o: ./vamp-hostsdk/PluginWrapper.h
rdf/generator/vamp-rdf-template-generator.o: ./vamp-hostsdk/Plugin.h
rdf/generator/vamp-rdf-template-generator.o: ./vamp-hostsdk/hostguard.h
rdf/generator/vamp-rdf-template-generator.o: vamp-sdk/Plugin.h
rdf/generator/vamp-rdf-template-generator.o: ./vamp-hostsdk/PluginInputDomainAdapter.h
rdf/generator/vamp-rdf-template-generator.o: ./vamp-hostsdk/PluginLoader.h
src/vamp-hostsdk/PluginHostAdapter.o: ./vamp-hostsdk/PluginHostAdapter.h
src/vamp-hostsdk/PluginHostAdapter.o: vamp/vamp.h vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginHostAdapter.o: vamp-sdk/PluginBase.h
src/vamp-hostsdk/PluginHostAdapter.o: vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginHostAdapter.o: vamp-sdk/RealTime.h
src/vamp-hostsdk/RealTime.o: src/vamp-sdk/RealTime.cpp ./vamp-sdk/RealTime.h
src/vamp-hostsdk/RealTime.o: vamp-sdk/plugguard.h
src/vamp-sdk/PluginAdapter.o: vamp-sdk/PluginAdapter.h vamp/vamp.h
src/vamp-sdk/PluginAdapter.o: vamp-sdk/Plugin.h vamp-sdk/PluginBase.h
src/vamp-sdk/PluginAdapter.o: vamp-sdk/plugguard.h vamp-sdk/RealTime.h
src/vamp-sdk/RealTime.o: ./vamp-sdk/RealTime.h vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginBufferingAdapter.o: ./vamp-hostsdk/PluginBufferingAdapter.h
src/vamp-hostsdk/PluginBufferingAdapter.o: ./vamp-hostsdk/PluginWrapper.h
src/vamp-hostsdk/PluginBufferingAdapter.o: ./vamp-hostsdk/Plugin.h
src/vamp-hostsdk/PluginBufferingAdapter.o: ./vamp-hostsdk/hostguard.h
src/vamp-hostsdk/PluginBufferingAdapter.o: vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginBufferingAdapter.o: vamp-sdk/PluginBase.h
src/vamp-hostsdk/PluginBufferingAdapter.o: vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginBufferingAdapter.o: vamp-sdk/RealTime.h
src/vamp-hostsdk/PluginChannelAdapter.o: ./vamp-hostsdk/PluginChannelAdapter.h
src/vamp-hostsdk/PluginChannelAdapter.o: ./vamp-hostsdk/PluginWrapper.h
src/vamp-hostsdk/PluginChannelAdapter.o: ./vamp-hostsdk/Plugin.h
src/vamp-hostsdk/PluginChannelAdapter.o: ./vamp-hostsdk/hostguard.h
src/vamp-hostsdk/PluginChannelAdapter.o: vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginChannelAdapter.o: vamp-sdk/PluginBase.h
src/vamp-hostsdk/PluginChannelAdapter.o: vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginChannelAdapter.o: vamp-sdk/RealTime.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: ./vamp-hostsdk/PluginInputDomainAdapter.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: ./vamp-hostsdk/PluginWrapper.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: ./vamp-hostsdk/Plugin.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: ./vamp-hostsdk/hostguard.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: vamp-sdk/PluginBase.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginInputDomainAdapter.o: vamp-sdk/RealTime.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/PluginHostAdapter.h
src/vamp-hostsdk/PluginLoader.o: vamp/vamp.h vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginLoader.o: vamp-sdk/PluginBase.h
src/vamp-hostsdk/PluginLoader.o: vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginLoader.o: vamp-sdk/RealTime.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/PluginLoader.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/PluginWrapper.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/Plugin.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/hostguard.h
src/vamp-hostsdk/PluginLoader.o: vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/PluginInputDomainAdapter.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/PluginChannelAdapter.h
src/vamp-hostsdk/PluginLoader.o: ./vamp-hostsdk/PluginBufferingAdapter.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: ./vamp-hostsdk/PluginSummarisingAdapter.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: ./vamp-hostsdk/PluginWrapper.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: ./vamp-hostsdk/Plugin.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: ./vamp-hostsdk/hostguard.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: vamp-sdk/PluginBase.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginSummarisingAdapter.o: vamp-sdk/RealTime.h
src/vamp-hostsdk/PluginWrapper.o: ./vamp-hostsdk/PluginWrapper.h
src/vamp-hostsdk/PluginWrapper.o: ./vamp-hostsdk/Plugin.h
src/vamp-hostsdk/PluginWrapper.o: ./vamp-hostsdk/hostguard.h
src/vamp-hostsdk/PluginWrapper.o: vamp-sdk/Plugin.h
src/vamp-hostsdk/PluginWrapper.o: vamp-sdk/PluginBase.h
src/vamp-hostsdk/PluginWrapper.o: vamp-sdk/plugguard.h
src/vamp-hostsdk/PluginWrapper.o: vamp-sdk/RealTime.h
