compile.sh 6.01 KB
Newer Older
ivoire's avatar
ivoire committed
1
2
#! /bin/sh

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
3
4
5
# Read the Android Wiki http://wiki.videolan.org/AndroidCompile
# Setup all that stuff correctly.
# Get the latest Android SDK Platform or modify numbers in configure.sh and vlc-android/default.properties.
Rafaël Carré's avatar
Rafaël Carré committed
6

7
8
set -e

9
10
11
12
if [ -z "$ANDROID_NDK" -o -z "$ANDROID_SDK" -o -z "$ANDROID_ABI" ]; then
   echo "You must define ANDROID_NDK, ANDROID_SDK and ANDROID_ABI before starting."
   echo "They must point to your NDK and SDK directories.\n"
   echo "ANDROID_ABI should match your ABI: armeabi-v7a, armeabi or ..."
Rafaël Carré's avatar
Rafaël Carré committed
13
14
   exit 1
fi
Rafaël Carré's avatar
Rafaël Carré committed
15
16
17
18
# try to detect NDK version
REL=$(grep -o '^r[0-9]*.*' $ANDROID_NDK/RELEASE.TXT 2>/dev/null|cut -b2-)
case "$REL" in
    8?)
Sébastien Toque's avatar
Sébastien Toque committed
19
        # NDK >= v8b, both 4.4.3 and 4.6 available,
20
21
22
        # we use 4.6 because 4.4.3 doesn't handle threads correctly.
        GCCVER=4.6
        CXXSTL="/4.6"
Rafaël Carré's avatar
Rafaël Carré committed
23
    ;;
24
25
    7|8|*)
        echo "You need the NDKv8b or later"
Rafaël Carré's avatar
Rafaël Carré committed
26
27
28
29
30
31
        exit 1
    ;;
esac

export GCCVER
export CXXSTL
ivoire's avatar
ivoire committed
32

33
34
35
36
# XXX : important!
cat << EOF
For an ARMv6 device without FPU, you need a build without FPU:
$ export NO_FPU=1
Edward Wang's avatar
Edward Wang committed
37
38
For an ARMv5 device or the Android emulator, you need an ARMv5 build:
$ export NO_ARMV6=1
39
40
41

If you plan to use a release build, run 'compile.sh release'
EOF
42

Edward Wang's avatar
Edward Wang committed
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Set up ABI variables
if [ ${ANDROID_ABI} = "x86" ] ; then
    TARGET_TUPLE="i686-android-linux"
    PATH_HOST="x86"
    HAVE_X86=1
    PLATFORM_SHORT_ARCH="x86"
elif [ ${ANDROID_ABI} = "mips" ] ; then
    TARGET_TUPLE="mipsel-linux-android"
    PATH_HOST=$TARGET_TUPLE
    HAVE_MIPS=1
    PLATFORM_SHORT_ARCH="mips"
else
    TARGET_TUPLE="arm-linux-androideabi"
    PATH_HOST=$TARGET_TUPLE
    HAVE_ARM=1
    PLATFORM_SHORT_ARCH="arm"
fi
60
61
62
63
64
65
66
67
68
69
70
71
72

if [ ${ANDROID_ABI} = "x86" ] ; then
    # x86 toolchain location changes in NDK r8b
    case "$REL" in
        8?)
            TARGET_TUPLE="i686-linux-android"
        ;;
        *)
            TARGET_TUPLE="i686-android-linux"
        ;;
    esac
fi

Edward Wang's avatar
Edward Wang committed
73
74
75
76
77
78
79
export TARGET_TUPLE
export PATH_HOST
export HAVE_ARM
export HAVE_X86
export HAVE_MIPS
export PLATFORM_SHORT_ARCH

80
81
# Add the NDK toolchain to the PATH, needed both for contribs and for building
# stub libraries
Rafaël Carré's avatar
Rafaël Carré committed
82
export PATH=${ANDROID_NDK}/toolchains/${PATH_HOST}-${GCCVER}/prebuilt/`uname|tr A-Z a-z`-x86/bin:${PATH}
83

Rafaël Carré's avatar
Rafaël Carré committed
84
# 1/ libvlc, libvlccore and its plugins
85
TESTED_HASH=9aef14d5e5
86
if [ ! -d "vlc" ]; then
87
    echo "VLC source not found, cloning"
88
    git clone git://git.videolan.org/vlc.git vlc
Philipp Dreimann's avatar
Philipp Dreimann committed
89
    cd vlc
90
    git checkout -B android ${TESTED_HASH}
91
    echo "Applying the patches"
