compile.sh 5.42 KB
Newer Older
Rémi Duraffort's avatar
Rémi Duraffort 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 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
# try to detect NDK version
REL=$(grep -o '^r[0-9]*.*' $ANDROID_NDK/RELEASE.TXT 2>/dev/null|cut -b2-)
case "$REL" in
    7|8)
        # NDK > v7, only gcc 4.4.3 available
        GCCVER=4.4.3
        CXXSTL=""
    ;;
    8?)
        # NDK >= v8b, both 4.4.3 and 4.6 available, we use 4.6
        GCCVER=4.6
        CXXSTL="/4.6"
    ;;
    *)
        echo "You need the NDKv7 or later"
        exit 1
    ;;
esac

export GCCVER
export CXXSTL
Rémi Duraffort's avatar
Rémi Duraffort committed
36

37 38
# XXX : important!
cat << EOF
Edward Wang's avatar
Edward Wang committed
39
For an ARMv7-A device without NEON, you need a build without NEON:
40 41 42
$ export NO_NEON=1
For an ARMv6 device without FPU, you need a build without FPU:
$ export NO_FPU=1
Edward Wang's avatar
Edward Wang committed
43 44
For an ARMv5 device or the Android emulator, you need an ARMv5 build:
$ export NO_ARMV6=1
45 46 47

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

Edward Wang's avatar
Edward Wang committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
# 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
export TARGET_TUPLE
export PATH_HOST
export HAVE_ARM
export HAVE_X86
export HAVE_MIPS
export PLATFORM_SHORT_ARCH

73 74
# 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
75
export PATH=${ANDROID_NDK}/toolchains/${PATH_HOST}-${GCCVER}/prebuilt/`uname|tr A-Z a-z`-x86/bin:${PATH}
76

Rafaël Carré's avatar
Rafaël Carré committed
77
# 1/ libvlc, libvlccore and its plugins
Rafaël Carré's avatar
Rafaël Carré committed
78
TESTED_HASH=17fbcd4ed8
79
if [ ! -d "vlc" ]; then
80
    echo "VLC source not found, cloning"
81
    git clone git://git.videolan.org/vlc.git vlc
Philipp Dreimann's avatar
Philipp Dreimann committed
82
    cd vlc
83
    git checkout -B android ${TESTED_HASH}
