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