92
    git am -3 ../patches/*.patch
93
94
95
96
97
    if [ $? -ne 0 ]; then
        git am --abort
        echo "Applying the patches failed, aborting git-am"
        exit 1
    fi
98
else
99
    echo "VLC source found"
100
    cd vlc
101
102
103
104
105
106
107
    if ! git cat-file -e ${TESTED_HASH}; then
        cat << EOF
***
*** Error: Your vlc checkout does not contain the latest tested commit ***
***

Please update your source with something like:
ivoire's avatar
ivoire committed
108
109

cd vlc
110
111
112
git reset --hard origin
git pull origin master
git checkout -B android ${TESTED_HASH}
Sébastien Toque's avatar
Sébastien Toque committed
113
git am -3 ../patches/*
114
115
116
117
118
119
120

*** : This will delete any changes you made to the current branch ***

EOF
        exit 1
    fi
fi
ivoire's avatar
ivoire committed
121

122
if [ ${ANDROID_ABI} = "armeabi-v7a" ] ; then
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
123
    EXTRA_CFLAGS="-mfpu=vfpv3-d16 -mcpu=cortex-a8"
124
125
    EXTRA_CFLAGS="${EXTRA_CFLAGS} -mthumb -mfloat-abi=softfp"
elif [ ${ANDROID_ABI} = "armeabi" ] ; then
Edward Wang's avatar
Edward Wang committed
126
127
    if [ -n "${NO_ARMV6}" ]; then
        EXTRA_CFLAGS="-march=armv5te -mtune=arm9tdmi -msoft-float"
128
    else
Edward Wang's avatar
Edward Wang committed
129
130
131
132
133
        if [ -n "${NO_FPU}" ]; then
            EXTRA_CFLAGS="-march=armv6j -mtune=arm1136j-s -msoft-float"
        else
            EXTRA_CFLAGS="-mfpu=vfp -mcpu=arm1136jf-s -mfloat-abi=softfp"
        fi
134
    fi
Edward Wang's avatar
Edward Wang committed
135
136
elif [ ${ANDROID_ABI} = "x86" ] ; then
    EXTRA_CFLAGS="-march=pentium -ffunction-sections -funwind-tables -frtti -fno-exceptions"
Edward Wang's avatar
Edward Wang committed
137
138
139
140
141
elif [ ${ANDROID_ABI} = "mips" ] ; then
    EXTRA_CFLAGS="-march=mips32 -mhard-float"
    # All MIPS Linux kernels since 2.4.4 will trap any unimplemented FPU
    # instruction and emulate it, so we select -mhard-float.
    # See http://www.linux-mips.org/wiki/Floating_point#The_Linux_kernel_and_floating_point
142
143
144
else
    echo "Unknown ABI. Die, die, die!"
    exit 2
145
146
fi

Rafaël Carré's avatar
Rafaël Carré committed
147
148
149
EXTRA_CFLAGS="${EXTRA_CFLAGS} -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++${CXXSTL}/include"
EXTRA_CFLAGS="${EXTRA_CFLAGS} -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++${CXXSTL}/libs/${ANDROID_ABI}/include"

150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
echo "Building the contribs"
mkdir -p contrib/android
cd contrib/android
../bootstrap --host=${TARGET_TUPLE} --disable-disc --disable-sout --enable-small \
    --disable-sdl \
    --disable-SDL_image \
    --disable-fontconfig \
    --disable-zvbi \
    --disable-kate \
    --disable-caca \
    --disable-gettext \
    --disable-mpcdec \
    --disable-upnp \
    --disable-gme \
    --disable-tremor \
    --disable-vorbis \
    --disable-sidplay2 \
    --disable-samplerate \
    --disable-faad2 \
169
    --disable-harfbuzz \
170
171
172
173
    --enable-iconv

# TODO: mpeg2, theora

Rafaël Carré's avatar
Rafaël Carré committed
174
175
# Some libraries have arm assembly which won't build in thumb mode
# We append -marm to the CFLAGS of these libs to disable thumb mode
Rafaël Carré's avatar
Rafaël Carré committed
176
[ ${ANDROID_ABI} = "armeabi-v7a" ] && echo "NOTHUMB := -marm" >> config.mak
Rafaël Carré's avatar
Rafaël Carré committed
177

178
# Release or not?
Rafaël Carré's avatar
Rafaël Carré committed
179
if [ $# -ne 0 ] && [ "$1" = "release" ]; then
180
    OPTS=""
181
182
    EXTRA_CFLAGS="${EXTRA_CFLAGS} -DNDEBUG "
    RELEASEFLAG="RELEASE=1"
183
184
185
186
else
    OPTS="--enable-debug"
fi

187
188
189
190
191
192
MAKEFLAGS=
if which nproc >/dev/null
then
MAKEFLAGS=-j`nproc`
fi

193
echo "EXTRA_CFLAGS= -g ${EXTRA_CFLAGS}" >> config.mak
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
194
export VLC_EXTRA_CFLAGS="${EXTRA_CFLAGS}"
195

Rafaël Carré's avatar
Rafaël Carré committed
196
make fetch
197
make $MAKEFLAGS
ivoire's avatar
ivoire committed
198
199
200

cd ../.. && mkdir -p android && cd android

201
if test ! -s "../configure" ; then
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
202
    echo "Bootstraping"
Sébastien Toque's avatar
Sébastien Toque committed
203
    ../bootstrap
Rafaël Carré's avatar
Rafaël Carré committed
204
fi
ivoire's avatar
ivoire committed
205
206

echo "Configuring"
207
../../configure.sh $OPTS
ivoire's avatar
ivoire committed
208

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
209
echo "Building"
210
make $MAKEFLAGS
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
211

Rafaël Carré's avatar
Rafaël Carré committed
212
213
214

# 2/ VLC android UI and specific code

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
215
216
echo "Building Android"
cd ../../
Rafaël Carré's avatar
Rafaël Carré committed
217

218
export ANDROID_SYS_HEADERS_GINGERBREAD=${PWD}/android-headers-gingerbread
219
export ANDROID_SYS_HEADERS_HC=${PWD}/android-headers-hc
220
export ANDROID_SYS_HEADERS_ICS=${PWD}/android-headers-ics
Rafaël Carré's avatar
Rafaël Carré committed
221
222

export ANDROID_LIBS=${PWD}/android-libs
223
export VLC_BUILD_DIR=vlc/android
Rafaël Carré's avatar
Rafaël Carré committed
224

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
225
make distclean
226
make -j1 TARGET_TUPLE=$TARGET_TUPLE PLATFORM_SHORT_ARCH=$PLATFORM_SHORT_ARCH CXXSTL=$CXXSTL $RELEASEFLAG