[Android] [PATCH 1/7] Support compiling on Android-x86

Rafaël Carré funman at videolan.org
Tue Jul 17 22:30:25 CEST 2012


Le 2012-07-15 22:27, Edward Wang a écrit :
> This also softens the ground for the upcoming MIPS port too.
> ---
>  compile.sh        |   10 ++++++++--
>  configure.sh      |   39 +++++++++++++++++++++++++--------------
>  setup-abi-vars.sh |   19 +++++++++++++++++++
>  3 files changed, 52 insertions(+), 16 deletions(-)
>  create mode 100755 setup-abi-vars.sh
> 
> diff --git a/compile.sh b/compile.sh
> index 63c0046..43bfa9c 100755
> --- a/compile.sh
> +++ b/compile.sh
> @@ -31,9 +31,12 @@ if [ -z $REL ]; then
>      exit 1
>  fi
>  
> +# Set up ABI variables (TARGET_TUPLET, PATH_HOST)

Apparently "tuplet" is related to music, you want "tuple".

> +source setup-abi-vars.sh

Please just put the code in compile.sh

> +
>  # Add the NDK toolchain to the PATH, needed both for contribs and for building
>  # stub libraries
> -export PATH=${ANDROID_NDK}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin:${PATH}
> +export PATH=${ANDROID_NDK}/toolchains/${PATH_HOST}-4.4.3/prebuilt/linux-x86/bin:${PATH}
>  
>  # 1/ libvlc, libvlccore and its plugins
>  TESTED_HASH=e75d2024
> @@ -71,7 +74,7 @@ fi
>  echo "Building the contribs"
>  mkdir -p contrib/android
>  cd contrib/android
> -../bootstrap --host=arm-linux-androideabi --disable-disc --disable-sout --enable-small \
> +../bootstrap --host=${TARGET_TUPLET} --disable-disc --disable-sout --enable-small \
>      --disable-sdl \
>      --disable-SDL_image \
>      --disable-fontconfig \
> @@ -109,6 +112,9 @@ elif [ ${ANDROID_ABI} = "armeabi" ] ; then
>              EXTRA_CFLAGS="-mfpu=vfp -mcpu=arm1136jf-s -mfloat-abi=softfp"
>          fi
>      fi
> +elif [ ${ANDROID_ABI} = "x86" ] ; then
> +    # do x86 stuff

isn't the comment redundant with the line above?

> +    EXTRA_CFLAGS="-g -march=pentium -ffunction-sections -funwind-tables -frtti -fno-exceptions"
>  else
>      echo "Unknown ABI. Die, die, die!"
>      exit 2
> diff --git a/configure.sh b/configure.sh
> index c5dd97f..823b8b0 100755
> --- a/configure.sh
> +++ b/configure.sh
> @@ -6,32 +6,43 @@ if [ -z "$ANDROID_NDK" -o -z "$ANDROID_ABI" ]; then
>      exit 1
>  fi
>  
> +# Set up ABI variables (TARGET_TUPLET, PATH_HOST, HAVE_*)
> +source $(dirname $0)/setup-abi-vars.sh
> +
>  # Must use android-9 here. Any replacement functions needed are in the vlc-android/jni
>  # folder.
>  ANDROID_API=android-9
>  
>  VLC_SOURCEDIR=..
>  
> -CFLAGS="-g -O2 -mlong-calls -fstrict-aliasing -funsafe-math-optimizations"
> +CFLAGS="-g -O2 -fstrict-aliasing -funsafe-math-optimizations"
> +# on x86, the compiler spits out
> +# cc1: error: unrecognized command line option "-mlong-calls"

This option is correctly documented in gcc as ARM only, no need to
mention it here.

> +if [ -n "$HAVE_ARM" ]; then
> +    CFLAGS="${CFLAGS} -mlong-calls"

Why do we use -mlong-calls btw?

> +fi
> +
>  LDFLAGS="-Wl,-Bdynamic,-dynamic-linker=/system/bin/linker -Wl,--no-undefined"
>  
> -if [ -z "$NO_NEON" ]; then
> -    NO_NEON=0
> -fi
> +if [ -n "$HAVE_ARM" ]; then
> +    if [ -z "$NO_NEON" ]; then
> +        NO_NEON=0
> +    fi
>  
> -if [ $NO_NEON -gt 0 ]; then
> -    EXTRA_PARAMS=" --disable-neon"
> -else
> -    EXTRA_PARAMS=" --enable-neon"
> -    LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8"
> +    if [ $NO_NEON -gt 0 ]; then
> +        EXTRA_PARAMS=" --disable-neon"
> +    else
> +        EXTRA_PARAMS=" --enable-neon"
> +        LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8"
> +    fi
>  fi
>  
>  CPPFLAGS="-I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/include -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_ABI}/include"
>  LDFLAGS="$LDFLAGS -L${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_ABI}"
>  
> -SYSROOT=$ANDROID_NDK/platforms/$ANDROID_API/arch-arm
> -ANDROID_BIN=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86/bin/
> -CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-
> +SYSROOT=$ANDROID_NDK/platforms/$ANDROID_API/arch-$PLATFORM_SHORT_ARCH
> +ANDROID_BIN=$ANDROID_NDK/toolchains/${PATH_HOST}-4.4.3/prebuilt/linux-x86/bin/
> +CROSS_COMPILE=${ANDROID_BIN}/${TARGET_TUPLET}-
>  
>  CPPFLAGS="$CPPFLAGS" \
>  CFLAGS="$CFLAGS ${VLC_EXTRA_CFLAGS}" \
> @@ -43,7 +54,7 @@ NM="${CROSS_COMPILE}nm" \
>  STRIP="${CROSS_COMPILE}strip" \
>  RANLIB="${CROSS_COMPILE}ranlib" \
>  AR="${CROSS_COMPILE}ar" \
> -sh $VLC_SOURCEDIR/configure --host=arm-linux-androideabi --build=x86_64-unknown-linux $EXTRA_PARAMS \
> +sh $VLC_SOURCEDIR/configure --host=$TARGET_TUPLET --build=x86_64-unknown-linux $EXTRA_PARAMS \
>                  --enable-live555 --enable-realrtsp \
>                  --enable-avformat \
>                  --enable-swscale \
> diff --git a/setup-abi-vars.sh b/setup-abi-vars.sh
> new file mode 100755
> index 0000000..aebd1a0
> --- /dev/null
> +++ b/setup-abi-vars.sh
> @@ -0,0 +1,19 @@
> +#!/bin/sh
> +
> +# Set up architecture specific variables
> +if [ ${ANDROID_ABI} = "x86" ] ; then
> +    TARGET_TUPLET="i686-android-linux"
> +    PATH_HOST="x86"
> +    HAVE_X86=1
> +    PLATFORM_SHORT_ARCH="x86"
> +elif [ ${ANDROID_ABI} = "mips" ] ; then
> +    TARGET_TUPLET="mipsel-linux-android"
> +    PATH_HOST=$TARGET_TUPLET
> +    HAVE_MIPS=1
> +    PLATFORM_SHORT_ARCH="mips"
> +else
> +    TARGET_TUPLET="arm-linux-androideabi"
> +    PATH_HOST=$TARGET_TUPLET
> +    HAVE_ARM=1
> +    PLATFORM_SHORT_ARCH="arm"
> +fi
> 



More information about the Android mailing list