[701999c] | 1 | #! /usr/bin/env bash |
---|
[6b7f54d] | 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" |
---|
[9dcc6e5] | 17 | FFMPEG_DEFAULT="3.3.3" |
---|
[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 |
---|
[a500a392] | 83 | mv $DESTDIR/lib/libaubio-5.def $DESTDIR/bin |
---|
[4309424] | 84 | zip -r $DESTDIR.zip `basename $DESTDIR` |
---|
| 85 | rm -rf $DESTDIR |
---|
| 86 | sha256sum $DESTDIR.zip > $DESTDIR.zip.sha256 |
---|
| 87 | } |
---|
| 88 | |
---|
| 89 | function build_mingw32() { |
---|
| 90 | TARGET=win32 |
---|
| 91 | export CC=i686-w64-mingw32-gcc |
---|
[8122581d] | 92 | export NM=i686-w64-mingw32-nm |
---|
[4309424] | 93 | build_mingw |
---|
| 94 | } |
---|
| 95 | |
---|
| 96 | function build_mingw64() { |
---|
| 97 | TARGET=win64 |
---|
| 98 | export CC=x86_64-w64-mingw32-gcc |
---|
[8122581d] | 99 | export NM=x86_64-w64-mingw32-nm |
---|
[4309424] | 100 | build_mingw |
---|
| 101 | } |
---|
[6b7f54d] | 102 | |
---|
[4309424] | 103 | # fetch waf if needed |
---|
| 104 | [ -f "waf" ] || make getwaf |
---|
[6b7f54d] | 105 | |
---|
[4309424] | 106 | # first build without ffmpeg |
---|
| 107 | build_mingw32 |
---|
| 108 | build_mingw64 |
---|
[6b7f54d] | 109 | |
---|
[4309424] | 110 | # then build against ffmpeg |
---|
| 111 | WITH_FFMEG=1 |
---|
| 112 | build_mingw32 |
---|
| 113 | build_mingw64 |
---|
[4f64069] | 114 | |
---|
| 115 | set +x |
---|
| 116 | echo "" |
---|
| 117 | echo "All done! The following files were generated:" |
---|
| 118 | echo "" |
---|
| 119 | ls -lart aubio*.zip* |
---|