Home | History | Annotate | Download | only in bindings
      1 #!/usr/bin/env python
      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
      4 # found in the LICENSE file.
      5 
      6 """The frontend for the Mojo bindings system."""
      7 
      8 
      9 import os
     10 import sys
     11 from optparse import OptionParser
     12 from parse import mojo_parser
     13 from parse import mojo_translate
     14 from generators import mojom_data
     15 from generators import mojom_js_generator
     16 from generators import mojom_cpp_generator
     17 
     18 
     19 def Main():
     20   parser = OptionParser(usage="usage: %prog [options] filename1 [filename2...]")
     21   parser.add_option("-i", "--include_dir", dest="include_dir", default=".",
     22                     help="specify directory for #includes")
     23   parser.add_option("-o", "--output_dir", dest="output_dir", default=".",
     24                     help="specify output directory")
     25   (options, args) = parser.parse_args()
     26 
     27   if len(args) < 1:
     28     parser.print_help()
     29     sys.exit(1)
     30 
     31   if not os.path.exists(options.output_dir):
     32     os.makedirs(options.output_dir)
     33 
     34   for filename in args:
     35     name = os.path.splitext(os.path.basename(filename))[0]
     36     # TODO(darin): There's clearly too many layers of translation here!  We can
     37     # at least avoid generating the serialized Mojom IR.
     38     tree = mojo_parser.Parse(filename)
     39     mojom = mojo_translate.Translate(tree, name)
     40     module = mojom_data.OrderedModuleFromData(mojom)
     41     cpp = mojom_cpp_generator.CPPGenerator(
     42         module, options.include_dir, options.output_dir)
     43     cpp.GenerateFiles()
     44     js = mojom_js_generator.JSGenerator(
     45         module, options.include_dir, options.output_dir)
     46     js.GenerateFiles()
     47 
     48 
     49 if __name__ == '__main__':
     50   Main()
     51