update build scripts for mingw-w64
authorPaul Brossier <piem@piem.org>
Sun, 24 Jul 2016 19:02:05 +0000 (21:02 +0200)
committerPaul Brossier <piem@piem.org>
Sun, 24 Jul 2016 19:02:05 +0000 (21:02 +0200)
Makefile.mingw32
build_mingw32.sh [changed mode: 0644->0755]
scripts/get_deps_mingw32.sh [new file with mode: 0755]
wscript

index e9a7340..8a566f7 100644 (file)
@@ -7,16 +7,18 @@
 ##  instead so that it can be included by all platform Makefiles.
 
 # Location of Vamp plugin SDK relative to the project directory
-VAMPSDK_DIR    ?= ../vamp-plugin-sdk-2.5
+VAMPSDK_DIR    ?= ./contrib/vamp-plugin-sdk-2.6
 
 # Location of libvamp-sdk.dll
-VAMPBIN_DIR ?= ../vamp-plugin-sdk-2.5-binaries-win32-mingw
+#VAMPBIN_DIR ?= ./contrib/vamp-plugin-sdk-2.6-binaries-win32-mingw
+VAMPBIN_DIR ?= ./contrib/vamp-plugin-sdk-2.6
 
 # Location of cross compiled and installed aubio tree
-AUBIO_MINGW32_DISTDIR ?= ../aubio-dist-mingw32
+AUBIO_MINGW32_DISTDIR ?= ./contrib/aubio-dist
 
 # Toolchain prefix
-TOOLPREFIX     ?= i586-mingw32msvc-
+# on debian/ubuntu systems, you will want to install g++-mingw-w64-i686
+TOOLPREFIX     ?= i686-w64-mingw32-
 
 CXX            = $(TOOLPREFIX)g++
 CC             = $(TOOLPREFIX)gcc
@@ -31,16 +33,18 @@ RANLIB              = $(TOOLPREFIX)ranlib
 CFLAGS         := -Wall -Wextra -O3 -ftree-vectorize
 
 # add AUBIO_MINGW32_DISTDIR to ARCHFLAGS
-ARCHFLAGS := -I$(AUBIO_MINGW32_DISTDIR)/usr/local/include
+ARCHFLAGS := -I$(AUBIO_MINGW32_DISTDIR)/include
 
 # add AUBIO_MINGW32_DISTDIR to PLUGIN_LDFLAGS
-PLUGIN_LDFLAGS  := -L$(AUBIO_MINGW32_DISTDIR)/usr/local/lib
+PLUGIN_LDFLAGS  := 
 
 # Libraries and linker flags required by plugin: add any -l<library>
 # options here
 PLUGIN_LDFLAGS  += -Wl,--enable-auto-import
-PLUGIN_LDFLAGS  += -shared -Wl,--retain-symbols-file=vamp-plugin.list
-PLUGIN_LIBS     := $(VAMPBIN_DIR)/libvamp-sdk.dll
+PLUGIN_LDFLAGS  += -fno-exceptions -static -static-libgcc 
+PLUGIN_LDFLAGS  += -shared -Wl,-Bsymbolic
+PLUGIN_LDFLAGS  += -Wl,--retain-symbols-file=vamp-plugin.list
+PLUGIN_LIBS     := $(AUBIO_MINGW32_DISTDIR)/lib/libaubio.dll.a $(VAMPBIN_DIR)/libvamp-sdk.a
 
 # File extension for plugin library on this platform
 PLUGIN_EXT     := .dll
old mode 100644 (file)
new mode 100755 (executable)
index 4235350..8468286
@@ -2,28 +2,29 @@
 
 # cross compile vamp-aubio-plugins using mingw32 toolchain
 
