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

Edward Wang edward.c.wang at compdigitec.com
Mon Jul 23 05:56:18 CEST 2012


This also softens the ground for the upcoming MIPS port too.
---
 compile.sh        |    9 +++++++--
 configure.sh      |   37 +++++++++++++++++++++++--------------
 setup-abi-vars.sh |   19 +++++++++++++++++++
 3 files changed, 49 insertions(+), 16 deletions(-)
 create mode 100755 setup-abi-vars.sh

diff --git a/compile.sh b/compile.sh
index ff7bd92..be96044 100755
--- a/compile.sh
+++ b/compile.sh
@@ -31,9 +31,12 @@ if [ -z $REL ]; then
     exit 1
 fi
 
+# Set up ABI variables (TARGET_TUPLE, PATH_HOST)
+source setup-abi-vars.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=57cace3
@@ -76,7 +79,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_TUPLE} --disable-disc --disable-sout --enable-small \
     --disable-sdl \
     --disable-SDL_image \
     --disable-fontconfig \
@@ -114,6 +117,8 @@ elif [ ${ANDROID_ABI} = "armeabi" ] ; then
             EXTRA_CFLAGS="-mfpu=vfp -mcpu=arm1136jf-s -mfloat-abi=softfp"
         fi
     fi
+elif [ ${ANDROID_ABI} = "x86" ] ; then
+    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..4cfca04 100755
--- a/configure.sh
+++ b/configure.sh
@@ -6,32 +6,41 @@ if [ -z "$ANDROID_NDK" -o -z "$ANDROID_ABI" ]; then
     exit 1
 fi
 
+# Set up ABI variables (TARGET_TUPLE, 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"
+if [ -n "$HAVE_ARM" ]; then
+    CFLAGS="${CFLAGS} -mlong-calls"
+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_TUPLE}-
 
 CPPFLAGS="$CPPFLAGS" \
 CFLAGS="$CFLAGS ${VLC_EXTRA_CFLAGS}" \
@@ -43,7 +52,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_TUPLE --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..41cf51e
--- /dev/null
+++ b/setup-abi-vars.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# Set up architecture specific 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
-- 
1.7.5.4



More information about the Android mailing list