From f9e6f3d69865dc6c2071a418b4f09c5b597a8797 Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Wed, 21 Aug 2024 09:52:56 -0700 Subject: [PATCH 1/5] Make process_framework args order consistent with iOS --- sky/tools/create_ios_framework.py | 1 - sky/tools/create_macos_framework.py | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sky/tools/create_ios_framework.py b/sky/tools/create_ios_framework.py index fab8604388b14..91f398731a9ed 100644 --- a/sky/tools/create_ios_framework.py +++ b/sky/tools/create_ios_framework.py @@ -34,7 +34,6 @@ def main(): args = parser.parse_args() dst = (args.dst if os.path.isabs(args.dst) else sky_utils.buildroot_relative_path(args.dst)) - arm64_out_dir = ( args.arm64_out_dir if os.path.isabs(args.arm64_out_dir) else sky_utils.buildroot_relative_path(args.arm64_out_dir) diff --git a/sky/tools/create_macos_framework.py b/sky/tools/create_macos_framework.py index 42db6c4d3175b..781172e22ee7f 100755 --- a/sky/tools/create_macos_framework.py +++ b/sky/tools/create_macos_framework.py @@ -28,10 +28,12 @@ def main(): args = parser.parse_args() dst = args.dst if os.path.isabs(args.dst) else sky_utils.buildroot_relative_path(args.dst) + arm64_out_dir = ( args.arm64_out_dir if os.path.isabs(args.arm64_out_dir) else sky_utils.buildroot_relative_path(args.arm64_out_dir) ) + x64_out_dir = ( args.x64_out_dir if os.path.isabs(args.x64_out_dir) else sky_utils.buildroot_relative_path(args.x64_out_dir) @@ -59,7 +61,7 @@ def main(): fat_framework = os.path.join(dst, 'FlutterMacOS.framework') sky_utils.create_fat_macos_framework(fat_framework, arm64_framework, x64_framework) - process_framework(dst, args, fat_framework) + process_framework(args, dst, fat_framework) # Create XCFramework from the arm64 and x64 fat framework. xcframeworks = [fat_framework] @@ -71,7 +73,7 @@ def main(): return 0 -def process_framework(dst, args, framework_path): +def process_framework(args, dst, framework_path): framework_binary = sky_utils.get_mac_framework_dylib_path(framework_path) if args.dsym: From 59ef99002e00cd218a34c950d13d4c60ac38bc58 Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Wed, 21 Aug 2024 09:56:51 -0700 Subject: [PATCH 2/5] Extract framework_binary lookup outside process_framework --- sky/tools/create_macos_framework.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sky/tools/create_macos_framework.py b/sky/tools/create_macos_framework.py index 781172e22ee7f..0c13599abbbc0 100755 --- a/sky/tools/create_macos_framework.py +++ b/sky/tools/create_macos_framework.py @@ -61,7 +61,8 @@ def main(): fat_framework = os.path.join(dst, 'FlutterMacOS.framework') sky_utils.create_fat_macos_framework(fat_framework, arm64_framework, x64_framework) - process_framework(args, dst, fat_framework) + framework_binary = sky_utils.get_mac_framework_dylib_path(fat_framework) + process_framework(args, dst, framework_binary) # Create XCFramework from the arm64 and x64 fat framework. xcframeworks = [fat_framework] @@ -73,9 +74,7 @@ def main(): return 0 -def process_framework(args, dst, framework_path): - framework_binary = sky_utils.get_mac_framework_dylib_path(framework_path) - +def process_framework(args, dst, framework_binary): if args.dsym: dsym_out = os.path.join(dst, 'FlutterMacOS.dSYM') sky_utils.extract_dsym(framework_binary, dsym_out) From e4e50cd1de32055a6e14961ed9511dd3c26af61f Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Wed, 21 Aug 2024 10:25:37 -0700 Subject: [PATCH 3/5] Move zip logic to zip_framework for consistency with iOS --- sky/tools/create_macos_framework.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/sky/tools/create_macos_framework.py b/sky/tools/create_macos_framework.py index 0c13599abbbc0..57b54e49553f8 100755 --- a/sky/tools/create_macos_framework.py +++ b/sky/tools/create_macos_framework.py @@ -78,17 +78,6 @@ def process_framework(args, dst, framework_binary): if args.dsym: dsym_out = os.path.join(dst, 'FlutterMacOS.dSYM') sky_utils.extract_dsym(framework_binary, dsym_out) - if args.zip: - dsym_dst = os.path.join(dst, 'FlutterMacOS.dSYM') - sky_utils.create_zip(dsym_dst, 'FlutterMacOS.dSYM.zip', ['.']) - # Create a zip of just the contents of the dSYM, then create a zip of that zip. - # TODO(fujino): remove this once https://github.com/flutter/flutter/issues/125067 is resolved - sky_utils.create_zip(dsym_dst, 'FlutterMacOS.dSYM_.zip', ['FlutterMacOS.dSYM.zip']) - - # Overwrite the FlutterMacOS.dSYM.zip with the double-zipped archive. - dsym_final_src_path = os.path.join(dsym_dst, 'FlutterMacOS.dSYM_.zip') - dsym_final_dst_path = os.path.join(dst, 'FlutterMacOS.dSYM.zip') - shutil.move(dsym_final_src_path, dsym_final_dst_path) if args.strip: unstripped_out = os.path.join(dst, 'FlutterMacOS.unstripped') @@ -127,6 +116,18 @@ def zip_framework(dst): zip_xcframework_archive(dst) + dsym_dst = os.path.join(dst, 'FlutterMacOS.dSYM') + if os.path.exists(dsym_dst): + # Create a zip of just the contents of the dSYM, then create a zip of that zip. + # TODO(cbracken): remove this once https://github.com/flutter/flutter/issues/125067 is resolved + sky_utils.create_zip(dsym_dst, 'FlutterMacOS.dSYM.zip', ['.']) + sky_utils.create_zip(dsym_dst, 'FlutterMacOS.dSYM_.zip', ['FlutterMacOS.dSYM.zip']) + + # Move the double-zipped FlutterMacOS.dSYM.zip to dst. + dsym_final_src_path = os.path.join(dsym_dst, 'FlutterMacOS.dSYM_.zip') + dsym_final_dst_path = os.path.join(dst, 'FlutterMacOS.dSYM.zip') + shutil.move(dsym_final_src_path, dsym_final_dst_path) + def zip_xcframework_archive(dst): sky_utils.write_codesign_config(os.path.join(dst, 'entitlements.txt'), []) From e5b6da970cdb2fd2a8d16d853faf11398f422d8d Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Wed, 21 Aug 2024 10:52:30 -0700 Subject: [PATCH 4/5] Extract process_framework for consistency with iOS --- sky/tools/create_macos_framework.py | 14 +------------- sky/tools/sky_utils.py | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sky/tools/create_macos_framework.py b/sky/tools/create_macos_framework.py index 57b54e49553f8..359fb8d86fcf8 100755 --- a/sky/tools/create_macos_framework.py +++ b/sky/tools/create_macos_framework.py @@ -60,9 +60,7 @@ def main(): return 1 fat_framework = os.path.join(dst, 'FlutterMacOS.framework') - sky_utils.create_fat_macos_framework(fat_framework, arm64_framework, x64_framework) - framework_binary = sky_utils.get_mac_framework_dylib_path(fat_framework) - process_framework(args, dst, framework_binary) + sky_utils.create_fat_macos_framework(args, dst, fat_framework, arm64_framework, x64_framework) # Create XCFramework from the arm64 and x64 fat framework. xcframeworks = [fat_framework] @@ -74,16 +72,6 @@ def main(): return 0 -def process_framework(args, dst, framework_binary): - if args.dsym: - dsym_out = os.path.join(dst, 'FlutterMacOS.dSYM') - sky_utils.extract_dsym(framework_binary, dsym_out) - - if args.strip: - unstripped_out = os.path.join(dst, 'FlutterMacOS.unstripped') - sky_utils.strip_binary(framework_binary, unstripped_out) - - def zip_framework(dst): framework_dst = os.path.join(dst, 'FlutterMacOS.framework') sky_utils.write_codesign_config(os.path.join(framework_dst, 'entitlements.txt'), []) diff --git a/sky/tools/sky_utils.py b/sky/tools/sky_utils.py index 1a19885911b2f..681b107397ee2 100644 --- a/sky/tools/sky_utils.py +++ b/sky/tools/sky_utils.py @@ -118,14 +118,17 @@ def copy_tree(source_path, destination_path, symlinks=False): shutil.copytree(source_path, destination_path, symlinks=symlinks) -def create_fat_macos_framework(fat_framework, arm64_framework, x64_framework): +def create_fat_macos_framework(args, dst, fat_framework, arm64_framework, x64_framework): """Creates a fat framework from two arm64 and x64 frameworks.""" # Clone the arm64 framework bundle as a starting point. copy_tree(arm64_framework, fat_framework, symlinks=True) _regenerate_symlinks(fat_framework) + framework_dylib = get_mac_framework_dylib_path(fat_framework) lipo([get_mac_framework_dylib_path(arm64_framework), - get_mac_framework_dylib_path(x64_framework)], get_mac_framework_dylib_path(fat_framework)) + get_mac_framework_dylib_path(x64_framework)], framework_dylib) _set_framework_permissions(fat_framework) + framework_dsym = os.path.join(dst, get_framework_name(fat_framework) + '.dSYM') + _process_macos_framework(args, dst, framework_dylib, framework_dsym) def _regenerate_symlinks(framework_dir): @@ -182,6 +185,15 @@ def _set_framework_permissions(framework_dir): xargs_subprocess.wait() +def _process_macos_framework(args, dst, framework_dylib, dsym): + if dsym: + extract_dsym(framework_dylib, dsym) + + if args.strip: + unstripped_out = os.path.join(dst, 'FlutterMacOS.unstripped') + strip_binary(framework_dylib, unstripped_out) + + def create_zip(cwd, zip_filename, paths): """Creates a zip archive in cwd, containing a set of cwd-relative files. From d4ea26f4700fa26119038a4a5888434f1c5d16f0 Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Wed, 21 Aug 2024 11:26:48 -0700 Subject: [PATCH 5/5] Err... keep dSYMs conditional --- sky/tools/sky_utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sky/tools/sky_utils.py b/sky/tools/sky_utils.py index 681b107397ee2..1fcb14732595a 100644 --- a/sky/tools/sky_utils.py +++ b/sky/tools/sky_utils.py @@ -127,7 +127,12 @@ def create_fat_macos_framework(args, dst, fat_framework, arm64_framework, x64_fr lipo([get_mac_framework_dylib_path(arm64_framework), get_mac_framework_dylib_path(x64_framework)], framework_dylib) _set_framework_permissions(fat_framework) - framework_dsym = os.path.join(dst, get_framework_name(fat_framework) + '.dSYM') + + # Compute dsym output path, if enabled. + framework_dsym = None + if args.dsym: + framework_dsym = os.path.join(dst, get_framework_name(fat_framework) + '.dSYM') + _process_macos_framework(args, dst, framework_dylib, framework_dsym)