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

Side by Side Diff: mojo/public/tools/bindings/mojom_bindings_generator.py

Issue 1572213002: Precompile mojom bindings generator jinja templates. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """The frontend for the Mojo bindings system.""" 6 """The frontend for the Mojo bindings system."""
7 7
8 8
9 import argparse 9 import argparse
10 import imp 10 import imp
(...skipping 20 matching lines...) Expand all
31 # ignores, e.g., "--", but it's close enough.) 31 # ignores, e.g., "--", but it's close enough.)
32 if "--use_bundled_pylibs" in sys.argv[1:]: 32 if "--use_bundled_pylibs" in sys.argv[1:]:
33 sys.path.insert(0, os.path.join(_GetDirAbove("mojo"), "third_party")) 33 sys.path.insert(0, os.path.join(_GetDirAbove("mojo"), "third_party"))
34 34
35 sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 35 sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
36 "pylib")) 36 "pylib"))
37 37
38 from mojom.error import Error 38 from mojom.error import Error
39 import mojom.fileutil as fileutil 39 import mojom.fileutil as fileutil
40 from mojom.generate.data import OrderedModuleFromData 40 from mojom.generate.data import OrderedModuleFromData
41 from mojom.generate import template_expander
41 from mojom.parse.parser import Parse 42 from mojom.parse.parser import Parse
42 from mojom.parse.translate import Translate 43 from mojom.parse.translate import Translate
43 44
44 45
45 _BUILTIN_GENERATORS = { 46 _BUILTIN_GENERATORS = {
46 "c++": "mojom_cpp_generator.py", 47 "c++": "mojom_cpp_generator.py",
47 "javascript": "mojom_js_generator.py", 48 "javascript": "mojom_js_generator.py",
48 "java": "mojom_java_generator.py", 49 "java": "mojom_java_generator.py",
49 } 50 }
50 51
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 module.path = os.path.relpath(os.path.abspath(filename), 136 module.path = os.path.relpath(os.path.abspath(filename),
136 os.path.abspath(args.depth)) 137 os.path.abspath(args.depth))
137 138
138 # Normalize to unix-style path here to keep the generators simpler. 139 # Normalize to unix-style path here to keep the generators simpler.
139 module.path = module.path.replace('\\', '/') 140 module.path = module.path.replace('\\', '/')
140 141
141 if self._should_generate(filename): 142 if self._should_generate(filename):
142 for language, generator_module in generator_modules.iteritems(): 143 for language, generator_module in generator_modules.iteritems():
143 generator = generator_module.Generator( 144 generator = generator_module.Generator(
144 module, args.output_dir, typemap=self._typemap.get(language, {}), 145 module, args.output_dir, typemap=self._typemap.get(language, {}),
145 variant=args.variant) 146 variant=args.variant, bytecode_path=args.bytecode_path)
146 filtered_args = [] 147 filtered_args = []
147 if hasattr(generator_module, 'GENERATOR_PREFIX'): 148 if hasattr(generator_module, 'GENERATOR_PREFIX'):
148 prefix = '--' + generator_module.GENERATOR_PREFIX + '_' 149 prefix = '--' + generator_module.GENERATOR_PREFIX + '_'
149 filtered_args = [arg for arg in remaining_args 150 filtered_args = [arg for arg in remaining_args
150 if arg.startswith(prefix)] 151 if arg.startswith(prefix)]
151 generator.GenerateFiles(filtered_args) 152 generator.GenerateFiles(filtered_args)
152 153
153 # Save result. 154 # Save result.
154 self._processed_files[filename] = module 155 self._processed_files[filename] = module
155 return module 156 return module
(...skipping 27 matching lines...) Expand all
183 dirname = os.path.split(filename)[0] 184 dirname = os.path.split(filename)[0]
184 for imp_entry in tree.import_list: 185 for imp_entry in tree.import_list:
185 import_filename = FindImportFile(dirname, 186 import_filename = FindImportFile(dirname,
186 imp_entry.import_filename, import_directories) 187 imp_entry.import_filename, import_directories)
187 self._ParseFileAndImports(import_filename, import_directories, 188 self._ParseFileAndImports(import_filename, import_directories,
188 imported_filename_stack + [filename]) 189 imported_filename_stack + [filename])
189 190
190 self._parsed_files[filename] = tree 191 self._parsed_files[filename] = tree
191 192
192 193
193 def main(): 194 def _Generate(args, remaining_args):
194 parser = argparse.ArgumentParser(
195 description="Generate bindings from mojom files.")
196 parser.add_argument("filename", nargs="+",
197 help="mojom input file")
198 parser.add_argument("-d", "--depth", dest="depth", default=".",
199 help="depth from source root")
200 parser.add_argument("-o", "--output_dir", dest="output_dir", default=".",
201 help="output directory for generated files")
202 parser.add_argument("-g", "--generators", dest="generators_string",
203 metavar="GENERATORS",
204 default="c++,javascript,java",
205 help="comma-separated list of generators")
206 parser.add_argument("--debug_print_intermediate", action="store_true",
207 help="print the intermediate representation")
208 parser.add_argument("-I", dest="import_directories", action="append",
209 metavar="directory", default=[],
210 help="add a directory to be searched for import files")
211 parser.add_argument("--use_bundled_pylibs", action="store_true",
212 help="use Python modules bundled in the SDK")
213 parser.add_argument("--typemap", action="append", metavar="TYPEMAP",
214 default=[], dest="typemaps",
215 help="apply TYPEMAP to generated output")
216 parser.add_argument("--variant", dest="variant", default=None,
217 help="output a named variant of the bindings")
218 (args, remaining_args) = parser.parse_known_args()
219
220 if args.variant == "none": 195 if args.variant == "none":
221 args.variant = None 196 args.variant = None
222 197
223 generator_modules = LoadGenerators(args.generators_string) 198 generator_modules = LoadGenerators(args.generators_string)
224 199
225 fileutil.EnsureDirectoryExists(args.output_dir) 200 fileutil.EnsureDirectoryExists(args.output_dir)
226 201
227 processor = MojomProcessor(lambda filename: filename in args.filename) 202 processor = MojomProcessor(lambda filename: filename in args.filename)
228 processor.LoadTypemaps(set(args.typemaps)) 203 processor.LoadTypemaps(set(args.typemaps))
229 for filename in args.filename: 204 for filename in args.filename:
230 processor.ProcessFile(args, remaining_args, generator_modules, filename) 205 processor.ProcessFile(args, remaining_args, generator_modules, filename)
231 206
232 return 0 207 return 0
233 208
234 209
210 def _Precompile(args, _):
211 generator_modules = LoadGenerators(",".join(_BUILTIN_GENERATORS.keys()))
212
213 template_expander.PrecompileTemplates(generator_modules, args.output_dir)
214 return 0
215
216
217
218 def main():
219 parser = argparse.ArgumentParser(
220 description="Generate bindings from mojom files.")
221 parser.add_argument("--use_bundled_pylibs", action="store_true",
222 help="use Python modules bundled in the SDK")
223
224 subparsers = parser.add_subparsers()
225 generate_parser = subparsers.add_parser(
226 "generate", description="Generate bindings from mojom files.")
227 generate_parser.add_argument("filename", nargs="+",
228 help="mojom input file")
229 generate_parser.add_argument("-d", "--depth", dest="depth", default=".",
230 help="depth from source root")
231 generate_parser.add_argument("-o", "--output_dir", dest="output_dir",
232 default=".",
233 help="output directory for generated files")
234 generate_parser.add_argument("--debug_print_intermediate",
235 action="store_true",
236 help="print the intermediate representation")
237 generate_parser.add_argument("-g", "--generators", dest="generators_string",
238 metavar="GENERATORS",
yzshen1 2016/01/14 01:32:47 nit: the indent is a little unusual.
Sam McNally 2016/01/14 02:58:18 Done.
239 default="c++,javascript,java",
240 help="comma-separated list of generators")
241 generate_parser.add_argument(
242 "-I", dest="import_directories", action="append", metavar="directory",
243 default=[], help="add a directory to be searched for import files")
244 generate_parser.add_argument("--typemap", action="append", metavar="TYPEMAP",
245 default=[], dest="typemaps",
246 help="apply TYPEMAP to generated output")
247 generate_parser.add_argument("--variant", dest="variant", default=None,
248 help="output a named variant of the bindings")
249 generate_parser.add_argument("--bytecode_path", default=None, type=str,
250 required=True)
yzshen1 2016/01/14 01:32:47 please add "help".
Sam McNally 2016/01/14 02:58:19 Done.
251 generate_parser.set_defaults(func=_Generate)
252
253 precompile_parser = subparsers.add_parser("precompile",
254 description="Precompile templates for the mojom bindings generator.")
255 precompile_parser.add_argument(
256 "-o", "--output_dir", dest="output_dir", default=".",
257 help="output directory for precompiled templates")
258 precompile_parser.set_defaults(func=_Precompile)
259
260 args, remaining_args = parser.parse_known_args()
261 return args.func(args, remaining_args)
262
263
235 if __name__ == "__main__": 264 if __name__ == "__main__":
236 sys.exit(main()) 265 sys.exit(main())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698