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