From 4a3296d0273cbb3df0913a826c79dda4599deb4c Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Fri, 23 Jul 2021 15:06:19 -0700 Subject: [PATCH] build_ios_libs.py: add support for building for Catalyst WebRTC can successfully build for arm64 Catalyst, but x64 Catalyst still needs some work. Nevertheless, the build script can now support it along with the existing 'simulator' and 'device' environments. Bug: webrtc:11516 Change-Id: Ic2ce8db32142a5a0a2e50f2d8a672710b283fac3 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226900 Reviewed-by: Mirko Bonadei Commit-Queue: Mirko Bonadei Cr-Commit-Position: refs/heads/master@{#34548} --- tools_webrtc/ios/build_ios_libs.py | 37 ++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/tools_webrtc/ios/build_ios_libs.py b/tools_webrtc/ios/build_ios_libs.py index c931853229..3bc88743a7 100755 --- a/tools_webrtc/ios/build_ios_libs.py +++ b/tools_webrtc/ios/build_ios_libs.py @@ -13,7 +13,6 @@ By default, the library is created in out_ios_libs/. (Change with -o.) """ import argparse -import distutils.dir_util import logging import os import shutil @@ -34,12 +33,17 @@ SDK_XCFRAMEWORK_NAME = 'WebRTC.xcframework' ENABLED_ARCHS = [ 'device:arm64', 'simulator:arm64', 'simulator:x64', + 'catalyst:arm64', 'catalyst:x64', 'arm64', 'x64' ] DEFAULT_ARCHS = [ 'device:arm64', 'simulator:arm64', 'simulator:x64' ] -IOS_DEPLOYMENT_TARGET = '12.0' +IOS_DEPLOYMENT_TARGET = { + 'device': '12.0', + 'simulator': '12.0', + 'catalyst': '14.0' +} LIBVPX_BUILD_VP9 = False sys.path.append(os.path.join(SCRIPT_DIR, '..', 'libs')) @@ -240,20 +244,26 @@ def main(): lib_path = os.path.join(framework_path, arch + '_libs') lib_paths.append(lib_path) BuildWebRTC(lib_path, environment, arch, args.build_config, - gn_target_name, IOS_DEPLOYMENT_TARGET, + gn_target_name, IOS_DEPLOYMENT_TARGET[environment], LIBVPX_BUILD_VP9, args.bitcode, args.use_goma, gn_args) all_lib_paths.extend(lib_paths) # Combine the slices. dylib_path = os.path.join(SDK_FRAMEWORK_NAME, 'WebRTC') # Dylibs will be combined, all other files are the same across archs. - # Use distutils instead of shutil to support merging folders. - distutils.dir_util.copy_tree( + shutil.rmtree( + os.path.join(framework_path, SDK_FRAMEWORK_NAME), + ignore_errors=True) + shutil.copytree( os.path.join(lib_paths[0], SDK_FRAMEWORK_NAME), - os.path.join(framework_path, SDK_FRAMEWORK_NAME)) + os.path.join(framework_path, SDK_FRAMEWORK_NAME), + symlinks=True) logging.info('Merging framework slices for %s.', environment) dylib_paths = [os.path.join(path, dylib_path) for path in lib_paths] out_dylib_path = os.path.join(framework_path, dylib_path) + if os.path.islink(out_dylib_path): + out_dylib_path = os.path.join(os.path.dirname(out_dylib_path), + os.readlink(out_dylib_path)) try: os.remove(out_dylib_path) except OSError: @@ -264,7 +274,10 @@ def main(): # Merge the dSYM slices. lib_dsym_dir_path = os.path.join(lib_paths[0], SDK_DSYM_NAME) if os.path.isdir(lib_dsym_dir_path): - distutils.dir_util.copy_tree( + shutil.rmtree( + os.path.join(framework_path, SDK_DSYM_NAME), + ignore_errors=True) + shutil.copytree( lib_dsym_dir_path, os.path.join(framework_path, SDK_DSYM_NAME)) logging.info('Merging dSYM slices.') dsym_path = os.path.join(SDK_DSYM_NAME, 'Contents', 'Resources', @@ -281,12 +294,18 @@ def main(): ] + lib_dsym_paths + ['-create', '-output', out_dsym_path] _RunCommand(cmd) + # Check for Mac-style WebRTC.framework/Resources/ (for Catalyst)... + resources_dir = os.path.join(framework_path, SDK_FRAMEWORK_NAME, + 'Resources') + if not os.path.exists(resources_dir): + # ...then fall back to iOS-style WebRTC.framework/ + resources_dir = os.path.dirname(resources_dir) + # Modify the version number. # Format should be ... # e.g. 55.0.14986 means # branch cut 55, no hotfixes, and revision 14986. - infoplist_path = os.path.join(framework_path, SDK_FRAMEWORK_NAME, - 'Info.plist') + infoplist_path = os.path.join(resources_dir, 'Info.plist') cmd = [ 'PlistBuddy', '-c', 'Print :CFBundleShortVersionString', infoplist_path