From c98282cb03d236a3820d0c1ce374cbc4dbcebd9d 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. 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 a643620b..da3a304d 100644 --- a/coin/platform_configs/cmake_platforms.yaml +++ b/coin/platform_configs/cmake_platforms.yaml @@ -164,7 +164,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