Chromium Code Reviews| 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 |