From 50eef8677a935c6a3c7820afa209211abe088457 Mon Sep 17 00:00:00 2001 From: Xavier Hallade Date: Thu, 31 Jul 2014 12:01:09 +0200 Subject: [PATCH] added x86 support (call NDK_ABI=x86 ./configure_make_everything.sh to generate x86 binaries) --- README.txt | 3 +++ configure_ffmpeg.sh | 21 ++++++++++++++++----- configure_freetype2.sh | 10 +++++++++- configure_sox.sh | 1 + configure_x264.sh | 16 +++++++++++++--- settings.sh | 28 ++++++++++++++++++++++++---- 6 files changed, 66 insertions(+), 13 deletions(-) diff --git a/README.txt b/README.txt index 63a88f5..4faba67 100644 --- a/README.txt +++ b/README.txt @@ -40,6 +40,9 @@ line. For example, using the 32-bit NDK on a 64-bit system: NDK_COMPILER_VERSION=4.4.3 ./configure_make_everything.sh + Or building for an x86 Android target: + + NDK_ABI=x86 ./configure_make_everything.sh customizing ----------- diff --git a/configure_ffmpeg.sh b/configure_ffmpeg.sh index f8c5d1c..971fdee 100755 --- a/configure_ffmpeg.sh +++ b/configure_ffmpeg.sh @@ -22,25 +22,36 @@ patch -d ffmpeg -N -p1 --reject-file=- < \ pushd ffmpeg +if [[ $NDK_ABI == "arm" ]]; then + EXTRA_CFLAGS="$EXTRA_CFLAGS -mfloat-abi=softfp -mfpu=neon" +fi + +if [[ $NDK_ABI == "x86" ]]; then + EXTRA_CFLAGS="$EXTRA_CFLAGS -mtune=atom -mssse3 -mfpmath=sse" + NDK_TOOLCHAIN_BASE=$NDK_BASE/toolchains/x86-4.8/prebuilt/$NDK_UNAME-$NDK_PROCESSOR #force gcc 4.8 because of http://www.ffmpeg.org/faq.html#error_003a-can_0027t-find-a-register-in-class-_0027GENERAL_005fREGS_0027-while-reloading-_0027asm_0027 +fi + + ./configure \ $DEBUG_FLAG \ ---arch=arm \ ---cpu=cortex-a8 \ +--arch=$NDK_ABI \ +--cpu=$TARGET_CPU \ --target-os=linux \ ---enable-runtime-cpudetect \ +--enable-cross-compile \ --prefix=$prefix \ --enable-pic \ --disable-shared \ --enable-static \ ---cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$NDK_ABI-linux-androideabi- \ +--cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$HOST- \ --sysroot="$NDK_SYSROOT" \ ---extra-cflags="-I../x264 -mfloat-abi=softfp -mfpu=neon -fPIE -pie" \ +--extra-cflags="-I../x264 -fPIE -pie $EXTRA_CFLAGS" \ --extra-ldflags="-L../x264 -fPIE -pie" \ \ --enable-version3 \ --enable-gpl \ \ --disable-doc \ +--disable-avx \ --enable-yasm \ \ --enable-decoders \ diff --git a/configure_freetype2.sh b/configure_freetype2.sh index e0e4bca..798abbb 100755 --- a/configure_freetype2.sh +++ b/configure_freetype2.sh @@ -4,12 +4,20 @@ pushd `dirname $0` pushd freetype2 +case $TARGET_ARCH in + x86) + ;; + arm) + EXTRA_CFLAGS="$EXTRA_CFLAGS -mcpu=cortex-a8 -marm -mfloat-abi=softfp -mfpu=neon" + ;; +esac + ./autogen.sh ./configure \ CC="$CC" \ LD="$LD" \ - CFLAGS="-std=gnu99 -mcpu=cortex-a8 -marm -mfloat-abi=softfp -mfpu=neon -fPIE -pie" \ + CFLAGS="-std=gnu99 -fPIE -pie $EXTRA_CFLAGS" \ --host=$HOST \ --with-sysroot="$NDK_SYSROOT" \ --enable-static \ diff --git a/configure_sox.sh b/configure_sox.sh index 645495a..f53b4ad 100755 --- a/configure_sox.sh +++ b/configure_sox.sh @@ -12,6 +12,7 @@ patch -N -p1 --reject-file=- < ../sox-update-ffmpeg-api.patch autoreconf --install --force --verbose ./configure \ + --prefix=$prefix \ CFLAGS="-I$LOCAL/include -fPIE -pie" \ LDFLAGS="-L$LOCAL/lib -L$DESTDIR/x264 -fPIE -pie" \ LIBS="-lavformat -lavcodec -lavutil -lz -lx264" \ diff --git a/configure_x264.sh b/configure_x264.sh index ef70844..32a395c 100755 --- a/configure_x264.sh +++ b/configure_x264.sh @@ -4,13 +4,23 @@ pushd `dirname $0` pushd x264 -./configure --cross-prefix=$NDK_TOOLCHAIN_BASE/bin/arm-linux-androideabi- \ +case $NDK_ABI in + x86) + TARGET_HOST=i686-linux + ;; + arm) + TARGET_HOST=arm-linux + ;; +esac + +./configure --cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$HOST- \ --sysroot="$NDK_SYSROOT" \ ---host=arm-linux \ +--host=$TARGET_HOST \ --enable-pic \ --enable-static \ --extra-cflags="-fPIE -pie" \ --extra-ldflags="-fPIE -pie" \ ---disable-cli +--disable-cli \ +--disable-opencl popd;popd diff --git a/settings.sh b/settings.sh index 91c952f..9c7c612 100755 --- a/settings.sh +++ b/settings.sh @@ -7,6 +7,11 @@ if [[ "x$NDK_BASE" == "x" ]]; then echo "No NDK_BASE set, using $NDK_BASE" fi +if [[ "x$NDK_ABI" == "x" ]]; then + NDK_ABI=arm + echo "No NDK_ABI set, using $NDK_ABI" +fi + # Android now has 64-bit and 32-bit versions of the NDK for GNU/Linux. We # assume that the build platform uses the appropriate version, otherwise the # user building this will have to manually set NDK_PROCESSOR or NDK_TOOLCHAIN. @@ -17,18 +22,33 @@ else fi # Android NDK setup -NDK_PLATFORM_LEVEL=16 -NDK_ABI=arm +case $NDK_ABI in + arm) + NDK_PLATFORM_LEVEL=16 + TARGET_CPU=armv7-a + EXTRA_CFLAGS="-mfpu=neon" + EXTRA_LDFLAGS="" + ;; + x86) + NDK_PLATFORM_LEVEL=16 + TARGET_CPU=x86 + EXTRA_CFLAGS="-mtune=atom -mssse3 -mfpmath=sse" + EXTRA_LDFLAGS="" + ;; +esac + NDK_COMPILER_VERSION=4.6 NDK_SYSROOT=$NDK_BASE/platforms/android-$NDK_PLATFORM_LEVEL/arch-$NDK_ABI NDK_UNAME=`uname -s | tr '[A-Z]' '[a-z]'` -if [ $NDK_ABI = "x86" ]; then + +if [[ "$NDK_ABI" == "x86" ]]; then HOST=i686-linux-android - NDK_TOOLCHAIN=$NDK_ABI-$NDK_COMPILER_VERSION + NDK_TOOLCHAIN=x86-$NDK_COMPILER_VERSION else HOST=$NDK_ABI-linux-androideabi NDK_TOOLCHAIN=$HOST-$NDK_COMPILER_VERSION fi + NDK_TOOLCHAIN_BASE=$NDK_BASE/toolchains/$NDK_TOOLCHAIN/prebuilt/$NDK_UNAME-$NDK_PROCESSOR CC="$NDK_TOOLCHAIN_BASE/bin/$HOST-gcc --sysroot=$NDK_SYSROOT"