mirror of
git://code.qt.io/qt/qt5.git
synced 2026-10-19 21:48:12 +08:00
install-ffmpeg.ps1 will build and install FFmpeg for many targets. Future patches will make it possible to run each of these individually to build only a single target on a local machine. See relation chain. This patch splits the initial script into multiple files, one per build target, and one for common functionality and definitions. No functional change for CI. Pick-to: 6.12 Change-Id: I717675ae73053be0426155b315d5a5f3fede6d29 Reviewed-by: Dimitrios Apostolou <[email protected]>
101 lines
5.0 KiB
PowerShell
101 lines
5.0 KiB
PowerShell
# Copyright (C) 2026 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
|
|
|
|
. "$PSScriptRoot\install-ffmpeg-common.ps1"
|
|
|
|
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
|
|
[string]$android_page_size
|
|
)
|
|
$shared=$true
|
|
$target_toolchain_arch="armv7a-linux-androideabi"
|
|
$target_arch="armv7-a"
|
|
$target_cpu="armv7-a"
|
|
$api_version="24"
|
|
|
|
$ndk_dir = ConvertTo-MsysPath $ndk_root
|
|
|
|
$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++"
|
|
$cc="${toolchain_bin}/${target_toolchain_arch}${api_version}-clang"
|
|
$ld="${toolchain_bin}/ld.exe"
|
|
$ar="${toolchain_bin}/llvm-ar.exe"
|
|
$ranlib="${toolchain_bin}/llvm-ranlib.exe"
|
|
$nm="${toolchain_bin}/llvm-nm.exe"
|
|
$strip="${toolchain_bin}/llvm-strip.exe"
|
|
|
|
Write-Host "Copying _3.so's to .so's"
|
|
Copy-Item -Path ${android_openssl_path}/armeabi-v7a/libcrypto_3.so -Destination ${android_openssl_path}/armeabi-v7a/libcrypto.so
|
|
Copy-Item -Path ${android_openssl_path}/armeabi-v7a/libssl_3.so -Destination ${android_openssl_path}/armeabi-v7a/libssl.so
|
|
|
|
$android_openssl_path_msys = ConvertTo-MsysPath $android_openssl_path
|
|
|
|
$config = GetFfmpegDefaultConfiguration
|
|
$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${android_openssl_path_msys}/include --extra-ldflags=-L${android_openssl_path_msys}/armeabi-v7a"
|
|
if ($android_page_size -eq "use_16kb_page_size"){
|
|
$config += " --extra-ldflags=-Wl,-z,max-page-size=16384"
|
|
Write-Host "FFmpeg Android using 16KB page sizes"
|
|
} elseif ($android_page_size -eq "use_4kb_page_size") {
|
|
Write-Host "FFmpeg Android using 4KB page sizes"
|
|
} else {
|
|
Write-Host "Error: FFmpeg Android page_size must be: use_16kb_page_size or: use_16kb_page_size got: $android_page_size"
|
|
return false
|
|
}
|
|
|
|
$config += " --strip=$strip"
|
|
|
|
$buildSystem = "android-arm"
|
|
$result= InstallFfmpeg -config $config -buildSystem $buildSystem -msystem "ANDROID_CLANG" -ffmpegDirEnvVar $ffmpeg_dir_android_envvar_name -shared $shared -ndk_ver $ndk_version
|
|
|
|
Remove-Item -Path ${android_openssl_path}/armeabi-v7a/libcrypto.so
|
|
Remove-Item -Path ${android_openssl_path}/armeabi-v7a/libssl.so
|
|
|
|
if (-not $shared) {
|
|
return $result
|
|
}
|
|
|
|
# For Shared ffmpeg we need to change dependencies to stubs
|
|
Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath $msys -ArgumentList ("-lc", "`"pacman -Sy --noconfirm binutils`"")
|
|
Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath $msys -ArgumentList ("-lc", "`"pacman -Sy --noconfirm autoconf`"")
|
|
Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath $msys -ArgumentList ("-lc", "`"pacman -Sy --noconfirm automake`"")
|
|
Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath $msys -ArgumentList ("-lc", "`"pacman -Sy --noconfirm libtool`"")
|
|
|
|
$patchelf_sha1 = "DDD46A2E2A16A308245C008721D877455B23BBA8"
|
|
$patchelf_sources = "https://ci-files01-hki.ci.qt.io/input/android/patchelf/0.17.2.tar.gz"
|
|
$patchelf_download_location = "C:\Windows\Temp\0.17.2.tar.gz"
|
|
|
|
try {
|
|
Invoke-WebRequest -UseBasicParsing $patchelf_sources -OutFile $patchelf_download_location
|
|
Verify-Checksum $patchelf_download_location $patchelf_sha1
|
|
Extract-tar_gz $patchelf_download_location $unzip_location
|
|
Remove $patchelf_download_location
|
|
} catch {
|
|
Write-Host "Error grabbing sources when installing patchelf:"
|
|
Write-Host $_
|
|
return $false
|
|
}
|
|
|
|
Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath $msys -ArgumentList ("-lc", "`"cd C:/patchelf-0.17.2 && ./bootstrap.sh && ./configure && make install`"")
|
|
|
|
$installDir = ResolveFFmpegInstallDir -buildSystem $buildSystem -ndkVer $ndk_version
|
|
$installDirForMsys = ConvertTo-MsysPath $installDir
|
|
$command = "${PSScriptRoot}/../shared/fix_ffmpeg_dependencies.sh ${installDirForMsys} _armeabi-v7a no"
|
|
$command = $command.Replace("\", "/")
|
|
$patchResult = Start-Process -NoNewWindow -Wait -PassThru -ErrorAction Stop -FilePath $msys -ArgumentList ("-lc", "`"$command`"")
|
|
if ($patchResult.ExitCode) {
|
|
Write-Host "fix_ffmpeg_dependencies.sh did not finish successfully"
|
|
return $false
|
|
}
|
|
|
|
return $result
|
|
}
|