2023-04-17 07:56:30 +00:00
|
|
|
#!/usr/bin/env bash
|
2023-05-12 14:24:22 +00:00
|
|
|
# Copyright (C) 2022 The Qt Company Ltd.
|
|
|
|
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
2023-04-17 07:56:30 +00:00
|
|
|
|
2024-05-28 10:15:14 +00:00
|
|
|
# This script will build and install FFmpeg shared libs
|
2023-04-17 07:56:30 +00:00
|
|
|
set -ex
|
|
|
|
os="$1"
|
|
|
|
|
|
|
|
# shellcheck source=../unix/InstallFromCompressedFileFromURL.sh
|
|
|
|
source "${BASH_SOURCE%/*}/../unix/InstallFromCompressedFileFromURL.sh"
|
|
|
|
# shellcheck source=../unix/SetEnvVar.sh
|
|
|
|
source "${BASH_SOURCE%/*}/../unix/SetEnvVar.sh"
|
|
|
|
|
2024-08-08 16:43:04 +00:00
|
|
|
version="n7.0.2"
|
2023-04-17 07:56:30 +00:00
|
|
|
url_public="https://github.com/FFmpeg/FFmpeg/archive/refs/tags/$version.tar.gz"
|
2024-08-08 16:43:04 +00:00
|
|
|
sha1="e017c72dd84a9bac1519eaa33c203b82dd850bc0"
|
2023-03-20 12:10:13 +00:00
|
|
|
url_cached="http://ci-files01-hki.ci.qt.io/input/ffmpeg/$version.tar.gz"
|
2023-04-17 07:56:30 +00:00
|
|
|
ffmpeg_name="FFmpeg-$version"
|
|
|
|
|
|
|
|
target_dir="$HOME"
|
|
|
|
app_prefix=""
|
|
|
|
ffmpeg_source_dir="$target_dir/$ffmpeg_name"
|
|
|
|
|
|
|
|
if [ ! -d "$ffmpeg_source_dir" ];
|
|
|
|
then
|
|
|
|
InstallFromCompressedFileFromURL "$url_cached" "$url_public" "$sha1" "$target_dir" "$app_prefix"
|
|
|
|
fi
|
|
|
|
|
|
|
|
build_ffmpeg_android() {
|
|
|
|
|
|
|
|
target_arch=$1
|
|
|
|
target_dir=$2
|
2024-05-28 10:15:14 +00:00
|
|
|
shared="${3:-no}"
|
2023-04-17 07:56:30 +00:00
|
|
|
|
|
|
|
sudo mkdir -p "$target_dir"
|
|
|
|
|
2023-10-02 12:57:26 +00:00
|
|
|
openssl_include="$OPENSSL_ANDROID_HOME_DEFAULT/include"
|
|
|
|
openssl_libs=""
|
2024-05-28 10:15:14 +00:00
|
|
|
libs_prefix=""
|
2023-04-17 07:56:30 +00:00
|
|
|
if [ "$target_arch" == "x86_64" ]; then
|
|
|
|
target_toolchain_arch="x86_64-linux-android"
|
|
|
|
target_arch=x86_64
|
2024-02-12 09:02:43 +00:00
|
|
|
target_cpu=x86-64
|
2023-10-02 12:57:26 +00:00
|
|
|
openssl_libs="$OPENSSL_ANDROID_HOME_DEFAULT/x86_64"
|
2024-05-28 10:15:14 +00:00
|
|
|
libs_prefix="_x86_64"
|
2023-04-17 07:56:30 +00:00
|
|
|
elif [ "$target_arch" == "x86" ]; then
|
|
|
|
target_toolchain_arch="i686-linux-android"
|
|
|
|
target_arch=x86
|
|
|
|
target_cpu=i686
|
2023-10-02 12:57:26 +00:00
|
|
|
openssl_libs="$OPENSSL_ANDROID_HOME_DEFAULT/x86"
|
2024-05-28 10:15:14 +00:00
|
|
|
libs_prefix="_x86"
|
2023-04-17 07:56:30 +00:00
|
|
|
elif [ "$target_arch" == "arm64" ]; then
|
|
|
|
target_toolchain_arch="aarch64-linux-android"
|
|
|
|
target_arch=aarch64
|
|
|
|
target_cpu=armv8-a
|
2023-10-02 12:57:26 +00:00
|
|
|
openssl_libs="$OPENSSL_ANDROID_HOME_DEFAULT/arm64-v8a"
|
2024-05-28 10:15:14 +00:00
|
|
|
libs_prefix="_arm64-v8a"
|
2023-04-17 07:56:30 +00:00
|
|
|
fi
|
|
|
|
|
2024-10-23 08:38:37 +00:00
|
|
|
ln -Ffs "${openssl_libs}/libcrypto_3.so" "${openssl_libs}/libcrypto.so"
|
|
|
|
ln -Ffs "${openssl_libs}/libssl_3.so" "${openssl_libs}/libssl.so"
|
2024-05-28 10:15:14 +00:00
|
|
|
|
2023-04-17 07:56:30 +00:00
|
|
|
api_version=24
|
|
|
|
|
2023-10-13 09:02:42 +00:00
|
|
|
ndk_root=$ANDROID_NDK_ROOT_DEFAULT
|
2023-04-17 07:56:30 +00:00
|
|
|
if uname -a |grep -q "Darwin"; then
|
|
|
|
ndk_host=darwin-x86_64
|
|
|
|
else
|
|
|
|
ndk_host=linux-x86_64
|
|
|
|
fi
|
|
|
|
|
|
|
|
toolchain=${ndk_root}/toolchains/llvm/prebuilt/${ndk_host}
|
|
|
|
toolchain_bin=${toolchain}/bin
|
|
|
|
sysroot=${toolchain}/sysroot
|
|
|
|
cxx=${toolchain_bin}/${target_toolchain_arch}${api_version}-clang++
|
|
|
|
cc=${toolchain_bin}/${target_toolchain_arch}${api_version}-clang
|
|
|
|
ar=${toolchain_bin}/llvm-ar
|
|
|
|
ranlib=${toolchain_bin}/llvm-ranlib
|
|
|
|
|
|
|
|
ffmpeg_config_options=$(cat "${BASH_SOURCE%/*}/../shared/ffmpeg_config_options.txt")
|
2023-10-02 12:57:26 +00:00
|
|
|
ffmpeg_config_options+=" --enable-cross-compile --target-os=android --enable-jni --enable-mediacodec --enable-openssl --enable-pthreads --enable-neon --disable-asm --disable-indev=android_camera"
|
2024-05-28 10:15:14 +00:00
|
|
|
if [[ "$shared" == "yes" ]]; then
|
|
|
|
ffmpeg_config_options+=" --enable-shared --disable-static"
|
|
|
|
fi
|
2023-04-17 07:56:30 +00:00
|
|
|
ffmpeg_config_options+=" --arch=$target_arch --cpu=${target_cpu} --sysroot=${sysroot} --sysinclude=${sysroot}/usr/include/"
|
|
|
|
ffmpeg_config_options+=" --cc=${cc} --cxx=${cxx} --ar=${ar} --ranlib=${ranlib}"
|
2023-10-02 12:57:26 +00:00
|
|
|
ffmpeg_config_options+=" --extra-cflags=-I${openssl_include} --extra-ldflags=-L${openssl_libs}"
|
2023-04-17 07:56:30 +00:00
|
|
|
|
|
|
|
local build_dir="$ffmpeg_source_dir/build/$target_arch"
|
|
|
|
sudo mkdir -p "$build_dir"
|
|
|
|
pushd "$build_dir"
|
|
|
|
|
2023-03-29 12:04:54 +00:00
|
|
|
# shellcheck disable=SC2086
|
|
|
|
sudo "$ffmpeg_source_dir/configure" $ffmpeg_config_options --prefix="$target_dir"
|
2023-04-17 07:56:30 +00:00
|
|
|
|
|
|
|
sudo make install -j4
|
2024-05-28 10:15:14 +00:00
|
|
|
|
2024-10-23 10:03:58 +00:00
|
|
|
popd
|
|
|
|
|
2024-05-28 10:15:14 +00:00
|
|
|
rm -f "${openssl_libs}/libcrypto.so"
|
|
|
|
rm -f "${openssl_libs}/libssl.so"
|
|
|
|
|
|
|
|
if [[ "$shared" == "yes" ]]; then
|
2024-05-28 17:52:00 +00:00
|
|
|
fix_dependencies="${BASH_SOURCE%/*}/../shared/fix_ffmpeg_dependencies.sh"
|
2024-05-28 10:15:14 +00:00
|
|
|
sudo "${fix_dependencies}" "${target_dir}" "${libs_prefix}" "no"
|
|
|
|
fi
|
2023-04-17 07:56:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if [ "$os" == "android-x86" ]; then
|
|
|
|
target_arch=x86
|
|
|
|
target_dir="/usr/local/android/ffmpeg-x86"
|
|
|
|
|
|
|
|
SetEnvVar "FFMPEG_DIR_ANDROID_X86" "$target_dir"
|
|
|
|
elif [ "$os" == "android-x86_64" ]; then
|
|
|
|
target_arch=x86_64
|
|
|
|
target_dir="/usr/local/android/ffmpeg-x86_64"
|
|
|
|
|
|
|
|
SetEnvVar "FFMPEG_DIR_ANDROID_X86_64" "$target_dir"
|
|
|
|
elif [ "$os" == "android-arm64" ]; then
|
|
|
|
target_arch=arm64
|
|
|
|
target_dir="/usr/local/android/ffmpeg-arm64"
|
|
|
|
|
|
|
|
SetEnvVar "FFMPEG_DIR_ANDROID_ARM64" "$target_dir"
|
|
|
|
fi
|
|
|
|
|
2024-05-29 09:02:12 +00:00
|
|
|
build_ffmpeg_android "$target_arch" "$target_dir" "yes"
|