55# found in the LICENSE file.
66
77import argparse
8- import subprocess
98import shutil
109import sys
1110import os
@@ -38,57 +37,32 @@ def main():
3837 if os .path .isabs (args .x64_out_dir ) else sky_utils .buildroot_relative_path (args .x64_out_dir )
3938 )
4039
41- fat_framework_bundle = os .path .join (dst , 'FlutterMacOS.framework' )
4240 arm64_framework = os .path .join (arm64_out_dir , 'FlutterMacOS.framework' )
43- x64_framework = os .path .join (x64_out_dir , 'FlutterMacOS.framework' )
44-
45- arm64_dylib = os .path .join (arm64_framework , 'FlutterMacOS' )
46- x64_dylib = os .path .join (x64_framework , 'FlutterMacOS' )
47-
4841 if not os .path .isdir (arm64_framework ):
4942 print ('Cannot find macOS arm64 Framework at %s' % arm64_framework )
5043 return 1
5144
45+ x64_framework = os .path .join (x64_out_dir , 'FlutterMacOS.framework' )
5246 if not os .path .isdir (x64_framework ):
5347 print ('Cannot find macOS x64 Framework at %s' % x64_framework )
5448 return 1
5549
50+ arm64_dylib = sky_utils .get_framework_dylib_path (arm64_framework )
5651 if not os .path .isfile (arm64_dylib ):
5752 print ('Cannot find macOS arm64 dylib at %s' % arm64_dylib )
5853 return 1
5954
55+ x64_dylib = sky_utils .get_framework_dylib_path (x64_framework )
6056 if not os .path .isfile (x64_dylib ):
6157 print ('Cannot find macOS x64 dylib at %s' % x64_dylib )
6258 return 1
6359
64- sky_utils .copy_tree (arm64_framework , fat_framework_bundle , symlinks = True )
65-
66- regenerate_symlinks (fat_framework_bundle )
67-
68- fat_framework_binary = os .path .join (fat_framework_bundle , 'Versions' , 'A' , 'FlutterMacOS' )
69-
70- # Create the arm64/x64 fat framework.
71- sky_utils .lipo ([arm64_dylib , x64_dylib ], fat_framework_binary )
72-
73- # Make the framework readable and executable: u=rwx,go=rx.
74- subprocess .check_call (['chmod' , '755' , fat_framework_bundle ])
75-
76- # Add group and other readability to all files.
77- versions_path = os .path .join (fat_framework_bundle , 'Versions' )
78- subprocess .check_call (['chmod' , '-R' , 'og+r' , versions_path ])
79- # Find all the files below the target dir with owner execute permission
80- find_subprocess = subprocess .Popen (['find' , versions_path , '-perm' , '-100' , '-print0' ],
81- stdout = subprocess .PIPE )
82- # Add execute permission for other and group for all files that had it for owner.
83- xargs_subprocess = subprocess .Popen (['xargs' , '-0' , 'chmod' , 'og+x' ],
84- stdin = find_subprocess .stdout )
85- find_subprocess .wait ()
86- xargs_subprocess .wait ()
87-
88- process_framework (dst , args , fat_framework_bundle , fat_framework_binary )
60+ fat_framework = os .path .join (dst , 'FlutterMacOS.framework' )
61+ sky_utils .create_fat_macos_framework (fat_framework , arm64_framework , x64_framework )
62+ process_framework (dst , args , fat_framework )
8963
9064 # Create XCFramework from the arm64 and x64 fat framework.
91- xcframeworks = [fat_framework_bundle ]
65+ xcframeworks = [fat_framework ]
9266 create_xcframework (location = dst , name = 'FlutterMacOS' , frameworks = xcframeworks )
9367
9468 if args .zip :
@@ -97,56 +71,26 @@ def main():
9771 return 0
9872
9973
100- def regenerate_symlinks (fat_framework_bundle ):
101- """Regenerates the symlinks structure.
102-
103- Recipes V2 upload artifacts in CAS before integration and CAS follows symlinks.
104- This logic regenerates the symlinks in the expected structure.
105- """
106- if os .path .islink (os .path .join (fat_framework_bundle , 'FlutterMacOS' )):
107- return
108- os .remove (os .path .join (fat_framework_bundle , 'FlutterMacOS' ))
109- shutil .rmtree (os .path .join (fat_framework_bundle , 'Headers' ), True )
110- shutil .rmtree (os .path .join (fat_framework_bundle , 'Modules' ), True )
111- shutil .rmtree (os .path .join (fat_framework_bundle , 'Resources' ), True )
112- current_version_path = os .path .join (fat_framework_bundle , 'Versions' , 'Current' )
113- shutil .rmtree (current_version_path , True )
114- os .symlink ('A' , current_version_path )
115- os .symlink (
116- os .path .join ('Versions' , 'Current' , 'FlutterMacOS' ),
117- os .path .join (fat_framework_bundle , 'FlutterMacOS' )
118- )
119- os .symlink (
120- os .path .join ('Versions' , 'Current' , 'Headers' ), os .path .join (fat_framework_bundle , 'Headers' )
121- )
122- os .symlink (
123- os .path .join ('Versions' , 'Current' , 'Modules' ), os .path .join (fat_framework_bundle , 'Modules' )
124- )
125- os .symlink (
126- os .path .join ('Versions' , 'Current' , 'Resources' ),
127- os .path .join (fat_framework_bundle , 'Resources' )
128- )
129-
74+ def process_framework (dst , args , framework_path ):
75+ framework_binary = sky_utils .get_framework_dylib_path (framework_path )
13076
131- def process_framework (dst , args , fat_framework_bundle , fat_framework_binary ):
13277 if args .dsym :
133- dsym_out = os .path .splitext ( fat_framework_bundle )[ 0 ] + ' .dSYM'
134- sky_utils .extract_dsym (fat_framework_binary , dsym_out )
78+ dsym_out = os .path .join ( dst , 'FlutterMacOS .dSYM')
79+ sky_utils .extract_dsym (framework_binary , dsym_out )
13580 if args .zip :
136- dsym_dst = os .path .join (dst , 'FlutterMacOS.dSYM' )
137- sky_utils .create_zip (dsym_dst , 'FlutterMacOS.dSYM.zip' , ['.' ])
138- # Double zip to make it consistent with legacy artifacts.
81+ # Create a zip of just the contents of the dSYM, then create a zip of that zip.
13982 # TODO(fujino): remove this once https://github.com/flutter/flutter/issues/125067 is resolved
140- sky_utils .create_zip (dsym_dst , 'FlutterMacOS.dSYM_.zip' , ['FlutterMacOS.dSYM.zip' ])
83+ sky_utils .create_zip (dsym_out , 'FlutterMacOS.dSYM.zip' , ['.' ])
84+ sky_utils .create_zip (dsym_out , 'FlutterMacOS.dSYM_.zip' , ['FlutterMacOS.dSYM.zip' ])
14185
14286 # Overwrite the FlutterMacOS.dSYM.zip with the double-zipped archive.
143- dsym_final_src_path = os .path .join (dsym_dst , 'FlutterMacOS.dSYM_.zip' )
87+ dsym_final_src_path = os .path .join (dsym_out , 'FlutterMacOS.dSYM_.zip' )
14488 dsym_final_dst_path = os .path .join (dst , 'FlutterMacOS.dSYM.zip' )
14589 shutil .move (dsym_final_src_path , dsym_final_dst_path )
14690
14791 if args .strip :
14892 unstripped_out = os .path .join (dst , 'FlutterMacOS.unstripped' )
149- sky_utils .strip_binary (fat_framework_binary , unstripped_out )
93+ sky_utils .strip_binary (framework_binary , unstripped_out )
15094
15195
15296def zip_framework (dst ):
0 commit comments