Index: mojo/public/tools/bindings/mojom_bindings_generator.py |
diff --git a/mojo/public/tools/bindings/mojom_bindings_generator.py b/mojo/public/tools/bindings/mojom_bindings_generator.py |
index 83ab590fb8ea4c93e2ec75d77f861fbb1416674d..18b9496daf6620d87aa3a8188b93408df3aba37b 100755 |
--- a/mojo/public/tools/bindings/mojom_bindings_generator.py |
+++ b/mojo/public/tools/bindings/mojom_bindings_generator.py |
@@ -38,6 +38,7 @@ sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), |
from mojom.error import Error |
import mojom.fileutil as fileutil |
from mojom.generate.data import OrderedModuleFromData |
+from mojom.generate import template_expander |
from mojom.parse.parser import Parse |
from mojom.parse.translate import Translate |
@@ -142,7 +143,7 @@ class MojomProcessor(object): |
for language, generator_module in generator_modules.iteritems(): |
generator = generator_module.Generator( |
module, args.output_dir, typemap=self._typemap.get(language, {}), |
- variant=args.variant) |
+ variant=args.variant, bytecode_path=args.bytecode_path) |
filtered_args = [] |
if hasattr(generator_module, 'GENERATOR_PREFIX'): |
prefix = '--' + generator_module.GENERATOR_PREFIX + '_' |
@@ -190,33 +191,7 @@ class MojomProcessor(object): |
self._parsed_files[filename] = tree |
-def main(): |
- parser = argparse.ArgumentParser( |
- description="Generate bindings from mojom files.") |
- parser.add_argument("filename", nargs="+", |
- help="mojom input file") |
- parser.add_argument("-d", "--depth", dest="depth", default=".", |
- help="depth from source root") |
- parser.add_argument("-o", "--output_dir", dest="output_dir", default=".", |
- help="output directory for generated files") |
- parser.add_argument("-g", "--generators", dest="generators_string", |
- metavar="GENERATORS", |
- default="c++,javascript,java", |
- help="comma-separated list of generators") |
- parser.add_argument("--debug_print_intermediate", action="store_true", |
- help="print the intermediate representation") |
- parser.add_argument("-I", dest="import_directories", action="append", |
- metavar="directory", default=[], |
- help="add a directory to be searched for import files") |
- parser.add_argument("--use_bundled_pylibs", action="store_true", |
- help="use Python modules bundled in the SDK") |
- parser.add_argument("--typemap", action="append", metavar="TYPEMAP", |
- default=[], dest="typemaps", |
- help="apply TYPEMAP to generated output") |
- parser.add_argument("--variant", dest="variant", default=None, |
- help="output a named variant of the bindings") |
- (args, remaining_args) = parser.parse_known_args() |
- |
+def _Generate(args, remaining_args): |
if args.variant == "none": |
args.variant = None |
@@ -232,5 +207,63 @@ def main(): |
return 0 |
+def _Precompile(args, _): |
+ generator_modules = LoadGenerators(",".join(_BUILTIN_GENERATORS.keys())) |
+ |
+ template_expander.PrecompileTemplates(generator_modules, args.output_dir) |
+ return 0 |
+ |
+ |
+ |
+def main(): |
+ parser = argparse.ArgumentParser( |
+ description="Generate bindings from mojom files.") |
+ parser.add_argument("--use_bundled_pylibs", action="store_true", |
+ help="use Python modules bundled in the SDK") |
+ |
+ subparsers = parser.add_subparsers() |
+ generate_parser = subparsers.add_parser( |
+ "generate", description="Generate bindings from mojom files.") |
+ generate_parser.add_argument("filename", nargs="+", |
+ help="mojom input file") |
+ generate_parser.add_argument("-d", "--depth", dest="depth", default=".", |
+ help="depth from source root") |
+ generate_parser.add_argument("-o", "--output_dir", dest="output_dir", |
+ default=".", |
+ help="output directory for generated files") |
+ generate_parser.add_argument("--debug_print_intermediate", |
+ action="store_true", |
+ help="print the intermediate representation") |
+ generate_parser.add_argument("-g", "--generators", |
+ dest="generators_string", |
+ metavar="GENERATORS", |
+ default="c++,javascript,java", |
+ help="comma-separated list of generators") |
+ generate_parser.add_argument( |
+ "-I", dest="import_directories", action="append", metavar="directory", |
+ default=[], help="add a directory to be searched for import files") |
+ generate_parser.add_argument("--typemap", action="append", metavar="TYPEMAP", |
+ default=[], dest="typemaps", |
+ help="apply TYPEMAP to generated output") |
+ generate_parser.add_argument("--variant", dest="variant", default=None, |
+ help="output a named variant of the bindings") |
+ generate_parser.add_argument( |
+ "--bytecode_path", type=str, required=True, help=( |
+ "the path from which to load template bytecode; to generate template " |
+ "bytecode, run %s precompile BYTECODE_PATH" % os.path.basename( |
+ sys.argv[0]))) |
+ generate_parser.set_defaults(func=_Generate) |
+ |
+ precompile_parser = subparsers.add_parser("precompile", |
+ description="Precompile templates for the mojom bindings generator.") |
+ precompile_parser.add_argument( |
+ "-o", "--output_dir", dest="output_dir", default=".", |
+ help="output directory for precompiled templates") |
+ precompile_parser.set_defaults(func=_Precompile) |
+ |
+ args, remaining_args = parser.parse_known_args() |
+ return args.func(args, remaining_args) |
+ |
+ |
if __name__ == "__main__": |
sys.exit(main()) |