piem@117: #! /usr/bin/env python piem@117: piem@117: # script to build vamp-aubio-plugin with waf (https://waf.io) piem@117: piem@126: import sys, os, platform piem@117: piem@173: APPNAME = 'vamp-aubio-plugins' piem@173: piem@173: for l in open('VERSION').readlines(): exec (l.strip()) piem@173: piem@173: VERSION = '.'.join ([str(x) for x in [ piem@173: VAMP_AUBIO_MAJOR_VERSION, piem@173: VAMP_AUBIO_MINOR_VERSION, piem@173: VAMP_AUBIO_PATCH_VERSION piem@173: ]]) + VAMP_AUBIO_VERSION_STATUS piem@173: piem@117: local_aubio_include = 'contrib/aubio-dist/include' piem@197: local_aubio_lib = 'contrib/aubio-dist/lib' piem@117: local_vamp_include = 'contrib/vamp-plugin-sdk-2.6' piem@117: local_vamp_lib_i686 = 'contrib/vamp-plugin-sdk-2.6-binaries-i686-linux' piem@117: local_vamp_lib_amd64 = 'contrib/vamp-plugin-sdk-2.6-binaries-amd64-linux' piem@162: # using debian/stable (jessie), the stdc++ abi seems broken. recompile it. piem@162: local_vamp_lib_mingw = 'contrib/vamp-plugin-sdk-2.6' #-binaries-win32-mingw' piem@127: local_vamp_lib_osx = 'contrib/vamp-plugin-sdk-2.6-binaries-osx' piem@127: local_vamp_lib_win32 = 'contrib' piem@127: piem@117: piem@117: def options(opt): piem@117: opt.load('compiler_cxx') piem@117: piem@117: def configure(conf): piem@153: if sys.platform.startswith('win'): piem@153: # build same binary version as current vamp-plugin-sdk piem@153: # currently Visual Studio 2013 (x86), piem@153: conf.env.MSVC_VERSIONS = ['msvc 12.0'] piem@153: conf.env.MSVC_TARGETS = ['x86'] piem@153: conf.load('msvc') piem@153: else: piem@153: conf.load('compiler_cxx') piem@127: local_aubio_stlib = 'libaubio.a' piem@127: local_vamp_stlib = 'libvamp-sdk.a' piem@117: piem@127: if sys.platform.startswith('linux'): piem@162: if 'mingw' in conf.env.CXX[0]: piem@162: local_vamp_lib = local_vamp_lib_mingw piem@198: elif sys.maxsize > 2**32: piem@127: local_vamp_lib = local_vamp_lib_amd64 piem@198: else: piem@127: local_vamp_lib = local_vamp_lib_i686 piem@127: elif sys.platform == 'darwin': piem@127: local_vamp_lib = local_vamp_lib_osx piem@127: elif sys.platform == 'win32': piem@127: local_vamp_lib = local_vamp_lib_win32 piem@127: local_vamp_stlib = 'VampPluginSDK.lib' piem@127: local_aubio_stlib = 'aubio.lib' piem@127: piem@127: local_aubio_stlib = os.path.join(local_aubio_lib, local_aubio_stlib) piem@127: local_vamp_stlib = os.path.join(local_vamp_lib, local_vamp_stlib) piem@127: piem@127: if os.path.isdir(local_aubio_include) and os.path.isfile(local_aubio_stlib): piem@117: conf.env.append_value('CXXFLAGS', '-I../'+local_aubio_include) piem@127: conf.env.append_value('SHLIB_MARKER', os.path.join('..',local_aubio_stlib)) piem@117: else: piem@117: conf.check_cfg (package='aubio', uselib_store='AUBIO', piem@117: args=['--cflags', '--libs'], mandatory=True) piem@117: piem@117: if os.path.isdir(local_vamp_include): piem@117: conf.env.append_value('CXXFLAGS', '-I../'+local_vamp_include) piem@126: local_vamp_lib = os.path.join(local_vamp_lib, 'libvamp-sdk.a') piem@129: if os.path.isfile(local_vamp_stlib): piem@129: conf.env.append_value('SHLIB_MARKER', os.path.join('..',local_vamp_stlib)) piem@126: #conf.check(lib = 'vamp-sdk', mandatory = False) piem@117: else: piem@117: conf.check_cfg (package='vamp-sdk', uselib_store = 'VAMP', piem@117: args=['--cflags','--libs'], mandatory=True) piem@117: piem@165: if conf.env.CXX_NAME != 'msvc': piem@151: conf.env.CXXFLAGS += ['-g', '-Wall', '-Wextra'] piem@151: piem@117: if sys.platform.startswith('linux'): piem@151: conf.env['CXXFLAGS'] += ['-O3', '-msse', '-msse2', '-mfpmath=sse', piem@151: '-ftree-vectorize'] piem@162: if 'mingw' in conf.env.CXX[0]: piem@162: conf.env.append_value('LINKFLAGS', '-Wl,--enable-auto-import') piem@162: conf.env.append_value('LINKFLAGS', '-Wl,--retain-symbols-file=../vamp-plugin.list') piem@162: else: piem@162: conf.env.append_value('LINKFLAGS', '-Wl,-z,defs') piem@162: # add plugin.map piem@162: conf.env.append_value('LINKFLAGS', '-Wl,--version-script=../vamp-plugin.map') piem@130: elif sys.platform == 'win32': piem@166: #conf.env.append_value('CXXFLAGS', '/MD') piem@130: conf.env.append_value('CXXFLAGS', '/W4') piem@130: conf.env.append_value('CXXFLAGS', '/EHsc') piem@130: #conf.env.append_value('CXXFLAGS', '/D_CRT_SECURE_NO_WARNINGS') piem@130: #, '/DWIN32', '/D_WINDOWS', '/D_USRDLL', '/D_WINDLL' piem@130: conf.env.append_value('LINKFLAGS', '/EXPORT:vampGetPluginDescriptor') piem@130: conf.env.append_value('LINKFLAGS', '/NODEFAULTLIB:LIBCMT') piem@165: conf.env.append_value('LINKFLAGS', '/NODEFAULTLIB:LIBPCMT') piem@135: elif sys.platform == 'darwin': piem@135: conf.env.FRAMEWORK += ['Accelerate'] piem@117: piem@117: def build(bld): piem@117: # Host Library piem@117: plugin_sources = bld.path.ant_glob('plugins/*.cpp') piem@117: plugin_sources += bld.path.ant_glob('*.cpp') piem@117: piem@117: # rename libvamp-aubio to vamp-plugin binary name piem@162: if 'mingw' in bld.env.CXX[0]: piem@162: bld.env['cxxshlib_PATTERN'] = '%s.dll' piem@162: install_path = None piem@162: elif sys.platform.startswith('linux'): piem@125: bld.env['cxxshlib_PATTERN'] = '%s.so' piem@150: install_path = '${LIBDIR}/vamp' piem@125: elif sys.platform.startswith('darwin'): piem@125: bld.env['cxxshlib_PATTERN'] = '%s.dylib' piem@150: install_path = '/Library/Audio/Plug-Ins/Vamp' piem@150: elif sys.platform.startswith('win32'): piem@153: if platform.machine() == 'AMD64': piem@153: install_path = 'C:\\Program Files (x86)\\Vamp Plugins' piem@153: else: piem@153: install_path = 'C:\\Program Files\\Vamp Plugins' piem@117: piem@117: bld.program(source = plugin_sources, piem@117: includes = '.', piem@117: target = 'vamp-aubio', piem@117: name = 'vamp-aubio', piem@158: use = ['VAMP', 'AUBIO', 'CBLAS'], piem@150: features = 'cxx cxxshlib', piem@150: install_path = install_path piem@117: ) piem@117: piem@152: if install_path: piem@152: bld.install_files( install_path, ['vamp-aubio.cat', 'vamp-aubio.n3']) piem@150: piem@117: #for k in bld.env.keys(): piem@117: # print ("%s : %s", k, bld.env[k] ) piem@170: piem@170: def dist(ctx): piem@170: ctx.excl = '**/.waf-1* **/*~ **/*.pyc **/*.swp **/.lock-w* **/.git*' piem@170: ctx.excl += ' **/**.tar.bz2' piem@183: ctx.excl += ' **/**.zip' piem@177: ctx.excl += ' **/**.o **/**.so' piem@170: ctx.excl += ' contrib/**' piem@170: ctx.excl += ' build/**' piem@174: ctx.excl += ' dist/**' piem@170: ctx.excl += ' **/.travis.yml' piem@170: ctx.excl += ' **/.appveyor.yml'