From c099afdd459bccdb9e5b6d527a4198baf90f4d38 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Tue, 26 Mar 2024 13:36:40 +0100 Subject: [PATCH] Update provisioning script to build FFmpeg as dynamic libs Previously, iOS (where we mostly using static linking) was also using FFmpeg built as static libs, now switch to dynamic libraries, as it was already done for macOS. Requires changes in cmake file in qtmultimedia in order to configure with -DQT_DEPLOY_FFMPEG=TRUE. Pick-to: 6.8 Fixes: QTBUG-120991 Change-Id: I0b014f24db3127697b76c6d1774437faae64a7c8 Reviewed-by: Timur Pocheptsov --- coin/platform_configs/cmake_platforms.yaml | 2 +- .../common/unix/install-ffmpeg-ios.sh | 36 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/coin/platform_configs/cmake_platforms.yaml b/coin/platform_configs/cmake_platforms.yaml index c6c6d43c..f53765ea 100644 --- a/coin/platform_configs/cmake_platforms.yaml +++ b/coin/platform_configs/cmake_platforms.yaml @@ -201,7 +201,7 @@ Configurations: Features: ['Packaging', 'Sccache', 'DebugAndRelease', 'DisableTests', 'UseConfigure', 'WarningsAreErrors'] Environment variables: [ 'TARGET_CONFIGURE_ARGS=-debug-and-release -nomake examples -platform macx-ios-clang', - 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFEATURE_native_grpc=OFF -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include -DFFMPEG_DIR={{.Env.FFMPEG_DIR_IOS}}' + 'NON_QTBASE_TARGET_CMAKE_ARGS=-DFEATURE_native_grpc=OFF -DQT_PROTOBUF_WELL_KNOWN_TYPES_PROTO_DIR=/usr/local/include -DFFMPEG_DIR={{.Env.FFMPEG_DIR_IOS}} -DQT_DEPLOY_FFMPEG=TRUE', ] - Id: 'windows-10_22h2-mingw13' diff --git a/coin/provisioning/common/unix/install-ffmpeg-ios.sh b/coin/provisioning/common/unix/install-ffmpeg-ios.sh index d8238294..49889c78 100755 --- a/coin/provisioning/common/unix/install-ffmpeg-ios.sh +++ b/coin/provisioning/common/unix/install-ffmpeg-ios.sh @@ -61,6 +61,9 @@ build_ffmpeg_ios() { --extra-cflags="$minos" \ --extra-cxxflags="$minos" \ --enable-cross-compile \ + --enable-shared \ + --disable-static \ + --install-name-dir='@rpath/Frameworks' \ --enable-swscale \ --enable-pthreads \ --disable-audiotoolbox @@ -69,8 +72,37 @@ build_ffmpeg_ios() { popd } +install_ffmpeg() { + for dir in "$@"; do + echo "Processing files in $dir ..." + pushd "$dir" >/dev/null + find . -type l -name '*.*.dylib' | while read -r f; do + dst="${f:1}" + dstdir="$(dirname "$dst")" + sudo mkdir -p "$dstdir" + + if [[ ! -f "$dst" ]]; then + echo "/dev/null 2>&1; then + echo "Lipoing $dir/$f into $dst" + sudo lipo -create -output "$dst" "$dst" "$f" + elif ! diff "$f" "$dst"; then + echo "Error: File $f in $dir doesn't match destination $dst" + exit 1 + fi + done + echo "LS" + popd >/dev/null + done + sudo cp -r $1$prefix/include $prefix + echo "LS done." +} + build_ffmpeg_ios "x86_64" build_ffmpeg_ios "arm64" -sudo "${BASH_SOURCE%/*}/../macos/makeuniversal.sh" "$ffmpeg_source_dir/build_ios/x86_64/installed" "$ffmpeg_source_dir/build_ios/arm64/installed" -SetEnvVar "FFMPEG_DIR_IOS" $prefix +install_ffmpeg "$ffmpeg_source_dir/build_ios/x86_64/installed" "$ffmpeg_source_dir/build_ios/arm64/installed" +SetEnvVar "FFMPEG_DIR_IOS" $prefix