Build FFmpeg 4.2 with NDK r20

#!/usr/bin/env bash

# 当前系统
export HOST_TAG=darwin-x86_64
export NDK=/opt/Android/sdk/ndk/20.0.5594570
export MIN=$2
export ANDROID_NDK_PLATFORM=android-${MIN}
export MIN_PLATFORM=$NDK/platforms/android-$MIN
export SYSROOT=$NDK/sysroot
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG

export ARCH=$1

case $ARCH in
    "armeabi-v7a")
        TARGET="arm-linux-androideabi"
        TARGET_MIN="armv7a-linux-androideabi${MIN}"
        # CC_FLAGS="-target thumbv7-none-linux-androideabi -mfpu=vfpv3-d16 -mfloat-abi=soft"
        LDFLAGS="--fix-cortex-a8 $LDFLAGS"
        PLATFORM_ARCH="arm"
        TOOLCHAIN_FOLDER=$TARGET
    ;;
    "arm64-v8a")
        TARGET="aarch64-linux-android"
        TARGET_MIN="aarch64-linux-android${MIN}"
        # CC_FLAGS="-target aarch64-none-linux-android -mfpu=neon -mfloat-abi=soft"
        PLATFORM_ARCH="arm64"
        CONFIGURATION="$CONFIGURATION --disable-pthreads"
        TOOLCHAIN_FOLDER=$TARGET
    ;;
    "x86")
        TARGET="i686-linux-android"
        TARGET_MIN="i686-linux-android${MIN}"
        # CC_FLAGS="-target i686-none-linux-androideabi -mtune=intel -mssse3 -mfpmath=sse -m32"
        PLATFORM_ARCH="x86"
        TOOLCHAIN_FOLDER=$PLATFORM_ARCH
    ;;
    "x86_64")
        TARGET="x86_64-linux-android"
        TARGET_MIN="x86_64-linux-android${MIN}"
        # CC_FLAGS="-target x86_64-none-linux-androideabi -msse4.2 -mpopcnt -m64 -mtune=intel"
        PLATFORM_ARCH="x86_64"
        LIB_FOLDER="lib64"
        TOOLCHAIN_FOLDER=$PLATFORM_ARCH
    ;;
esac

export PREFIX=$(pwd)/android/$ARCH

# ./aarch64-linux-android21-clang++
# ./armv7a-linux-androideabi21-clang++
# ./i686-linux-android21-clang++
# ./x86_64-linux-android21-clang++

export AR=$TOOLCHAIN/bin/${TARGET}-ar
export AS=$TOOLCHAIN/bin/${TARGET}-as
# armv7a-linux-androideabi21-clang
export CC=$TOOLCHAIN/bin/${TARGET_MIN}-clang
export CXX=$TOOLCHAIN/bin/${TARGET_MIN}-clang++
export LD=$TOOLCHAIN/bin/${TARGET}-ld
export NM=$TOOLCHAIN/bin/${TARGET}-nm
export RANLIB=$TOOLCHAIN/bin/${TARGET}-ranlib
export STRIP=$TOOLCHAIN/bin/${TARGET}-strip

FF_EXTRA_CFLAGS=""

OPTIMIZE_CFLAGS="-DANDROID -I$NDK/sysroot/usr/include/${TARGET}/"
ADDI_LDFLAGS="-Wl,-rpath-link=$MIN_PLATFORM/arch-${PLATFORM_ARCH}/usr/lib -L$MIN_PLATFORM/arch-${PLATFORM_ARCH}/usr/lib -nostdlib"

echo MIN_PLATFORM is ${MIN_PLATFORM}
echo NDK is ${NDK}
echo SYSROOT is ${SYSROOT}
echo HOST_TAG is ${HOST_TAG}
echo ARCH is ${ARCH}
echo TARGET is ${TARGET}
echo PLATFORM_ARCH is ${PLATFORM_ARCH}
echo TOOLCHAIN_FOLDER is ${TOOLCHAIN_FOLDER}
echo TOOLCHAIN is ${TOOLCHAIN}

echo AR is ${AR}
echo AS is ${AS}
echo CC is ${CC}
echo CXX is ${CXX}
echo LD is ${LD}
echo NM is ${NM}
echo RANLIB is ${RANLIB}
echo STRIP is ${STRIP}

