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 | |
---|
10 | set -e |
---|
11 | set -x |
---|
12 | |
---|
13 | python this_version.py -v |
---|
14 | VERSION=`python $PWD/this_version.py -v` |
---|
15 | |
---|
16 | FFMPEG_BUILDS_URL="https://ffmpeg.zeranoe.com/builds" |
---|
17 | FFMPEG_DEFAULT="20170404-1229007" |
---|
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" |
---|
74 | [ -f $DESTDIR.zip ] && echo "Remove existing $DESTDIR.zip first" && exit 1 |
---|
75 | [ -d $DESTDIR ] && rm -rf $DESTDIR |
---|
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 | # 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) |
---|
84 | ( echo -e "EXPORTS"; $NM $DESTDIR/bin/libaubio-5.dll | grep T\ | \ |
---|
85 | egrep "(aubio|fvec|cvec|lvec|fmat)" | sed 's/^.* T _\?//' ) \ |
---|
86 | > $DESTDIR/bin/libaubio-5.def |
---|
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 |
---|
95 | export NM=i686-w64-mingw32-nm |
---|
96 | build_mingw |
---|
97 | } |
---|
98 | |
---|
99 | function build_mingw64() { |
---|
100 | TARGET=win64 |
---|
101 | export CC=x86_64-w64-mingw32-gcc |
---|
102 | export NM=x86_64-w64-mingw32-nm |
---|
103 | build_mingw |
---|
104 | } |
---|
105 | |
---|
106 | # fetch waf if needed |
---|
107 | [ -f "waf" ] || make getwaf |
---|
108 | |
---|
109 | # first build without ffmpeg |
---|
110 | build_mingw32 |
---|
111 | build_mingw64 |
---|
112 | |
---|
113 | # then build against ffmpeg |
---|
114 | WITH_FFMEG=1 |
---|
115 | build_mingw32 |
---|
116 | build_mingw64 |
---|
117 | |
---|
118 | set +x |
---|
119 | echo "" |
---|
120 | echo "All done! The following files were generated:" |
---|
121 | echo "" |
---|
122 | ls -lart aubio*.zip* |
---|