From 980cd3659aecc2002bab9d77d5546231b194e28a Mon Sep 17 00:00:00 2001 From: Elias Toivola Date: Mon, 7 Apr 2025 16:50:43 +0300 Subject: [PATCH] Build FFmpeg with each Android NDK version Multiple Android NDKs are installed in provisoning. FFmpeg build uses NDK in its build process for Android, so this change makes provisioning build multiple Android FFmpeg builds, so each Android nightly can use a FFmpeg build where its corresponding NDK version was used. Task-number: QTQAINFRA-7069 Change-Id: Ie4457c87b7b75e0c711a76bd8170e718cbda445d Reviewed-by: Assam Boudjelthia (cherry picked from commit 75fea893b1ef528547ac1e00001cd58ecd481ac2) Reviewed-by: Qt Cherry-pick Bot --- .../cmake_platforms_target_android.yaml | 8 ++-- coin/platform_configs/nightly_android.yaml | 16 +++---- .../common/unix/install-ffmpeg-android.sh | 45 +++++++++++++----- .../common/windows/install-ffmpeg.ps1 | 47 ++++++++++++++----- 4 files changed, 81 insertions(+), 35 deletions(-) diff --git a/coin/platform_configs/cmake_platforms_target_android.yaml b/coin/platform_configs/cmake_platforms_target_android.yaml index 2d1765ce..05682f75 100644 --- a/coin/platform_configs/cmake_platforms_target_android.yaml +++ b/coin/platform_configs/cmake_platforms_target_android.yaml @@ -12,7 +12,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis arm64-v8a', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH=/usr/local -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARM64}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH=/usr/local -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARM64_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}' ] - @@ -28,7 +28,7 @@ Configurations: 'Path={{.Env.MINGW_PATH}}\bin;{{.Env.Path}}', 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis armeabi-v7a -no-feature-pkg-config', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH={{.Env.Protobuf_ROOT_mingw}} -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARMV7}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR={{.Env.Protobuf_ROOT_msvc}}/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH={{.Env.Protobuf_ROOT_mingw}} -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARMV7_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR={{.Env.Protobuf_ROOT_msvc}}/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}' ] - @@ -43,7 +43,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}', 'ANDROID_EMULATOR=emulator_x86_api_28' ] @@ -59,7 +59,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_LATEST}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86_64', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_LATEST}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64_NDK_LATEST}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_LATEST}}', 'ANDROID_EMULATOR=emulator_x86_64_api_35' ] diff --git a/coin/platform_configs/nightly_android.yaml b/coin/platform_configs/nightly_android.yaml index 9ca50630..ae2d5420 100644 --- a/coin/platform_configs/nightly_android.yaml +++ b/coin/platform_configs/nightly_android.yaml @@ -19,7 +19,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY1}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86_64', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY1}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64_NDK_NIGHTLY1}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY1}}', 'ANDROID_EMULATOR=emulator_x86_64_api_35' ] @@ -35,7 +35,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY1}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY1}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_NDK_NIGHTLY1}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY1}}', 'ANDROID_EMULATOR=emulator_x86_api_28' ] @@ -52,7 +52,7 @@ Configurations: 'Path={{.Env.MINGW_PATH}}\bin;{{.Env.Path}}', 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY1}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis armeabi-v7a -no-feature-pkg-config', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY1}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH={{.Env.Protobuf_ROOT_mingw}} -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARMV7}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR={{.Env.Protobuf_ROOT_msvc}}/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH={{.Env.Protobuf_ROOT_mingw}} -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARMV7_NDK_NIGHTLY1}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR={{.Env.Protobuf_ROOT_msvc}}/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY1}}' ] - @@ -67,7 +67,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY1}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis arm64-v8a', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY1}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH=/usr/local -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARM64}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH=/usr/local -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARM64_NDK_NIGHTLY1}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY1}}' ] @@ -84,7 +84,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY2}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86_64', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY2}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_64_NDK_NIGHTLY2}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY2}}', 'ANDROID_EMULATOR=emulator_x86_64_api_35' ] @@ -100,7 +100,7 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY2}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis x86', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY2}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_X86_NDK_NIGHTLY2}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY2}}', 'ANDROID_EMULATOR=emulator_x86_api_28' ] @@ -117,7 +117,7 @@ Configurations: 'Path={{.Env.MINGW_PATH}}\bin;{{.Env.Path}}', 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY2}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis armeabi-v7a -no-feature-pkg-config', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY2}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH={{.Env.Protobuf_ROOT_mingw}} -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARMV7}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR={{.Env.Protobuf_ROOT_msvc}}/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH={{.Env.Protobuf_ROOT_mingw}} -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARMV7_NDK_NIGHTLY2}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR={{.Env.Protobuf_ROOT_msvc}}/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY2}}' ] - @@ -132,6 +132,6 @@ Configurations: Environment variables: [ 'TARGET_CONFIGURE_ARGS=-nomake examples -release -force-debug-info -android-ndk {{.Env.ANDROID_NDK_ROOT_NIGHTLY2}} -android-sdk {{.Env.ANDROID_SDK_ROOT}} -android-abis arm64-v8a', 'TARGET_CMAKE_ARGS=-DCMAKE_C_COMPILER_FRONTEND_VARIANT=GNU -DCMAKE_CXX_COMPILER_FRONTEND_VARIANT=GNU -DOPENSSL_ROOT_DIR={{.Env.OPENSSL_ANDROID_HOME_NIGHTLY2}} -DQT_GENERATE_WRAPPER_SCRIPTS_FOR_ALL_HOSTS=ON', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH=/usr/local -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARM64}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DQT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH=/usr/local -DFFMPEG_DIR={{.Env.FFMPEG_DIR_ANDROID_ARM64_NDK_NIGHTLY2}} -DQT_DEPLOY_FFMPEG=TRUE -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include', 'ANDROID_NDK_ROOT={{.Env.ANDROID_NDK_ROOT_NIGHTLY2}}' ] diff --git a/coin/provisioning/common/unix/install-ffmpeg-android.sh b/coin/provisioning/common/unix/install-ffmpeg-android.sh index dca9db56..a2650b72 100755 --- a/coin/provisioning/common/unix/install-ffmpeg-android.sh +++ b/coin/provisioning/common/unix/install-ffmpeg-android.sh @@ -21,16 +21,16 @@ assert_envvar_is_populated_dir() { exit 1 fi } -assert_envvar_is_populated_dir "OPENSSL_ANDROID_HOME_DEFAULT" -assert_envvar_is_populated_dir "ANDROID_NDK_ROOT_DEFAULT" build_ffmpeg_android() { local target_arch=$1 local target_dir=$2 + local ndk_root=$3 + local openssl_android_path=$4 sudo mkdir -p "$target_dir" - local openssl_include="$OPENSSL_ANDROID_HOME_LATEST/include" + local openssl_include="$openssl_android_path/include" local openssl_libs local libs_prefix local target_cpu @@ -40,19 +40,19 @@ build_ffmpeg_android() { target_toolchain_arch="x86_64-linux-android" target_arch=x86_64 target_cpu=x86-64 - openssl_libs="$OPENSSL_ANDROID_HOME_LATEST/x86_64" + openssl_libs="$openssl_android_path/x86_64" libs_prefix="_x86_64" elif [ "$target_arch" == "x86" ]; then target_toolchain_arch="i686-linux-android" target_arch=x86 target_cpu=i686 - openssl_libs="$OPENSSL_ANDROID_HOME_LATEST/x86" + openssl_libs="$openssl_android_path/x86" libs_prefix="_x86" elif [ "$target_arch" == "arm64" ]; then target_toolchain_arch="aarch64-linux-android" target_arch=aarch64 target_cpu=armv8-a - openssl_libs="$OPENSSL_ANDROID_HOME_LATEST/arm64-v8a" + openssl_libs="$openssl_android_path/arm64-v8a" libs_prefix="_arm64-v8a" fi @@ -61,7 +61,6 @@ build_ffmpeg_android() { local api_version=24 - local ndk_root=$ANDROID_NDK_ROOT_LATEST local ndk_host if uname -a |grep -q "Darwin"; then ndk_host=darwin-x86_64 @@ -108,15 +107,21 @@ build_ffmpeg_android() { if [ "$os" == "android-x86" ]; then target_arch=x86 target_dir="/usr/local/android/ffmpeg-x86" - envvar="FFMPEG_DIR_ANDROID_X86" + envvar_latest="FFMPEG_DIR_ANDROID_X86_NDK_LATEST" + envvar_nightly1="FFMPEG_DIR_ANDROID_X86_NDK_NIGHTLY1" + envvar_nightly2="FFMPEG_DIR_ANDROID_X86_NDK_NIGHTLY2" elif [ "$os" == "android-x86_64" ]; then target_arch=x86_64 target_dir="/usr/local/android/ffmpeg-x86_64" - envvar="FFMPEG_DIR_ANDROID_X86_64" + envvar_latest="FFMPEG_DIR_ANDROID_X86_64_NDK_LATEST" + envvar_nightly1="FFMPEG_DIR_ANDROID_X86_64_NDK_NIGHTLY1" + envvar_nightly2="FFMPEG_DIR_ANDROID_X86_64_NDK_NIGHTLY2" elif [ "$os" == "android-arm64" ]; then target_arch=arm64 target_dir="/usr/local/android/ffmpeg-arm64" - envvar="FFMPEG_DIR_ANDROID_ARM64" + envvar_latest="FFMPEG_DIR_ANDROID_ARM64_NDK_LATEST" + envvar_nightly1="FFMPEG_DIR_ANDROID_ARM64_NDK_NIGHTLY1" + envvar_nightly2="FFMPEG_DIR_ANDROID_ARM64_NDK_NIGHTLY2" else >&2 echo "Unhandled android os param: $os" exit 1 @@ -127,5 +132,21 @@ if [ ! -z $target_install_dir_param ]; then target_dir=$target_install_dir_param fi -build_ffmpeg_android "$target_arch" "$target_dir" -set_ffmpeg_dir_env_var "$envvar" "$target_dir" +assert_envvar_is_populated_dir "ANDROID_NDK_ROOT_LATEST" +assert_envvar_is_populated_dir "OPENSSL_ANDROID_HOME_LATEST" +build_ffmpeg_android "$target_arch" "$target_dir" "$ANDROID_NDK_ROOT_LATEST" "$OPENSSL_ANDROID_HOME_LATEST" +set_ffmpeg_dir_env_var "$envvar_latest" "$target_dir" + +if [ "${ANDROID_NDK_ROOT_NIGHTLY1}" ]; then + assert_envvar_is_populated_dir "ANDROID_NDK_ROOT_NIGHTLY1" + assert_envvar_is_populated_dir "OPENSSL_ANDROID_HOME_NIGHTLY1" + build_ffmpeg_android "$target_arch" "$target_dir" "$ANDROID_NDK_ROOT_NIGHTLY1" "$OPENSSL_ANDROID_HOME_NIGHTLY1" + set_ffmpeg_dir_env_var "$envvar_nightly1" "$target_dir" +fi + +if [ "${ANDROID_NDK_ROOT_NIGHTLY2}" ]; then + assert_envvar_is_populated_dir "ANDROID_NDK_ROOT_NIGHTLY2" + assert_envvar_is_populated_dir "OPENSSL_ANDROID_HOME_NIGHTLY2" + build_ffmpeg_android "$target_arch" "$target_dir" "$ANDROID_NDK_ROOT_NIGHTLY2" "$OPENSSL_ANDROID_HOME_NIGHTLY2" + set_ffmpeg_dir_env_var "$envvar_nightly2" "$target_dir" +fi diff --git a/coin/provisioning/common/windows/install-ffmpeg.ps1 b/coin/provisioning/common/windows/install-ffmpeg.ps1 index 57f13e09..3dbb6cad 100644 --- a/coin/provisioning/common/windows/install-ffmpeg.ps1 +++ b/coin/provisioning/common/windows/install-ffmpeg.ps1 @@ -37,7 +37,8 @@ function InstallFfmpeg { [string]$additionalPath, [string]$ffmpegDirEnvVar, [string]$toolchain, - [bool]$shared + [bool]$shared, + [string]$ndk_ver # Optional param for installing each ffmpeg build with different Android NDK ) Write-Host "Configure and compile FFmpeg for $buildSystem with configuration: $config" @@ -50,9 +51,16 @@ function InstallFfmpeg { $env:MSYS2_PATH_TYPE = "inherit" $env:MSYSTEM = $msystem + if ($ndk_ver) { + $prefix = "installed-ndk-$ndk_ver" + } else { + $prefix = "installed" + } + $installDir = "C:\$ffmpeg_name\build\$buildSystem\$prefix" + $cmd = "cd /c/$ffmpeg_name" $cmd += " && mkdir -p build/$buildSystem && cd build/$buildSystem" - $cmd += " && ../../configure --prefix=installed $config" + $cmd += " && ../../configure --prefix=$prefix $config" if ($toolchain) { $cmd += " --toolchain=$toolchain" } @@ -72,7 +80,7 @@ function InstallFfmpeg { return $false } - Set-EnvironmentVariable $ffmpegDirEnvVar "C:\$ffmpeg_name\build\$buildSystem\installed" + Set-EnvironmentVariable $ffmpegDirEnvVar $installDir return $true } @@ -138,16 +146,21 @@ function InstallLlvmMingwFfmpeg { } function InstallAndroidArmv7 { + param ( + [string]$ndk_root, + [string]$ffmpeg_dir_android_envvar_name, + [string]$ndk_version, + [string]$android_openssl_path # OpenSSL is built for Android using NDK, NDK versions for OpenSSL+FFmpeg should match + ) $shared=$true $target_toolchain_arch="armv7a-linux-androideabi" $target_arch="armv7-a" $target_cpu="armv7-a" $api_version="24" - $ndkVersionLatest = "r27c" - $ndkFolderLatest = "/c/Utils/Android/android-ndk-$ndkVersionLatest" + $ndk_dir = $ndk_root -replace '\\', '/' -replace '^C:', '/c' - $toolchain="${ndkFolderLatest}/toolchains/llvm/prebuilt/windows-x86_64" + $toolchain="${ndk_dir}/toolchains/llvm/prebuilt/windows-x86_64" $toolchain_bin="${toolchain}/bin" $sysroot="${toolchain}/sysroot" $cxx="${toolchain_bin}/${target_toolchain_arch}${api_version}-clang++" @@ -157,8 +170,7 @@ function InstallAndroidArmv7 { $ranlib="${toolchain_bin}/llvm-ranlib.exe" $nm="${toolchain_bin}/llvm-nm.exe" $strip="${toolchain_bin}/llvm-strip.exe" - $openssl_path = [System.Environment]::GetEnvironmentVariable("OPENSSL_ANDROID_HOME_LATEST", [System.EnvironmentVariableTarget]::Machine) - $openssl_path = $openssl_path.Replace("\", "/") + $openssl_path = $android_openssl_path.Replace("\", "/") New-Item -ItemType SymbolicLink -Path ${openssl_path}/armeabi-v7a/libcrypto.so -Target ${openssl_path}/armeabi-v7a/libcrypto_3.so New-Item -ItemType SymbolicLink -Path ${openssl_path}/armeabi-v7a/libssl.so -Target ${openssl_path}/armeabi-v7a/libssl_3.so @@ -167,12 +179,12 @@ function InstallAndroidArmv7 { $config += " --enable-cross-compile --target-os=android --enable-jni --enable-mediacodec --enable-openssl --enable-pthreads --enable-neon --disable-asm --disable-indev=android_camera" $config += " --arch=$target_arch --cpu=${target_cpu} --sysroot=${sysroot} --sysinclude=${sysroot}/usr/include/" $config += " --cc=${cc} --cxx=${cxx} --ar=${ar} --ranlib=${ranlib}" - $config += " --extra-cflags=-I$envOPENSSL_ANDROID_HOME_LATEST/include --extra-ldflags=-L$env:OPENSSL_ANDROID_HOME_LATEST/armeabi-v7a" + $config += " --extra-cflags=-I${android_openssl_path}/include --extra-ldflags=-L${android_openssl_path}/armeabi-v7a" $config += " --extra-cflags=-I${openssl_path}/include --extra-ldflags=-L${openssl_path}/armeabi-v7a" $config += " --strip=$strip" - $result= InstallFfmpeg -config $config -buildSystem "android-arm" -msystem "ANDROID_CLANG" -ffmpegDirEnvVar "FFMPEG_DIR_ANDROID_ARMV7" -shared $shared + $result= InstallFfmpeg -config $config -buildSystem "android-arm" -msystem "ANDROID_CLANG" -ffmpegDirEnvVar $ffmpeg_dir_android_envvar_name -shared $shared -ndk_ver $ndk_version Remove-Item -Path ${openssl_path}/armeabi-v7a/libcrypto.so Remove-Item -Path ${openssl_path}/armeabi-v7a/libssl.so @@ -209,7 +221,20 @@ function InstallFfmpegsAMD64 { $hostArch = "amd64" $mingwRes = InstallMingwFfmpeg $llvmMingwRes = InstallLlvmMingwFfmpeg - $androidArmV7Res = InstallAndroidArmv7 + if ($env:ANDROID_NDK_ROOT_LATEST) { + Write-Host "Install ffmpeg using latest supported Android NDK" + $androidArmV7Res = InstallAndroidArmv7 -ndk_root $env:ANDROID_NDK_ROOT_LATEST -ffmpeg_dir_android_envvar_name "FFMPEG_DIR_ANDROID_ARMV7_NDK_LATEST" -ndk_version "latest" -android_openssl_path $env:OPENSSL_ANDROID_HOME_LATEST + } else { + throw "Error: env.var ANDROID_NDK_ROOT_LATEST is not set for FFmpeg" + } + if ($env:ANDROID_NDK_ROOT_NIGHTLY1) { + Write-Host "Install ffmpeg using older Android NDK for nightly1" + InstallAndroidArmv7 -ndk_root $env:ANDROID_NDK_ROOT_NIGHTLY1 -ffmpeg_dir_android_envvar_name "FFMPEG_DIR_ANDROID_ARMV7_NDK_NIGHTLY1" -ndk_version "nightly1" -android_openssl_path $env:OPENSSL_ANDROID_HOME_NIGHTLY1 + } + if ($env:ANDROID_NDK_ROOT_NIGHTLY2) { + Write-Host "Install ffmpeg using older Android NDK for nightly2" + InstallAndroidArmv7 -ndk_root $env:ANDROID_NDK_ROOT_NIGHTLY2 -ffmpeg_dir_android_envvar_name "FFMPEG_DIR_ANDROID_ARMV7_NDK_NIGHTLY2" -ndk_version "nightly2" -android_openssl_path $env:OPENSSL_ANDROID_HOME_NIGHTLY2 + } $msvcRes = InstallMsvcFfmpeg -hostArch $hostArch -isArm64 $false $msvcArm64Res = InstallMsvcFfmpeg -hostArch $hostArch -isArm64 $true