# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Generate C++ and JavaScript source files from mojom files. The output files # will go under the generated file directory tree with the same path as each # input file. # # Parameters: # # sources (required) # List of source .mojom files to compile. # # deps (optional) # # public_deps (optional) # # testonly (optional) # # visibility (optional) template("mojom") { assert(defined(invoker.sources), "\"sources\" must be defined for the $target_name template.") generator_root = "//mojo/public/tools/bindings" generator_script = "$generator_root/mojom_bindings_generator.py" generator_sources = [ generator_script, "$generator_root/generators/cpp_templates/enum_declaration.tmpl", "$generator_root/generators/cpp_templates/interface_declaration.tmpl", "$generator_root/generators/cpp_templates/interface_definition.tmpl", "$generator_root/generators/cpp_templates/interface_macros.tmpl", "$generator_root/generators/cpp_templates/interface_proxy_declaration.tmpl", "$generator_root/generators/cpp_templates/interface_request_validator_declaration.tmpl", "$generator_root/generators/cpp_templates/interface_response_validator_declaration.tmpl", "$generator_root/generators/cpp_templates/interface_stub_declaration.tmpl", "$generator_root/generators/cpp_templates/module.cc.tmpl", "$generator_root/generators/cpp_templates/module.h.tmpl", "$generator_root/generators/cpp_templates/module-internal.h.tmpl", "$generator_root/generators/cpp_templates/params_definition.tmpl", "$generator_root/generators/cpp_templates/struct_declaration.tmpl", "$generator_root/generators/cpp_templates/struct_definition.tmpl", "$generator_root/generators/cpp_templates/struct_serialization_declaration.tmpl", "$generator_root/generators/cpp_templates/struct_serialization_definition.tmpl", "$generator_root/generators/cpp_templates/struct_macros.tmpl", "$generator_root/generators/cpp_templates/wrapper_class_declaration.tmpl", "$generator_root/generators/cpp_templates/wrapper_class_definition.tmpl", "$generator_root/generators/js_templates/enum_definition.tmpl", "$generator_root/generators/js_templates/interface_definition.tmpl", "$generator_root/generators/js_templates/module.js.tmpl", "$generator_root/generators/js_templates/struct_definition.tmpl", "$generator_root/generators/python_templates/module_macros.tmpl", "$generator_root/generators/python_templates/module.py.tmpl", "$generator_root/generators/mojom_cpp_generator.py", "$generator_root/generators/mojom_js_generator.py", "$generator_root/generators/mojom_python_generator.py", "$generator_root/pylib/mojom/__init__.py", "$generator_root/pylib/mojom/error.py", "$generator_root/pylib/mojom/generate/__init__.py", "$generator_root/pylib/mojom/generate/data.py", "$generator_root/pylib/mojom/generate/generator.py", "$generator_root/pylib/mojom/generate/module.py", "$generator_root/pylib/mojom/generate/pack.py", "$generator_root/pylib/mojom/generate/template_expander.py", "$generator_root/pylib/mojom/parse/__init__.py", "$generator_root/pylib/mojom/parse/ast.py", "$generator_root/pylib/mojom/parse/lexer.py", "$generator_root/pylib/mojom/parse/parser.py", "$generator_root/pylib/mojom/parse/translate.py", ] generator_cpp_outputs = [ "{{source_gen_dir}}/{{source_name_part}}.mojom.cc", "{{source_gen_dir}}/{{source_name_part}}.mojom.h", "{{source_gen_dir}}/{{source_name_part}}.mojom-internal.h", ] generator_js_outputs = [ "{{source_gen_dir}}/{{source_name_part}}.mojom.js", ] generator_python_outputs = [ "{{source_gen_dir}}/{{source_name_part}}_mojom.py", ] if (defined(invoker.visibility)) { # Need to save this because the the target_name is overwritten inside the # action to be that of the action itself. Only define this in the case the # var is used to avoid unused var error. target_visibility = [ ":$target_name" ] } generator_target_name = target_name + "__generator" action_foreach(generator_target_name) { if (defined(invoker.visibility)) { visibility = target_visibility + invoker.visibility } script = generator_script inputs = generator_sources sources = invoker.sources outputs = generator_cpp_outputs + generator_js_outputs + generator_python_outputs args = [ "{{source}}", "--use_chromium_bundled_pylibs", "-d", rebase_path("//", root_build_dir), "-I", rebase_path("//", root_build_dir), "-o", "{{source_gen_dir}}", ] } source_set(target_name) { if (defined(invoker.visibility)) { visibility = invoker.visibility } if (defined(invoker.testonly)) { testonly = invoker.testonly } sources = process_file_template(invoker.sources, generator_cpp_outputs) data = process_file_template(invoker.sources, generator_js_outputs) deps = [ ":$generator_target_name", "//mojo/public/cpp/bindings", ] if (defined(invoker.deps)) { deps += invoker.deps } if (defined(invoker.public_deps)) { public_deps = invoker.public_deps } } }