OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 """This is the entry point to create Dart APIs from the IDL database.""" | 6 """This is the entry point to create Dart APIs from the IDL database.""" |
7 | 7 |
8 import os | |
9 import sys | |
10 | |
11 # Setup all paths to find our PYTHON code | |
vsm
2014/09/03 22:23:41
You'll need to update these paths.
terry
2014/09/05 20:22:55
Right, once I sync'd to you CLs.
On 2014/09/03 22
| |
12 dart_dir = os.path.abspath(os.path.normpath(os.path.join(os.path.dirname(__file_ _), '..', '..', '..'))) | |
13 sys.path.insert(1, os.path.join(dart_dir, 'tools/dom/new_scripts')) | |
14 sys.path.insert(1, os.path.join(dart_dir, 'third_party/chrome/third_party/WebKit /Source/bindings/scripts')) | |
15 sys.path.insert(1, os.path.join(dart_dir, 'third_party/chrome/third_party/ply')) | |
16 sys.path.insert(1, os.path.join(dart_dir, 'third_party/chrome/src/tools')) | |
17 sys.path.insert(1, os.path.join(dart_dir, 'tools/dom/scripts')) | |
18 sys.path.insert(1, os.path.join(dart_dir, 'third_party/chrome/third_party')) | |
19 | |
8 import dartgenerator | 20 import dartgenerator |
9 import database | 21 import database |
10 import fremontcutbuilder | 22 import fremontcutbuilder |
11 import logging | 23 import logging |
12 import monitored | 24 import monitored |
13 import multiemitter | 25 import multiemitter |
14 import optparse | 26 import optparse |
15 import os | |
16 import shutil | 27 import shutil |
17 import subprocess | 28 import subprocess |
18 import sys | 29 import time |
19 from dartmetadata import DartMetadata | 30 from dartmetadata import DartMetadata |
20 from generator import TypeRegistry | 31 from generator import TypeRegistry |
21 from htmleventgenerator import HtmlEventGenerator | 32 from htmleventgenerator import HtmlEventGenerator |
22 from htmlrenamer import HtmlRenamer | 33 from htmlrenamer import HtmlRenamer |
23 from systemhtml import DartLibraryEmitter, Dart2JSBackend,\ | 34 from systemhtml import DartLibraryEmitter, Dart2JSBackend,\ |
24 HtmlDartInterfaceGenerator, DartLibrary, DartLibraries,\ | 35 HtmlDartInterfaceGenerator, DartLibrary, DartLibraries,\ |
25 HTML_LIBRARY_NAMES | 36 HTML_LIBRARY_NAMES |
26 from systemnative import CPPLibraryEmitter, DartiumBackend, \ | 37 from systemnative import CPPLibraryEmitter, DartiumBackend, \ |
27 GetNativeLibraryEmitter | 38 GetNativeLibraryEmitter |
28 from templateloader import TemplateLoader | 39 from templateloader import TemplateLoader |
29 | 40 |
30 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) | 41 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) |
42 | |
31 import utils | 43 import utils |
32 | 44 |
45 | |
33 _logger = logging.getLogger('dartdomgenerator') | 46 _logger = logging.getLogger('dartdomgenerator') |
34 | 47 |
35 class GeneratorOptions(object): | 48 class GeneratorOptions(object): |
36 def __init__(self, templates, database, type_registry, renamer, | 49 def __init__(self, templates, database, type_registry, renamer, |
37 metadata): | 50 metadata): |
38 self.templates = templates | 51 self.templates = templates |
39 self.database = database | 52 self.database = database |
40 self.type_registry = type_registry | 53 self.type_registry = type_registry |
41 self.renamer = renamer | 54 self.renamer = renamer |
42 self.metadata = metadata; | 55 self.metadata = metadata; |
43 | 56 |
44 def LoadDatabase(database_dir, use_database_cache): | 57 def LoadDatabase(database_dir, use_database_cache): |
45 common_database = database.Database(database_dir) | 58 common_database = database.Database(database_dir) |
46 if use_database_cache: | 59 if use_database_cache: |
47 common_database.LoadFromCache() | 60 common_database.LoadFromCache() |
48 else: | 61 else: |
49 common_database.Load() | 62 common_database.Load() |
50 return common_database | 63 return common_database |
51 | 64 |
52 def GenerateFromDatabase(common_database, dart2js_output_dir, | 65 def GenerateFromDatabase(common_database, dart2js_output_dir, |
53 dartium_output_dir, update_dom_metadata=False, | 66 dartium_output_dir, update_dom_metadata=False, |
54 dart_use_blink=False): | 67 dart_use_blink=False, logging_level=logging.WARNING): |
68 start_time = time.time() | |
69 | |
55 current_dir = os.path.dirname(__file__) | 70 current_dir = os.path.dirname(__file__) |
56 auxiliary_dir = os.path.join(current_dir, '..', 'src') | 71 auxiliary_dir = os.path.join(current_dir, '..', 'src') |
57 template_dir = os.path.join(current_dir, '..', 'templates') | 72 template_dir = os.path.join(current_dir, '..', 'templates') |
58 | 73 |
59 generator = dartgenerator.DartGenerator() | 74 _logger.setLevel(logging_level) |
75 | |
76 generator = dartgenerator.DartGenerator(logging_level) | |
60 generator.LoadAuxiliary(auxiliary_dir) | 77 generator.LoadAuxiliary(auxiliary_dir) |
61 | 78 |
62 generator.FilterMembersWithUnidentifiedTypes(common_database) | 79 generator.FilterMembersWithUnidentifiedTypes(common_database) |
63 webkit_database = common_database.Clone() | 80 webkit_database = common_database.Clone() |
64 | 81 |
65 # Generate Dart interfaces for the WebKit DOM. | 82 # Generate Dart interfaces for the WebKit DOM. |
66 generator.FilterInterfaces(database = webkit_database, | 83 generator.FilterInterfaces(database = webkit_database, |
67 or_annotations = ['WebKit', 'Dart'], | 84 or_annotations = ['WebKit', 'Dart'], |
68 exclude_displaced = ['WebKit'], | 85 exclude_displaced = ['WebKit'], |
69 exclude_suppressed = ['WebKit', 'Dart']) | 86 exclude_suppressed = ['WebKit', 'Dart']) |
70 generator.FixEventTargets(webkit_database) | 87 generator.FixEventTargets(webkit_database) |
71 generator.AddMissingArguments(webkit_database) | 88 generator.AddMissingArguments(webkit_database) |
72 | 89 |
73 emitters = multiemitter.MultiEmitter() | 90 emitters = multiemitter.MultiEmitter(logging_level) |
74 metadata = DartMetadata( | 91 metadata = DartMetadata( |
75 os.path.join(current_dir, '..', 'dom.json'), | 92 os.path.join(current_dir, '..', 'dom.json'), |
76 os.path.join(current_dir, '..', 'docs', 'docs.json')) | 93 os.path.join(current_dir, '..', 'docs', 'docs.json'), |
94 logging_level) | |
77 renamer = HtmlRenamer(webkit_database, metadata) | 95 renamer = HtmlRenamer(webkit_database, metadata) |
78 type_registry = TypeRegistry(webkit_database, renamer) | 96 type_registry = TypeRegistry(webkit_database, renamer) |
79 | 97 |
98 print 'GenerateFromDatabase %s seconds' % round((time.time() - start_time), 2) | |
99 | |
80 def RunGenerator(dart_libraries, dart_output_dir, | 100 def RunGenerator(dart_libraries, dart_output_dir, |
81 template_loader, backend_factory): | 101 template_loader, backend_factory): |
82 options = GeneratorOptions( | 102 options = GeneratorOptions( |
83 template_loader, webkit_database, type_registry, renamer, | 103 template_loader, webkit_database, type_registry, renamer, |
84 metadata) | 104 metadata) |
85 dart_library_emitter = DartLibraryEmitter( | 105 dart_library_emitter = DartLibraryEmitter( |
86 emitters, dart_output_dir, dart_libraries) | 106 emitters, dart_output_dir, dart_libraries) |
87 event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, | 107 event_generator = HtmlEventGenerator(webkit_database, renamer, metadata, |
88 template_loader) | 108 template_loader) |
89 | 109 |
(...skipping 10 matching lines...) Expand all Loading... | |
100 if dart2js_output_dir: | 120 if dart2js_output_dir: |
101 template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] | 121 template_paths = ['html/dart2js', 'html/impl', 'html/interface', ''] |
102 template_loader = TemplateLoader(template_dir, | 122 template_loader = TemplateLoader(template_dir, |
103 template_paths, | 123 template_paths, |
104 {'DARTIUM': False, 'DART2JS': True, | 124 {'DARTIUM': False, 'DART2JS': True, |
105 'DART_USE_BLINK' : False}) | 125 'DART_USE_BLINK' : False}) |
106 backend_options = GeneratorOptions( | 126 backend_options = GeneratorOptions( |
107 template_loader, webkit_database, type_registry, renamer, | 127 template_loader, webkit_database, type_registry, renamer, |
108 metadata) | 128 metadata) |
109 backend_factory = lambda interface:\ | 129 backend_factory = lambda interface:\ |
110 Dart2JSBackend(interface, backend_options) | 130 Dart2JSBackend(interface, backend_options, logging_level) |
111 | 131 |
112 dart_output_dir = os.path.join(dart2js_output_dir, 'dart') | 132 dart_output_dir = os.path.join(dart2js_output_dir, 'dart') |
113 dart_libraries = DartLibraries( | 133 dart_libraries = DartLibraries( |
114 HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir) | 134 HTML_LIBRARY_NAMES, template_loader, 'dart2js', dart2js_output_dir) |
115 | 135 |
116 RunGenerator(dart_libraries, dart_output_dir, | 136 print '\nGenerating dart2js:\n' |
117 template_loader, backend_factory) | 137 start_time = time.time() |
138 | |
139 RunGenerator(dart_libraries, dart_output_dir, template_loader, | |
140 backend_factory) | |
141 | |
142 print 'Generated dart2js in %s seconds' % round(time.time() - start_time, 2) | |
118 | 143 |
119 if dartium_output_dir: | 144 if dartium_output_dir: |
120 template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] | 145 template_paths = ['html/dartium', 'html/impl', 'html/interface', ''] |
121 template_loader = TemplateLoader(template_dir, | 146 template_loader = TemplateLoader(template_dir, |
122 template_paths, | 147 template_paths, |
123 {'DARTIUM': True, 'DART2JS': False, | 148 {'DARTIUM': True, 'DART2JS': False, |
124 'DART_USE_BLINK' : dart_use_blink}) | 149 'DART_USE_BLINK' : dart_use_blink}) |
125 backend_options = GeneratorOptions( | 150 backend_options = GeneratorOptions( |
126 template_loader, webkit_database, type_registry, renamer, | 151 template_loader, webkit_database, type_registry, renamer, |
127 metadata) | 152 metadata) |
128 cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') | 153 cpp_output_dir = os.path.join(dartium_output_dir, 'cpp') |
129 cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) | 154 cpp_library_emitter = CPPLibraryEmitter(emitters, cpp_output_dir) |
130 dart_output_dir = os.path.join(dartium_output_dir, 'dart') | 155 dart_output_dir = os.path.join(dartium_output_dir, 'dart') |
131 native_library_emitter = \ | 156 native_library_emitter = \ |
132 GetNativeLibraryEmitter(emitters, template_loader, | 157 GetNativeLibraryEmitter(emitters, template_loader, |
133 dartium_output_dir, dart_output_dir, | 158 dartium_output_dir, dart_output_dir, |
134 auxiliary_dir) | 159 auxiliary_dir) |
135 backend_factory = lambda interface:\ | 160 backend_factory = lambda interface:\ |
136 DartiumBackend(interface, native_library_emitter, | 161 DartiumBackend(interface, native_library_emitter, |
137 cpp_library_emitter, backend_options, dart_use_blink) | 162 cpp_library_emitter, backend_options, dart_use_blink) |
138 dart_libraries = DartLibraries( | 163 dart_libraries = DartLibraries( |
139 HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir) | 164 HTML_LIBRARY_NAMES, template_loader, 'dartium', dartium_output_dir) |
165 | |
166 print '\nGenerating dartium:\n' | |
167 start_time = time.time() | |
168 | |
140 RunGenerator(dart_libraries, dart_output_dir, | 169 RunGenerator(dart_libraries, dart_output_dir, |
141 template_loader, backend_factory) | 170 template_loader, backend_factory) |
171 print 'Generated dartium in %s seconds' % round(time.time() - start_time, 2) | |
172 | |
142 cpp_library_emitter.EmitDerivedSources( | 173 cpp_library_emitter.EmitDerivedSources( |
143 template_loader.Load('cpp_derived_sources.template'), | 174 template_loader.Load('cpp_derived_sources.template'), |
144 dartium_output_dir) | 175 dartium_output_dir) |
145 cpp_library_emitter.EmitResolver( | 176 cpp_library_emitter.EmitResolver( |
146 template_loader.Load('cpp_resolver.template'), dartium_output_dir) | 177 template_loader.Load('cpp_resolver.template'), dartium_output_dir) |
147 cpp_library_emitter.EmitClassIdTable( | 178 cpp_library_emitter.EmitClassIdTable( |
148 webkit_database, dartium_output_dir, type_registry, renamer) | 179 webkit_database, dartium_output_dir, type_registry, renamer) |
149 emitters.Flush() | 180 emitters.Flush() |
150 | 181 |
151 if update_dom_metadata: | 182 if update_dom_metadata: |
152 metadata.Flush() | 183 metadata.Flush() |
153 | 184 |
154 monitored.FinishMonitoring(dart2js_output_dir) | 185 monitored.FinishMonitoring(dart2js_output_dir, _logger) |
155 | 186 |
156 def GenerateSingleFile(library_path, output_dir, generated_output_dir=None): | 187 def GenerateSingleFile(library_path, output_dir, generated_output_dir=None): |
157 library_dir = os.path.dirname(library_path) | 188 library_dir = os.path.dirname(library_path) |
158 library_filename = os.path.basename(library_path) | 189 library_filename = os.path.basename(library_path) |
159 copy_dart_script = os.path.relpath('../../copy_dart.py', | 190 copy_dart_script = os.path.relpath('../../copy_dart.py', |
160 library_dir) | 191 library_dir) |
161 output_dir = os.path.relpath(output_dir, library_dir) | 192 output_dir = os.path.relpath(output_dir, library_dir) |
162 command = ' '.join(['cd', library_dir, ';', | 193 command = ' '.join(['cd', library_dir, ';', |
163 copy_dart_script, output_dir, library_filename]) | 194 copy_dart_script, output_dir, library_filename]) |
164 subprocess.call([command], shell=True) | 195 subprocess.call([command], shell=True) |
(...skipping 20 matching lines...) Expand all Loading... | |
185 help='''Delegate all native calls to dart:blink''') | 216 help='''Delegate all native calls to dart:blink''') |
186 parser.add_option('--use-database-cache', dest='use_database_cache', | 217 parser.add_option('--use-database-cache', dest='use_database_cache', |
187 action='store_true', | 218 action='store_true', |
188 default=False, | 219 default=False, |
189 help='''Use the cached database from the previous run to | 220 help='''Use the cached database from the previous run to |
190 improve startup performance''') | 221 improve startup performance''') |
191 parser.add_option('--update-dom-metadata', dest='update_dom_metadata', | 222 parser.add_option('--update-dom-metadata', dest='update_dom_metadata', |
192 action='store_true', | 223 action='store_true', |
193 default=False, | 224 default=False, |
194 help='''Update the metadata list of DOM APIs''') | 225 help='''Update the metadata list of DOM APIs''') |
226 parser.add_option('--blink-parser', dest='blink_parser', | |
227 action='store_true', default=False, | |
228 help='Use New Blink IDL parser.') | |
229 parser.add_option('--verbose', dest='logging_level', | |
230 action='store_false', default=logging.WARNING, | |
231 help='Output all informational messages') | |
232 parser.add_option('--logging', dest='logging', type='int', | |
233 action='store', default=logging.NOTSET, | |
234 help='Level of logging 20 is Info, 30 is Warnings, 40 is Err ors') | |
235 | |
195 (options, args) = parser.parse_args() | 236 (options, args) = parser.parse_args() |
196 | 237 |
197 current_dir = os.path.dirname(__file__) | 238 current_dir = os.path.dirname(__file__) |
198 database_dir = os.path.join(current_dir, '..', 'database') | 239 database_dir = os.path.join(current_dir, '..', 'database') |
199 logging.config.fileConfig(os.path.join(current_dir, 'logging.conf')) | 240 logging.config.fileConfig(os.path.join(current_dir, 'logging.conf')) |
200 systems = options.systems.split(',') | 241 systems = options.systems.split(',') |
201 | 242 |
202 output_dir = options.output_dir or os.path.join( | 243 output_dir = options.output_dir or os.path.join( |
203 current_dir, '..', '..', utils.GetBuildDir(utils.GuessOS(), None), | 244 current_dir, '..', '..', utils.GetBuildDir(utils.GuessOS(), None), |
204 'generated') | 245 'generated') |
205 | 246 |
206 dart2js_output_dir = None | 247 dart2js_output_dir = None |
207 if 'htmldart2js' in systems: | 248 if 'htmldart2js' in systems: |
208 dart2js_output_dir = os.path.join(output_dir, 'dart2js') | 249 dart2js_output_dir = os.path.join(output_dir, 'dart2js') |
209 dartium_output_dir = None | 250 dartium_output_dir = None |
210 if 'htmldartium' in systems: | 251 if 'htmldartium' in systems: |
211 dartium_output_dir = os.path.join(output_dir, 'dartium') | 252 dartium_output_dir = os.path.join(output_dir, 'dartium') |
212 | 253 |
254 logging_level = options.logging_level \ | |
255 if options.logging == logging.NOTSET else options.logging | |
256 | |
257 start_time = time.time() | |
258 | |
213 if options.rebuild: | 259 if options.rebuild: |
214 # Parse the IDL and create the database. | 260 # Parse the IDL and create the database. |
215 database = fremontcutbuilder.main(options.parallel) | 261 database = fremontcutbuilder.main(options.parallel, options.blink_parser, |
262 logging_level=logging_level) | |
216 else: | 263 else: |
264 # TODO(terry): Should be able to remove this... | |
217 # Load the previously generated database. | 265 # Load the previously generated database. |
218 database = LoadDatabase(database_dir, options.use_database_cache) | 266 if not options.blink_parser: |
267 database = LoadDatabase(database_dir, options.use_database_cache) | |
268 | |
219 GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir, | 269 GenerateFromDatabase(database, dart2js_output_dir, dartium_output_dir, |
220 options.update_dom_metadata, options.dart_use_blink) | 270 options.update_dom_metadata, options.dart_use_blink, logging_level) |
271 | |
272 file_generation_start_time = time.time() | |
221 | 273 |
222 if 'htmldart2js' in systems: | 274 if 'htmldart2js' in systems: |
223 _logger.info('Generating dart2js single files.') | 275 _logger.info('Generating dart2js single files.') |
276 | |
224 for library_name in HTML_LIBRARY_NAMES: | 277 for library_name in HTML_LIBRARY_NAMES: |
225 GenerateSingleFile( | 278 GenerateSingleFile( |
226 os.path.join(dart2js_output_dir, '%s_dart2js.dart' % library_name), | 279 os.path.join(dart2js_output_dir, '%s_dart2js.dart' % library_name), |
227 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dart2js')) | 280 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dart2js')) |
281 | |
228 if 'htmldartium' in systems: | 282 if 'htmldartium' in systems: |
229 _logger.info('Generating dartium single files.') | 283 _logger.info('Generating dartium single files.') |
284 file_generation_start_time = time.time() | |
285 | |
230 for library_name in HTML_LIBRARY_NAMES: | 286 for library_name in HTML_LIBRARY_NAMES: |
231 GenerateSingleFile( | 287 GenerateSingleFile( |
232 os.path.join(dartium_output_dir, '%s_dartium.dart' % library_name), | 288 os.path.join(dartium_output_dir, '%s_dartium.dart' % library_name), |
233 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dartium')) | 289 os.path.join('..', '..', '..', 'sdk', 'lib', library_name, 'dartium')) |
234 GenerateSingleFile( | 290 GenerateSingleFile( |
235 os.path.join(dartium_output_dir, '_blink_dartium.dart'), | 291 os.path.join(dartium_output_dir, '_blink_dartium.dart'), |
236 os.path.join('..', '..', '..', 'sdk', 'lib', '_blink', 'dartium')) | 292 os.path.join('..', '..', '..', 'sdk', 'lib', '_blink', 'dartium')) |
237 | 293 |
294 print '\nGenerating single file %s seconds' % round(time.time() - file_generat ion_start_time, 2) | |
295 | |
296 end_time = time.time() | |
297 | |
298 print '\nDone (dartdomgenerator) %s seconds' % round(end_time - start_time, 2) | |
299 | |
238 if __name__ == '__main__': | 300 if __name__ == '__main__': |
239 sys.exit(main()) | 301 sys.exit(main()) |
OLD | NEW |