[6b7f54d] | 1 | #! /bin/bash |
---|
| 2 | |
---|
[4309424] | 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 | # |
---|
[6b7f54d] | 8 | # On debian or ubuntu, you will want to 'apt-get install gcc-mingw-w64' |
---|
| 9 | |
---|
| 10 | set -e |
---|
| 11 | set -x |
---|
| 12 | |
---|
[5b44a26] | 13 | python this_version.py -v |
---|
| 14 | VERSION=`python $PWD/this_version.py -v` |
---|
[4309424] | 15 | |
---|
| 16 | FFMPEG_BUILDS_URL="https://ffmpeg.zeranoe.com/builds" |
---|
[d609841] | 17 | FFMPEG_DEFAULT="20170404-1229007" |
---|
[4309424] | 18 | |
---|
| 19 | # define some default CFLAGS |
---|
| 20 | DEF_CFLAGS="-Os -I/usr/share/mingw-w64" |
---|
| 21 | DEF_LDFLAGS="" |
---|
| 22 | |
---|
| 23 | WAFOPTS="" |
---|
| 24 | # disable external deps to make sure we don't try to use the host package |
---|
| 25 | WAFOPTS+=" --disable-samplerate --disable-jack --disable-sndfile" |
---|
| 26 | # enable ffmpeg build |
---|
| 27 | WAFOPTS+=" --disable-avcodec" |
---|
| 28 | # install without a prefix |
---|
| 29 | WAFOPTS+=" --prefix=/" |
---|
| 30 | # compile the tests, but fake running them |
---|
| 31 | # passing this option WAFOPTS fails (escaping?), added in actual waf call below |
---|
| 32 | #WAFOPTS+=" --testcmd='echo %s'" |
---|
| 33 | |
---|
| 34 | # debugging |
---|
| 35 | #WAFOPTS+=" -v" |
---|
| 36 | #WAFOPTS+=" -j1" |
---|
| 37 | #WAFOPTS+=" --notests" |
---|
| 38 | |
---|
| 39 | function fetch_ffpmeg() { |
---|
| 40 | ## manually add ffmpeg (no pkg-config .pc files in bins) |
---|
| 41 | [ -n "$FFMPEG_VERSION" ] || FFMPEG_VERSION=$FFMPEG_DEFAULT |
---|
| 42 | FFMPEG_TARBALL="$PWD/ffmpeg-$FFMPEG_VERSION-$TARGET-dev.zip" |
---|
| 43 | FFMPEG_BINARIES="${FFMPEG_TARBALL%%.zip}" |
---|
| 44 | if [ ! -d "$FFMPEG_BINARIES" ] |
---|
| 45 | then |
---|
| 46 | if [ ! -f "$FFMPEG_TARBALL" ] |
---|
| 47 | then |
---|
| 48 | curl -O $FFMPEG_BUILDS_URL/$TARGET/dev/ffmpeg-$FFMPEG_VERSION-$TARGET-dev.zip |
---|
| 49 | else |
---|
| 50 | echo "using $FFMPEG_TARBALL" |
---|
| 51 | fi |
---|
| 52 | unzip -x $FFMPEG_TARBALL |
---|
| 53 | else |
---|
| 54 | echo "using $FFMPEG_BINARIES" |
---|
| 55 | fi |
---|
| 56 | } |
---|
| 57 | |
---|
| 58 | function get_cflags() { |
---|
| 59 | CFLAGS="$DEF_CFLAGS" |
---|
| 60 | LDFLAGS="$DEF_LDFLAGS" |
---|
| 61 | if [ -n "$WITH_FFMEG" ] |
---|
| 62 | then |
---|
| 63 | fetch_ffpmeg |
---|
| 64 | CFLAGS+=" -DHAVE_LIBAV=1 -DHAVE_SWRESAMPLE=1" |
---|
| 65 | CFLAGS+=" -I$FFMPEG_BINARIES/include" |
---|
| 66 | LDFLAGS+=" -lavcodec -lavformat -lavutil -lswresample" |
---|
| 67 | LDFLAGS+=" -L$FFMPEG_BINARIES/lib" |
---|
| 68 | fi |
---|
| 69 | } |
---|
| 70 | |
---|
| 71 | function build_mingw() { |
---|
| 72 | DESTDIR="$PWD/aubio-$VERSION-$TARGET" |
---|
| 73 | [ -n "$WITH_FFMEG" ] && DESTDIR+="-ffmpeg" |
---|
[4f64069] | 74 | [ -f $DESTDIR.zip ] && echo "Remove existing $DESTDIR.zip first" && exit 1 |
---|
| 75 | [ -d $DESTDIR ] && rm -rf $DESTDIR |
---|
[4309424] | 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' |
---|
[6709422] | 81 | # fix dll location (see https://github.com/waf-project/waf/issues/1860) |
---|
| 82 | mv $DESTDIR/lib/libaubio-5.dll $DESTDIR/bin |
---|
| 83 | # generate def file (see https://github.com/aubio/aubio/issues/97) |
---|
[8122581d] | 84 | ( echo -e "EXPORTS"; $NM $DESTDIR/bin/libaubio-5.dll | grep T\ | \ |
---|
| 85 | egrep "(aubio|fvec|cvec|lvec|fmat)" | sed 's/^.* T _\?//' ) \ |
---|
[6709422] | 86 | > $DESTDIR/bin/libaubio-5.def |
---|
[4309424] | 87 | zip -r $DESTDIR.zip `basename $DESTDIR` |
---|
| 88 | rm -rf $DESTDIR |
---|
| 89 | sha256sum $DESTDIR.zip > $DESTDIR.zip.sha256 |
---|
| 90 | } |
---|
| 91 | |
---|
| 92 | function build_mingw32() { |
---|
| 93 | TARGET=win32 |
---|
| 94 | export CC=i686-w64-mingw32-gcc |
---|
[8122581d] | 95 | export NM=i686-w64-mingw32-nm |
---|
[4309424] | 96 | build_mingw |
---|
| 97 | } |
---|
| 98 | |
---|
| 99 | function build_mingw64() { |
---|
| 100 | TARGET=win64 |
---|
| 101 | export CC=x86_64-w64-mingw32-gcc |
---|
[8122581d] | 102 | export NM=x86_64-w64-mingw32-nm |
---|
[4309424] | 103 | build_mingw |
---|
| 104 | } |
---|
[6b7f54d] | 105 | |
---|
[4309424] | 106 | # fetch waf if needed |
---|
| 107 | [ -f "waf" ] || make getwaf |
---|
[6b7f54d] | 108 | |
---|
[4309424] | 109 | # first build without ffmpeg |
---|
| 110 | build_mingw32 |
---|
| 111 | build_mingw64 |
---|
[6b7f54d] | 112 | |
---|
[4309424] | 113 | # then build against ffmpeg |
---|
| 114 | WITH_FFMEG=1 |
---|
| 115 | build_mingw32 |
---|
| 116 | build_mingw64 |
---|
[4f64069] | 117 | |
---|
| 118 | set +x |
---|
| 119 | echo "" |
---|
| 120 | echo "All done! The following files were generated:" |
---|
| 121 | echo "" |
---|
| 122 | ls -lart aubio*.zip* |
---|