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

Side by Side Diff: tools/dom/scripts/dartdomgenerator.py

Issue 444743002: Use Blink IDL parser for dart libraries. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: cleanup Created 6 years, 3 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 | Annotate | Revision Log
OLDNEW
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
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
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())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698