84 85
    echo "Applying the patches"
    git am ../patches/*.patch
86 87 88 89 90
    if [ $? -ne 0 ]; then
        git am --abort
        echo "Applying the patches failed, aborting git-am"
        exit 1
    fi
91
else
92
    echo "VLC source found"
93
    cd vlc
94 95 96 97 98 99 100
    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:
Rémi Duraffort's avatar
Rémi Duraffort committed
101 102

cd vlc
103 104 105 106 107 108 109 110 111 112 113
git reset --hard origin
git pull origin master
git checkout -B android ${TESTED_HASH}
git am ../patches/*

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

EOF
        exit 1
    fi
fi
Rémi Duraffort's avatar
Rémi Duraffort committed
114 115

echo "Building the contribs"
116 117
mkdir -p contrib/android
cd contrib/android
Edward Wang's avatar
Edward Wang committed
118
../bootstrap --host=${TARGET_TUPLE} --disable-disc --disable-sout --enable-small \
Rafaël Carré's avatar
Rafaël Carré committed
119 120 121 122 123 124 125 126
    --disable-sdl \
    --disable-SDL_image \
    --disable-fontconfig \
    --disable-zvbi \
    --disable-kate \
    --disable-caca \
    --disable-gettext \
    --disable-mpcdec \
127
    --disable-upnp \
128
    --disable-gme \
129 130
    --disable-tremor \
    --disable-vorbis \
131
    --disable-sidplay2 \
Sébastien Toque's avatar
Sébastien Toque committed
132
    --disable-samplerate \
Edward Wang's avatar
Edward Wang committed
133
    --disable-faad2 \
Sébastien Toque's avatar
Sébastien Toque committed
134
    --enable-iconv
Rafaël Carré's avatar
Rafaël Carré committed
135

136
# TODO: mpeg2, theora
137

138 139 140 141 142 143 144
if [ ${ANDROID_ABI} = "armeabi-v7a" ] ; then
    if test -z "${NO_NEON}" ; then
        EXTRA_CFLAGS="-mfpu=neon -mcpu=cortex-a8"
    else
        EXTRA_CFLAGS="-mfpu=vfpv3-d16 -mcpu=cortex-a9"
    fi
    EXTRA_CFLAGS="${EXTRA_CFLAGS} -mthumb -mfloat-abi=softfp"
145
    echo "NOTHUMB := -marm" >> config.mak
146 147
elif [ ${ANDROID_ABI} = "armeabi" ] ; then
    export NO_NEON=1
Edward Wang's avatar
Edward Wang committed
148 149
    if [ -n "${NO_ARMV6}" ]; then
        EXTRA_CFLAGS="-march=armv5te -mtune=arm9tdmi -msoft-float"
150
    else
Edward Wang's avatar
Edward Wang committed
151 152 153 154 155
        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
156
    fi
Edward Wang's avatar
Edward Wang committed
157 158
elif [ ${ANDROID_ABI} = "x86" ] ; then
    EXTRA_CFLAGS="-march=pentium -ffunction-sections -funwind-tables -frtti -fno-exceptions"
159 160 161
else
    echo "Unknown ABI. Die, die, die!"
    exit 2
162 163
fi

Rafaël Carré's avatar
Rafaël Carré committed
164 165 166 167
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"


168
# Release or not?
169
if [ $# -ne 0 ] && [ "$1" == "release" ]; then
170
    OPTS=""
171 172
    EXTRA_CFLAGS="${EXTRA_CFLAGS} -DNDEBUG "
    RELEASEFLAG="RELEASE=1"
173 174 175 176
else
    OPTS="--enable-debug"
fi

177
echo "EXTRA_CFLAGS= -g ${EXTRA_CFLAGS}" >> config.mak
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
178
export VLC_EXTRA_CFLAGS="${EXTRA_CFLAGS}"
179

Rafaël Carré's avatar
Rafaël Carré committed
180 181
make fetch
make
Rémi Duraffort's avatar
Rémi Duraffort committed
182 183 184

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

185
if test ! -s "../configure" ; then
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
186
    echo "Bootstraping"
Sébastien Toque's avatar
Sébastien Toque committed
187
    ../bootstrap
Rafaël Carré's avatar
Rafaël Carré committed
188
fi
Rémi Duraffort's avatar
Rémi Duraffort committed
189 190

echo "Configuring"
191
../../configure.sh $OPTS
Rémi Duraffort's avatar
Rémi Duraffort committed
192

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
193
echo "Building"
Rémi Duraffort's avatar
Rémi Duraffort committed
194
make
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
195

Rafaël Carré's avatar
Rafaël Carré committed
196 197 198

# 2/ VLC android UI and specific code

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
199 200
echo "Building Android"
cd ../../
Rafaël Carré's avatar
Rafaël Carré committed
201

202
export ANDROID_SYS_HEADERS_GINGERBREAD=${PWD}/android-headers-gingerbread
203
export ANDROID_SYS_HEADERS_HC=${PWD}/android-headers-hc
204
export ANDROID_SYS_HEADERS_ICS=${PWD}/android-headers-ics
Rafaël Carré's avatar
Rafaël Carré committed
205 206

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

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
209
make distclean
Rafaël Carré's avatar
Rafaël Carré committed
210
make TARGET_TUPLE=$TARGET_TUPLE PLATFORM_SHORT_ARCH=$PLATFORM_SHORT_ARCH CXXSTL=$CXXSTL $RELEASEFLAG