OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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()) |
OLD | NEW |