511444a65e
One of the benefits is that this adds support for building with OpenSSL 3.0 versions without breaking support for building with 1.1.1. As part of the work, the assumption that there is an /archive/ in the download path is removed. Furthermore, cmake modules for finding OpenSSL are updated in order to support 3.0.
179 lines
4.3 KiB
Bash
Executable File
179 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
SCM_URL=https://github.com/FFmpeg/FFmpeg/archive
|
|
SCM_TAG=n4.4.1
|
|
|
|
OLD_PATH=$PATH
|
|
|
|
source $(dirname "${BASH_SOURCE[0]}")/android-build-common.sh
|
|
|
|
function get_toolchain() {
|
|
HOST_OS=$(uname -s)
|
|
case ${HOST_OS} in
|
|
Darwin) HOST_OS=darwin;;
|
|
Linux) HOST_OS=linux;;
|
|
FreeBsd) HOST_OS=freebsd;;
|
|
CYGWIN*|*_NT-*) HOST_OS=cygwin;;
|
|
esac
|
|
|
|
HOST_ARCH=$(uname -m)
|
|
case ${HOST_ARCH} in
|
|
i?86) HOST_ARCH=x86;;
|
|
x86_64|amd64) HOST_ARCH=x86_64;;
|
|
esac
|
|
|
|
echo "${HOST_OS}-${HOST_ARCH}"
|
|
}
|
|
|
|
function get_build_host() {
|
|
case ${ARCH} in
|
|
armeabi-v7a)
|
|
echo "arm-linux-androideabi"
|
|
;;
|
|
arm64-v8a)
|
|
echo "aarch64-linux-android"
|
|
;;
|
|
x86)
|
|
echo "i686-linux-android"
|
|
;;
|
|
x86_64)
|
|
echo "x86_64-linux-android"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function get_clang_target_host() {
|
|
case ${ARCH} in
|
|
armeabi-v7a)
|
|
echo "armv7a-linux-androideabi${NDK_TARGET}"
|
|
;;
|
|
arm64-v8a)
|
|
echo "aarch64-linux-android${NDK_TARGET}"
|
|
;;
|
|
x86)
|
|
echo "i686-linux-android${NDK_TARGET}"
|
|
;;
|
|
x86_64)
|
|
echo "x86_64-linux-android${NDK_TARGET}"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function get_arch_specific_ldflags() {
|
|
case ${ARCH} in
|
|
armeabi-v7a)
|
|
echo "-march=armv7-a -mfpu=neon -mfloat-abi=softfp -Wl,--fix-cortex-a8"
|
|
;;
|
|
arm64-v8a)
|
|
echo "-march=armv8-a"
|
|
;;
|
|
x86)
|
|
echo "-march=i686"
|
|
;;
|
|
x86_64)
|
|
echo "-march=x86-64"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function set_toolchain_clang_paths {
|
|
TOOLCHAIN=$(get_toolchain)
|
|
|
|
common_run export PATH=$PATH:${ANDROID_NDK}/toolchains/llvm/prebuilt/${TOOLCHAIN}/bin
|
|
AR=llvm-ar
|
|
NM=llvm-nm
|
|
RANLIB=llvm-ranlib
|
|
STRIP=llvm-strip
|
|
CC=$(get_clang_target_host)-clang
|
|
CXX=$(get_clang_target_host)-clang++
|
|
|
|
case ${ARCH} in
|
|
arm64-v8a)
|
|
common_run export ac_cv_c_bigendian=no
|
|
;;
|
|
esac
|
|
}
|
|
|
|
function build {
|
|
echo "Building FFmpeg architecture $1..."
|
|
BASE=$(pwd)
|
|
common_run cd $BUILD_SRC
|
|
|
|
BUILD_HOST=$(get_build_host)
|
|
set_toolchain_clang_paths
|
|
LDFLAGS=$(get_arch_specific_ldflags)
|
|
|
|
PATH=$ANDROID_NDK:$PATH
|
|
common_run ./configure \
|
|
--cross-prefix="${BUILD_HOST}-" \
|
|
--sysroot="${ANDROID_NDK}/toolchains/llvm/prebuilt/${TOOLCHAIN}/sysroot" \
|
|
--arch="${TARGET_ARCH}" \
|
|
--cpu="${TARGET_CPU}" \
|
|
--cc="${CC}" \
|
|
--cxx="${CXX}" \
|
|
--ar="${AR}" \
|
|
--nm="${NM}" \
|
|
--ranlib="${RANLIB}" \
|
|
--strip="${STRIP}" \
|
|
--extra-ldflags="${LDFLAGS}" \
|
|
--prefix="${BUILD_DST}/${ARCH}" \
|
|
--pkg-config="${HOST_PKG_CONFIG_PATH}" \
|
|
--target-os=android \
|
|
${ARCH_OPTIONS} \
|
|
--enable-cross-compile \
|
|
--enable-pic \
|
|
--enable-jni --enable-mediacodec \
|
|
--enable-shared \
|
|
--disable-stripping \
|
|
--disable-programs --disable-doc --disable-avdevice --disable-avfilter --disable-avformat
|
|
|
|
common_run make clean
|
|
common_run make -j
|
|
common_run make install
|
|
}
|
|
|
|
# Run the main program.
|
|
common_parse_arguments $@
|
|
common_check_requirements
|
|
common_update $SCM_URL $SCM_TAG $BUILD_SRC
|
|
|
|
HOST_PKG_CONFIG_PATH=`command -v pkg-config`
|
|
if [ -z ${HOST_PKG_CONFIG_PATH} ]; then
|
|
echo "(*) pkg-config command not found\n"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
for ARCH in $BUILD_ARCH
|
|
do
|
|
case ${ARCH} in
|
|
armeabi-v7a)
|
|
TARGET_CPU="armv7-a"
|
|
TARGET_ARCH="armv7-a"
|
|
ARCH_OPTIONS=" --enable-neon --enable-asm --enable-inline-asm"
|
|
;;
|
|
arm64-v8a)
|
|
TARGET_CPU="armv8-a"
|
|
TARGET_ARCH="aarch64"
|
|
ARCH_OPTIONS=" --enable-neon --enable-asm --enable-inline-asm"
|
|
;;
|
|
x86)
|
|
TARGET_CPU="i686"
|
|
TARGET_ARCH="i686"
|
|
|
|
# asm disabled due to this ticker https://trac.ffmpeg.org/ticket/4928
|
|
ARCH_OPTIONS=" --disable-neon --disable-asm --disable-inline-asm"
|
|
;;
|
|
x86_64)
|
|
TARGET_CPU="x86_64"
|
|
TARGET_ARCH="x86_64"
|
|
ARCH_OPTIONS=" --disable-neon --enable-asm --enable-inline-asm"
|
|
;;
|
|
esac
|
|
|
|
build
|
|
common_run cp -L $BUILD_DST/$ARCH/lib/*.so $BUILD_DST/$ARCH/
|
|
|
|
common_run export PATH=$OLD_PATH
|
|
done
|