Home | History | Annotate | Download | only in bindings
      1 # Copyright 2014 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 # Generate C++ and JavaScript source files from mojom files.
      6 template("mojom") {
      7   assert(defined(invoker.sources),
      8          "\"sources\" must be defined for the $target_name template.")
      9 
     10   generator_root = "//mojo/public/tools/bindings"
     11   generator_script = "$generator_root/mojom_bindings_generator.py"
     12   generator_sources = [
     13     generator_script,
     14     "$generator_root/generators/cpp_templates/enum_declaration.tmpl",
     15     "$generator_root/generators/cpp_templates/interface_declaration.tmpl",
     16     "$generator_root/generators/cpp_templates/interface_definition.tmpl",
     17     "$generator_root/generators/cpp_templates/interface_macros.tmpl",
     18     "$generator_root/generators/cpp_templates/interface_proxy_declaration.tmpl",
     19     "$generator_root/generators/cpp_templates/interface_request_validator_declaration.tmpl",
     20     "$generator_root/generators/cpp_templates/interface_response_validator_declaration.tmpl",
     21     "$generator_root/generators/cpp_templates/interface_stub_declaration.tmpl",
     22     "$generator_root/generators/cpp_templates/module.cc.tmpl",
     23     "$generator_root/generators/cpp_templates/module.h.tmpl",
     24     "$generator_root/generators/cpp_templates/module-internal.h.tmpl",
     25     "$generator_root/generators/cpp_templates/params_definition.tmpl",
     26     "$generator_root/generators/cpp_templates/struct_declaration.tmpl",
     27     "$generator_root/generators/cpp_templates/struct_definition.tmpl",
     28     "$generator_root/generators/cpp_templates/struct_serialization_declaration.tmpl",
     29     "$generator_root/generators/cpp_templates/struct_serialization_definition.tmpl",
     30     "$generator_root/generators/cpp_templates/struct_macros.tmpl",
     31     "$generator_root/generators/cpp_templates/wrapper_class_declaration.tmpl",
     32     "$generator_root/generators/cpp_templates/wrapper_class_definition.tmpl",
     33     "$generator_root/generators/js_templates/enum_definition.tmpl",
     34     "$generator_root/generators/js_templates/interface_definition.tmpl",
     35     "$generator_root/generators/js_templates/module.js.tmpl",
     36     "$generator_root/generators/js_templates/struct_definition.tmpl",
     37     "$generator_root/generators/mojom_cpp_generator.py",
     38     "$generator_root/generators/mojom_js_generator.py",
     39     "$generator_root/pylib/mojom/__init__.py",
     40     "$generator_root/pylib/mojom/error.py",
     41     "$generator_root/pylib/mojom/generate/__init__.py",
     42     "$generator_root/pylib/mojom/generate/data.py",
     43     "$generator_root/pylib/mojom/generate/generator.py",
     44     "$generator_root/pylib/mojom/generate/module.py",
     45     "$generator_root/pylib/mojom/generate/pack.py",
     46     "$generator_root/pylib/mojom/generate/template_expander.py",
     47     "$generator_root/pylib/mojom/parse/__init__.py",
     48     "$generator_root/pylib/mojom/parse/ast.py",
     49     "$generator_root/pylib/mojom/parse/lexer.py",
     50     "$generator_root/pylib/mojom/parse/parser.py",
     51     "$generator_root/pylib/mojom/parse/translate.py",
     52   ]
     53   generator_cpp_outputs = [
     54     "$target_gen_dir/{{source_name_part}}.mojom.cc",
     55     "$target_gen_dir/{{source_name_part}}.mojom.h",
     56     "$target_gen_dir/{{source_name_part}}.mojom-internal.h",
     57   ]
     58   generator_js_outputs = [
     59     "$target_gen_dir/{{source_name_part}}.mojom.js",
     60   ]
     61 
     62   target_visibility = ":$target_name"
     63 
     64   generator_target_name = target_name + "_generator"
     65   action_foreach(generator_target_name) {
     66     visibility = target_visibility
     67     script = generator_script
     68     source_prereqs = generator_sources
     69     sources = invoker.sources
     70     outputs = generator_cpp_outputs + generator_js_outputs
     71     args = [
     72       "{{source}}",
     73       "--use_chromium_bundled_pylibs",
     74       "-d", rebase_path("//", root_build_dir),
     75       "-o", rebase_path(target_gen_dir, root_build_dir),
     76     ]
     77   }
     78 
     79   source_set(target_name) {
     80     if (defined(invoker.visibility)) {
     81       visibility = invoker.visibility
     82     }
     83     sources = process_file_template(invoker.sources, generator_cpp_outputs)
     84     data = process_file_template(invoker.sources, generator_js_outputs)
     85     deps = [
     86       ":$generator_target_name",
     87       "//mojo/public/cpp/bindings",
     88     ]
     89   }
     90 }
     91