echo OPTIMIZE_CFLAGS is ${OPTIMIZE_CFLAGS}
echo ADDI_LDFLAGS is ${ADDI_LDFLAGS}

sed  -i "" "s/SLIBNAME_WITH_MAJOR='\$(SLIBNAME).\$(LIBMAJOR)'/SLIBNAME_WITH_MAJOR='\$(SLIBPREF)\$(FULLNAME)-\$(LIBMAJOR)\$(SLIBSUF)'/" configure
sed  -i "" "s/LIB_INSTALL_EXTRA_CMD='\$\$(RANLIB) \"\$(LIBDIR)\\/\$(LIBNAME)\"'/LIB_INSTALL_EXTRA_CMD='\$\$(RANLIB) \"\$(LIBDIR)\\/\$(LIBNAME)\"'/" configure
sed  -i "" "s/SLIB_INSTALL_NAME='\$(SLIBNAME_WITH_VERSION)'/SLIB_INSTALL_NAME='\$(SLIBNAME_WITH_MAJOR)'/" configure
sed  -i "" "s/SLIB_INSTALL_LINKS='\$(SLIBNAME_WITH_MAJOR) \$(SLIBNAME)'/SLIB_INSTALL_LINKS='\$(SLIBNAME)'/" configure

./configure \
--prefix=$PREFIX \
--ar=$AR \
--as=$AS \
--cc=$CC \
--cxx=$CXX \
--nm=$NM \
--ranlib=$RANLIB \
--strip=$STRIP \
--arch=$ARCH \
--target-os=android \
--enable-cross-compile \
--disable-asm \
--enable-shared \
--disable-static \
--disable-ffprobe \
--disable-ffplay \
--disable-ffmpeg \
--disable-debug \
--disable-symver \
--disable-stripping \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"

sed  -i "" "s/#define HAVE_TRUNC 0/#define HAVE_TRUNC 1/" config.h
sed  -i "" "s/#define HAVE_TRUNCF 0/#define HAVE_TRUNCF 1/" config.h
sed  -i "" "s/#define HAVE_RINT 0/#define HAVE_RINT 1/" config.h
sed  -i "" "s/#define HAVE_LRINT 0/#define HAVE_LRINT 1/" config.h
sed  -i "" "s/#define HAVE_LRINTF 0/#define HAVE_LRINTF 1/" config.h
sed  -i "" "s/#define HAVE_ROUND 0/#define HAVE_ROUND 1/" config.h
sed  -i "" "s/#define HAVE_ROUNDF 0/#define HAVE_ROUNDF 1/" config.h
sed  -i "" "s/#define HAVE_CBRT 0/#define HAVE_CBRT 1/" config.h
sed  -i "" "s/#define HAVE_CBRTF 0/#define HAVE_CBRTF 1/" config.h
sed  -i "" "s/#define HAVE_COPYSIGN 0/#define HAVE_COPYSIGN 1/" config.h
sed  -i "" "s/#define HAVE_ERF 0/#define HAVE_ERF 1/" config.h
sed  -i "" "s/#define HAVE_HYPOT 0/#define HAVE_HYPOT 1/" config.h
sed  -i "" "s/#define HAVE_ISNAN 0/#define HAVE_ISNAN 1/" config.h
sed  -i "" "s/#define HAVE_ISFINITE 0/#define HAVE_ISFINITE 1/" config.h
sed  -i "" "s/#define HAVE_INET_ATON 0/#define HAVE_INET_ATON 1/" config.h
sed  -i "" "s/#define getenv(x) NULL/\\/\\/ #define getenv(x) NULL/" config.h

https://www.cnblogs.com/fgodt/archive/2019/08/14/ffmpegforndk.html

https://blog.csdn.net/bobcat_kay/article/details/80889398

https://codezjx.com/2019/06/21/compile-ffmpeg-android/

https://www.youtube.com/watch?v=RP8SEAhcq5M

https://github.com/binglingziyu/ffmpeg-android-build

https://github.com/binglingziyu/ffmpeg-android-test

results matching ""

    No results matching ""