Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: ios/web_view/tools/build.py

Issue 2941683002: Add script to generate CronetChromeWebView.framework (Closed)
Patch Set: Add dep CL. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ios/web_view/BUILD.gn ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2 # Copyright 2017 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """
7 Build and package CronetChromeWebView.framework
8 """
9
10 import argparse
11 import os
12 import shutil
13 import sys
14
15 def target_dir_name(build_config, target_device):
16 """Creates a defult output directory name for the given build_config and
Eugene But (OOO till 7-30) 2017/06/16 03:37:18 This link has an example of comments than conform
michaeldo 2017/06/16 18:16:50 Thank you for the reference, updated function comm
17 target_device"""
18 return '%s-iphone%s' % (build_config, target_device)
19
20 def build(build_config, target_device, extra_gn_options):
21 """Generates and builds CronetChromeWebView.framework for the given
22 build_config and target_device"""
23 if target_device == 'os':
24 target_cpu = 'arm'
25 additional_cpu = 'arm64'
26 else:
27 target_cpu = 'x86'
28 additional_cpu = 'x64'
29
30 if build_config == 'Debug':
31 gn_extra_args = 'is_debug=true'
Hiroshi Ichikawa 2017/06/16 07:41:59 Optional: This may be too confusing with extra_gn_
michaeldo 2017/06/16 18:16:50 I agree, I updated it to build_config_gn_args to b
32 else:
33 gn_extra_args = 'is_debug=false enable_stripping=true'
34
35 build_dir = os.path.join("out", target_dir_name(build_config, target_device))
36 gn_args = 'target_os="ios" enable_websockets=false ' \
Hiroshi Ichikawa 2017/06/16 07:41:59 It seems preferred to use parentheses than backsla
michaeldo 2017/06/16 18:16:50 Done.
37 'is_component_build=false use_xcode_clang=false ' \
38 'disable_file_support=true disable_ftp_support=true ' \
39 'disable_brotli_filter=true ' \
40 'target_cpu="%s" additional_target_cpus = ["%s"] %s %s' % \
41 (target_cpu, additional_cpu, gn_extra_args, extra_gn_options)
42
43 gn_command = 'gn gen %s --args=\'%s\'' % (build_dir, gn_args)
44 print gn_command
45 gn_result = os.system(gn_command)
46 if gn_result != 0:
47 return gn_result
48
49 ninja_command = 'ninja -C %s ios/web_view:cronet_ios_web_view_package' % \
Hiroshi Ichikawa 2017/06/16 07:41:59 Ditto.
michaeldo 2017/06/16 18:16:50 Done.
50 build_dir
51 print ninja_command
52 return os.system(ninja_command)
53
54 def copy_build_products(build_config, target_device, out_dir):
55 """Copies the resulting framework and symbols to out_dir"""
56 target_dir = target_dir_name(build_config, target_device)
57 build_dir = os.path.join("out", target_dir)
58
59 # Copy framework.
60 framework_source = os.path.join(build_dir, 'CronetChromeWebView.framework')
61 framework_dest = os.path.join(out_dir, target_dir,
62 'CronetChromeWebView.framework')
63 print 'Copying %s to %s' % (framework_source, framework_dest)
64 shutil.copytree(framework_source, framework_dest)
65
66 # Copy symbols.
67 symbols_source = os.path.join(build_dir, 'CronetChromeWebView.dSYM')
68 symbols_dest = os.path.join(out_dir, target_dir, 'CronetChromeWebView.dSYM')
69 print 'Copying %s to %s' % (symbols_source, symbols_dest)
70 shutil.copytree(symbols_source, symbols_dest)
71
72 def package_framework(build_config, target_device, out_dir, extra_gn_options):
73 """Builds CronetChromeWebView.framework for the given build_config and
74 target_device and copies the result into out_dir"""
75 print '\nBuilding for %s (%s)' % (target_device, build_config)
76
77 build_result = build(build_config, target_device, extra_gn_options)
78 if build_result != 0:
79 error = 'Building %s/%s failed with code: ' % (build_config, target_device)
80 print >>sys.stderr, error, build_result
81 return build_result
82 copy_build_products(build_config, target_device, out_dir)
83 return 0
84
85 def package_all_frameworks(out_dir, extra_gn_options):
86 """Builds Release and Debug versions of CronetChromeWebView.framework for both
87 iOS devices and simulator and copies the resulting frameworks into out_dir.
88 """
89 print 'Building CronetChromeWebView.framework...'
90
91 # Package all builds in the output directory
92 os.makedirs(out_dir)
93
94 if package_framework('Debug', 'simulator', out_dir, extra_gn_options) != 0:
95 return 1
96 if package_framework('Debug', 'os', out_dir, extra_gn_options) != 0:
97 return 1
98 if package_framework('Release', 'simulator', out_dir, extra_gn_options) != 0:
99 return 1
100 if package_framework('Release', 'os', out_dir, extra_gn_options) != 0:
101 return 1
102
103 # Copy common files from last built package to out_dir.
104 build_dir = os.path.join("out", target_dir_name('Release', 'os'))
105 package_dir = os.path.join(build_dir, 'cronet_ios_web_view')
106 shutil.copy2(os.path.join(package_dir, 'AUTHORS'), out_dir)
107 shutil.copy2(os.path.join(package_dir, 'LICENSE'), out_dir)
108 shutil.copy2(os.path.join(package_dir, 'VERSION'), out_dir)
109
110 print '\nSuccess! CronetChromeWebView.framework is packaged into %s' % out_dir
111
112 return 0
113
114 def main():
115 description = "Build and package CronetChromeWebView.framework"
116 parser = argparse.ArgumentParser(description=description)
117
118 parser.add_argument('out_dir', nargs='?', default='out/CronetChromeWebView',
119 help='path to output directory')
120 parser.add_argument('--no_goma', action='store_true',
121 help='Prevents adding use_goma=true to the gn args.')
122
123 options, extra_options = parser.parse_known_args()
124 print options
Hiroshi Ichikawa 2017/06/16 07:41:59 Maybe prefix this output with "options: " or somet
michaeldo 2017/06/16 18:16:50 I added a comment before the options are printed.
125
126 if len(extra_options):
127 print >>sys.stderr, 'Unknown options: ', extra_options
128 return 1
129
130 out_dir = options.out_dir
131 # Make sure that the output directory does not exist
132 if os.path.exists(out_dir):
133 print >>sys.stderr, 'The output directory already exists: ' + out_dir
134 return 1
135
136 gn_options = 'use_goma=true'
Hiroshi Ichikawa 2017/06/16 07:41:59 Maybe cleaner to be one line?: gn_options = '' i
michaeldo 2017/06/16 18:16:50 Done.
137 if options.no_goma:
138 gn_options = ''
139
140 return package_all_frameworks(out_dir, gn_options)
141
142
143 if __name__ == '__main__':
144 sys.exit(main())
OLDNEW
« no previous file with comments | « ios/web_view/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698