source: scripts/build_mingw @ 4309424

feature/autosinkfeature/constantqfeature/pitchshiftfeature/pydocstringsfeature/timestretchsampler
Last change on this file since 4309424 was 4309424, checked in by Paul Brossier <piem@piem.org>, 3 years ago

scripts/build_mingw: also build against ffmpeg

This script now builds aubio for windows 4 times, for 32 and 64 bits,
with and without ffmpeg. Latest ffmpeg binaries are downloaded if not
found in the current directory.

Tarball containing aubio binaries are created once each build completed.

  • Property mode set to 100755
File size: 2.7 KB
Line 
1#! /bin/bash
2
3# This script cross compiles aubio for windows using mingw, four times:
4#
5#  - 32 and 64 bits with no external dependencies
6#  - 32 and 64 bits against ffmpeg
7#
8# On debian or ubuntu, you will want to 'apt-get install gcc-mingw-w64'
9
10set -e
11set -x
12
13source VERSION
14VERSION="$AUBIO_MAJOR_VERSION.$AUBIO_MINOR_VERSION.$AUBIO_PATCH_VERSION"
15VERSION+="$AUBIO_VERSION_STATUS"
16
17FFMPEG_BUILDS_URL="https://ffmpeg.zeranoe.com/builds"
18FFMPEG_DEFAULT="20170315-6c4665d"
19
20# define some default CFLAGS
21DEF_CFLAGS="-Os -I/usr/share/mingw-w64"
22DEF_LDFLAGS=""
23
24WAFOPTS=""
25# disable external deps to make sure we don't try to use the host package
26WAFOPTS+=" --disable-samplerate --disable-jack --disable-sndfile"
27# enable ffmpeg build
28WAFOPTS+=" --disable-avcodec"
29# install without a prefix
30WAFOPTS+=" --prefix=/"
31# compile the tests, but fake running them
32# passing this option WAFOPTS fails (escaping?), added in actual waf call below
33#WAFOPTS+=" --testcmd='echo %s'"
34
35# debugging
36#WAFOPTS+=" -v"
37#WAFOPTS+=" -j1"
38#WAFOPTS+=" --notests"
39
40function fetch_ffpmeg() {
41  ## manually add ffmpeg (no pkg-config .pc files in bins)
42  [ -n "$FFMPEG_VERSION" ] || FFMPEG_VERSION=$FFMPEG_DEFAULT
43  FFMPEG_TARBALL="$PWD/ffmpeg-$FFMPEG_VERSION-$TARGET-dev.zip"
44  FFMPEG_BINARIES="${FFMPEG_TARBALL%%.zip}"
45  if [ ! -d "$FFMPEG_BINARIES" ]
46  then
47    if [ ! -f "$FFMPEG_TARBALL" ]
48    then
49      curl -O $FFMPEG_BUILDS_URL/$TARGET/dev/ffmpeg-$FFMPEG_VERSION-$TARGET-dev.zip
50    else
51      echo "using $FFMPEG_TARBALL"
52    fi
53    unzip -x $FFMPEG_TARBALL
54  else
55    echo "using $FFMPEG_BINARIES"
56  fi
57}
58
59function get_cflags() {
60  CFLAGS="$DEF_CFLAGS"
61  LDFLAGS="$DEF_LDFLAGS"
62  if [ -n "$WITH_FFMEG" ]
63  then
64    fetch_ffpmeg
65    CFLAGS+=" -DHAVE_LIBAV=1 -DHAVE_SWRESAMPLE=1"
66    CFLAGS+=" -I$FFMPEG_BINARIES/include"
67    LDFLAGS+=" -lavcodec -lavformat -lavutil -lswresample"
68    LDFLAGS+=" -L$FFMPEG_BINARIES/lib"
69  fi
70}
71
72function build_mingw() {
73  DESTDIR="$PWD/aubio-$VERSION-$TARGET"
74  [ -n "$WITH_FFMEG" ] && DESTDIR+="-ffmpeg"
75  [ -d $DESTDIR ] && rm -rf $DESTDIR $DESTDIR.zip
76  WAFOPTS_TGT="$WAFOPTS --destdir=$DESTDIR"
77  WAFOPTS_TGT+=" --with-target-platform=$TARGET"
78  get_cflags
79  CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" \
80    ./waf distclean configure build install $WAFOPTS_TGT --testcmd='echo %s'
81  zip -r $DESTDIR.zip `basename $DESTDIR`
82  rm -rf $DESTDIR
83  sha256sum $DESTDIR.zip > $DESTDIR.zip.sha256
84}
85
86function build_mingw32() {
87  TARGET=win32
88  export CC=i686-w64-mingw32-gcc
89  build_mingw
90}
91
92function build_mingw64() {
93  TARGET=win64
94  export CC=x86_64-w64-mingw32-gcc
95  build_mingw
96}
97
98# fetch waf if needed
99[ -f "waf" ] || make getwaf
100
101# first build without ffmpeg
102build_mingw32
103build_mingw64
104
105# then build against ffmpeg
106WITH_FFMEG=1
107build_mingw32
108build_mingw64
Note: See TracBrowser for help on using the repository browser.