[vlc-devel] [PATCH] contrib: libvpx: allow compiling on android

Rafaël Carré funman at videolan.org
Thu Jun 12 23:02:31 CEST 2014


Hi,

On 06/12/14 15:10, Vittorio Giovara wrote:
> ---
> I was able to compile libvpx on android using the gcc toolchain directly with
> the following modifications:
> - apply the mac patch only on mac
> - set the sdk as android sysroot because vpx configure.sh overrides it otherwise
> - add on missing include path that the configure script is not able to find
> 
> Comments and improvement suggestions are welcome.
> Cheers,
>     Vittorio
> 
>  contrib/src/vpx/libvpx-mac.patch     |  2 +-
>  contrib/src/vpx/libvpx-sysroot.patch | 21 +++++++++++++++++++++
>  contrib/src/vpx/rules.mak            | 10 +++++++++-
>  3 files changed, 31 insertions(+), 2 deletions(-)
>  create mode 100644 contrib/src/vpx/libvpx-sysroot.patch
> 
> diff --git a/contrib/src/vpx/libvpx-mac.patch b/contrib/src/vpx/libvpx-mac.patch
> index 9c1033c..b7b6c1d 100644
> --- a/contrib/src/vpx/libvpx-mac.patch
> +++ b/contrib/src/vpx/libvpx-mac.patch
> @@ -8,7 +8,7 @@ diff -ru libvpx/build/make/configure.sh libvpx/build/make/configure.sh
>       if [ -d "/Developer/SDKs/MacOSX10.7.sdk" ]; then
>           osx_sdk_dir="/Developer/SDKs/MacOSX10.7.sdk"
>       fi
> -+    if [ -d "${sdk_path}" ]; then
> ++    if [ -d "${sdk_path}" ] && [[ "${gcctarget}" = darwin* ]]; then

Please use POSIX shell and not bash !

if [ -d "${sdk_path}" -a "{gcctarget}" = darwin ]; then  ....

I am sure some shell people will tell you how to match darwin* without
bash :)

>  +        osx_sdk_dir=${sdk_path}
>  +    fi
>   
> diff --git a/contrib/src/vpx/libvpx-sysroot.patch b/contrib/src/vpx/libvpx-sysroot.patch
> new file mode 100644
> index 0000000..0da738e
> --- /dev/null
> +++ b/contrib/src/vpx/libvpx-sysroot.patch
> @@ -0,0 +1,21 @@
> +diff --git a/build/make/configure.sh b/build/make/configure.sh
> +index d4124c7..c420d25 100755
> +--- a/build/make/configure.sh
> ++++ b/build/make/configure.sh
> +@@ -939,8 +939,11 @@ EOF
> +                           awk '{ print $1 }' | tail -1`
> +             fi
> + 
> +-            add_cflags "--sysroot=${alt_libc}"
> +-            add_ldflags "--sysroot=${alt_libc}"
> ++            # this may happen if toolchain binaries are outside the ndk dir
> ++            if [ "${alt_libc}" ]; then
> ++                add_cflags "--sysroot=${alt_libc}"
> ++                add_ldflags "--sysroot=${alt_libc}"
> ++            fi
> + 
> +             # linker flag that routes around a CPU bug in some
> +             # Cortex-A8 implementations (NDK Dev Guide)
> +-- 
> +1.8.3.2


I don't understand what that one does, can you explain?

> diff --git a/contrib/src/vpx/rules.mak b/contrib/src/vpx/rules.mak
> index e9b0651..76cd59a 100644
> --- a/contrib/src/vpx/rules.mak
> +++ b/contrib/src/vpx/rules.mak
> @@ -10,6 +10,7 @@ $(TARBALLS)/libvpx-$(VPX_VERSION).tar.bz2:
>  
>  libvpx: libvpx-$(VPX_VERSION).tar.bz2 .sum-vpx
>  	$(UNPACK)
> +	$(APPLY) $(SRC)/vpx/libvpx-sysroot.patch
>  	$(APPLY) $(SRC)/vpx/libvpx-no-cross.patch
>  	$(APPLY) $(SRC)/vpx/libvpx-mac.patch
>  	$(MOVE)
> @@ -38,7 +39,9 @@ else ifeq ($(ARCH),x86_64)
>  VPX_ARCH := x86_64
>  endif
>  
> -ifdef HAVE_LINUX
> +ifdef HAVE_ANDROID
> +VPX_OS := android
> +else ifdef HAVE_LINUX
>  VPX_OS := linux
>  else ifdef HAVE_DARWIN_OS
>  ifeq ($(ARCH),arm)
> @@ -83,6 +86,11 @@ endif
>  ifdef HAVE_IOS
>  VPX_CONF += --sdk-path=$(SDKROOT)
>  endif
> +ifdef HAVE_ANDROID
> +# vpx configure.sh overrides our sysroot
> +VPX_CONF += --sdk-path=$(shell dirname $(shell which $(HOST)-gcc)) \

Can you explain that one too?

> +            --extra-cflags="-I $(ANDROID_NDK)/sources/cpufeatures/"

OK (I guess libvpx depends on that single header there?)

> +endif
>  
>  .vpx: libvpx
>  	cd $< && CROSS=$(VPX_CROSS) ./configure --target=$(VPX_TARGET) \
> 



More information about the vlc-devel mailing list