-pushd ..
-
-# get Vamp SDK
-curl -O https://code.soundsoftware.ac.uk/attachments/download/690/vamp-plugin-sdk-2.5.tar.gz
-tar xf vamp-plugin-sdk-2.5.tar.gz
-
-# get Vamp windows binaries
-curl -O https://code.soundsoftware.ac.uk/attachments/download/694/vamp-plugin-sdk-2.5-binaries-win32-mingw.zip
-unzip -ox vamp-plugin-sdk-2.5-binaries-win32-mingw.zip
-
-# build aubio
-git clone git://git.aubio.org/git/aubio/ aubio-mingw32
-pushd aubio-mingw32
-git co develop
-git pull
-CFLAGS="-Os" CC=i586-mingw32msvc-gcc ./waf distclean configure build install \
-  --destdir=../aubio-dist-mingw32 --testcmd="echo %s" \
-  --with-target-platform=win32 --disable-avcodec --disable-samplerate \
-  --disable-jack --disable-sndfile
-popd
-
-popd
-
-# now build vamp-aubio-plugins
-make -f Makefile.mingw32 clean all
+set -e
+set -x
+
+export CFLAGS="-Os"
+#export CC="i586-mingw32msvc-gcc"
+#export CXX="i586-mingw32msvc-g++"
+export CC="i686-w64-mingw32-gcc"
+export CXX="i686-w64-mingw32-g++"
+export WAFOPTS="--with-target-platform=win32 --disable-sndfile --disable-samplerate --disable-jack --disable-avcodec --notests"
+
+# get waf
+./scripts/get_waf.sh
+
+# fetch Vamp SDK
+./scripts/get_deps_mingw32.sh
+
+# fetch and build aubio
+./scripts/get_aubio.sh
+
+# configure and build plugin
+./waf configure
+
+./waf build -v
+
+# system-wide installation
+# sudo ./waf install
diff --git a/scripts/get_deps_mingw32.sh b/scripts/get_deps_mingw32.sh
new file mode 100755 (executable)
index 0000000..8f4ddce
--- /dev/null
@@ -0,0 +1,20 @@
+#! /bin/bash
+
+
+source scripts/resources
+
+#rm -rf contrib/
+mkdir -p contrib/
+
+pushd contrib
+
+for p in $VAMP_PLUGIN_SDK #$VAMP_PLUGIN_SDK_MINGW
+do
+  fetch $p
+done
+
+pushd vamp-plugin-sdk-2.6
+make -f build/Makefile.mingw32
+popd
+
+popd
diff --git a/wscript b/wscript
index f2d72e2..64d7c7f 100644 (file)
--- a/wscript
+++ b/wscript
@@ -9,6 +9,8 @@ local_aubio_lib      = 'contrib/aubio/build/src'
 local_vamp_include   = 'contrib/vamp-plugin-sdk-2.6'
 local_vamp_lib_i686  = 'contrib/vamp-plugin-sdk-2.6-binaries-i686-linux'
 local_vamp_lib_amd64 = 'contrib/vamp-plugin-sdk-2.6-binaries-amd64-linux'
+# using debian/stable (jessie), the stdc++ abi seems broken. recompile it.
+local_vamp_lib_mingw = 'contrib/vamp-plugin-sdk-2.6' #-binaries-win32-mingw'
 local_vamp_lib_osx   = 'contrib/vamp-plugin-sdk-2.6-binaries-osx'
 local_vamp_lib_win32 = 'contrib'
 
@@ -29,7 +31,9 @@ def configure(conf):
     local_vamp_stlib     = 'libvamp-sdk.a'
 
     if sys.platform.startswith('linux'):
-        if platform.machine() == 'x86_64':
+        if 'mingw' in conf.env.CXX[0]:
+            local_vamp_lib = local_vamp_lib_mingw
+        elif platform.machine() == 'x86_64':
             local_vamp_lib = local_vamp_lib_amd64
         elif platform.machine() == 'x86_64':
             local_vamp_lib = local_vamp_lib_i686
@@ -67,9 +71,13 @@ def configure(conf):
     if sys.platform.startswith('linux'):
         conf.env['CXXFLAGS'] += ['-O3', '-msse', '-msse2', '-mfpmath=sse',
                 '-ftree-vectorize']
-        conf.env.append_value('LINKFLAGS', '-Wl,-z,defs')
-        # add plugin.map
-        conf.env.append_value('LINKFLAGS', '-Wl,--version-script=../vamp-plugin.map')
+        if 'mingw' in conf.env.CXX[0]:
+            conf.env.append_value('LINKFLAGS', '-Wl,--enable-auto-import')
+            conf.env.append_value('LINKFLAGS', '-Wl,--retain-symbols-file=../vamp-plugin.list')
+        else:
+            conf.env.append_value('LINKFLAGS', '-Wl,-z,defs')
+            # add plugin.map
+            conf.env.append_value('LINKFLAGS', '-Wl,--version-script=../vamp-plugin.map')
     elif sys.platform == 'win32':
         conf.env.append_value('CXXFLAGS', '/W4')
         conf.env.append_value('CXXFLAGS', '/EHsc')
@@ -86,7 +94,10 @@ def build(bld):
     plugin_sources += bld.path.ant_glob('*.cpp')
 
     # rename libvamp-aubio to vamp-plugin binary name
-    if sys.platform.startswith('linux'):
+    if 'mingw' in bld.env.CXX[0]:
+        bld.env['cxxshlib_PATTERN'] = '%s.dll'
+        install_path = None
+    elif sys.platform.startswith('linux'):
         bld.env['cxxshlib_PATTERN'] = '%s.so'
         install_path = '${LIBDIR}/vamp'
     elif sys.platform.startswith('darwin'):