changeset 162:5e944736a8ed

update build scripts for mingw-w64
author Paul Brossier <piem@piem.org>
date Sun, 24 Jul 2016 21:02:05 +0200
parents 01b4286e1dab
children f1cda26b578c
files Makefile.mingw32 build_mingw32.sh scripts/get_deps_mingw32.sh wscript
diffstat 4 files changed, 69 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.mingw32	Sun Jul 24 20:37:41 2016 +0200
+++ b/Makefile.mingw32	Sun Jul 24 21:02:05 2016 +0200
@@ -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 @@
 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
--- a/build_mingw32.sh	Sun Jul 24 20:37:41 2016 +0200
+++ b/build_mingw32.sh	Sun Jul 24 21:02:05 2016 +0200
@@ -2,28 +2,29 @@
 
 # cross compile vamp-aubio-plugins using mingw32 toolchain
 
-pushd ..
+set -e
+set -x
 
-# 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
+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 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
+# get waf
+./scripts/get_waf.sh
 
-# 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
+# fetch Vamp SDK
+./scripts/get_deps_mingw32.sh
 
-popd
+# fetch and build aubio
+./scripts/get_aubio.sh
 
-# now build vamp-aubio-plugins
-make -f Makefile.mingw32 clean all
+# configure and build plugin
+./waf configure
+
+./waf build -v
+
+# system-wide installation
+# sudo ./waf install
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/get_deps_mingw32.sh	Sun Jul 24 21:02:05 2016 +0200
@@ -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
--- a/wscript	Sun Jul 24 20:37:41 2016 +0200
+++ b/wscript	Sun Jul 24 21:02:05 2016 +0200
@@ -9,6 +9,8 @@
 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 @@
     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 @@
     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 @@
     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'):