# Copyright 2016 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.

import("//mojo/public/tools/bindings/mojom.gni")
import("//third_party/jinja2/jinja2.gni")

action("precompile_templates") {
  sources = mojom_generator_sources
  sources += [
    "$mojom_generator_root/generators/cpp_templates/enum_macros.tmpl",
    "$mojom_generator_root/generators/cpp_templates/enum_serialization_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/interface_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/interface_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/interface_macros.tmpl",
    "$mojom_generator_root/generators/cpp_templates/interface_proxy_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/interface_request_validator_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/interface_response_validator_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/interface_stub_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/module-shared-internal.h.tmpl",
    "$mojom_generator_root/generators/cpp_templates/module-shared-message-ids.h.tmpl",
    "$mojom_generator_root/generators/cpp_templates/module-shared.cc.tmpl",
    "$mojom_generator_root/generators/cpp_templates/module-shared.h.tmpl",
    "$mojom_generator_root/generators/cpp_templates/module.cc.tmpl",
    "$mojom_generator_root/generators/cpp_templates/module.h.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_data_view_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_data_view_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_macros.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_serialization_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_traits_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_traits_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/struct_unserialized_message_context.tmpl",
    "$mojom_generator_root/generators/cpp_templates/union_data_view_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/union_data_view_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/union_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/union_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/union_serialization_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/union_traits_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/union_traits_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/validation_macros.tmpl",
    "$mojom_generator_root/generators/cpp_templates/wrapper_class_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/wrapper_class_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/wrapper_class_template_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/wrapper_union_class_declaration.tmpl",
    "$mojom_generator_root/generators/cpp_templates/wrapper_union_class_definition.tmpl",
    "$mojom_generator_root/generators/cpp_templates/wrapper_union_class_template_definition.tmpl",
    "$mojom_generator_root/generators/java_templates/constant_definition.tmpl",
    "$mojom_generator_root/generators/java_templates/constants.java.tmpl",
    "$mojom_generator_root/generators/java_templates/data_types_definition.tmpl",
    "$mojom_generator_root/generators/java_templates/enum.java.tmpl",
    "$mojom_generator_root/generators/java_templates/enum_definition.tmpl",
    "$mojom_generator_root/generators/java_templates/header.java.tmpl",
    "$mojom_generator_root/generators/java_templates/interface.java.tmpl",
    "$mojom_generator_root/generators/java_templates/interface_definition.tmpl",
    "$mojom_generator_root/generators/java_templates/interface_internal.java.tmpl",
    "$mojom_generator_root/generators/java_templates/struct.java.tmpl",
    "$mojom_generator_root/generators/java_templates/union.java.tmpl",
    "$mojom_generator_root/generators/js_templates/enum_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/externs/interface_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/externs/module.externs.tmpl",
    "$mojom_generator_root/generators/js_templates/externs/struct_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/fuzzing.tmpl",
    "$mojom_generator_root/generators/js_templates/interface_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/enum_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/interface_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/interface_externs.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/module.externs.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/module_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/mojom-lite.js.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/struct_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/struct_externs.tmpl",
    "$mojom_generator_root/generators/js_templates/lite/union_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/module.amd.tmpl",
    "$mojom_generator_root/generators/js_templates/module_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/struct_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/union_definition.tmpl",
    "$mojom_generator_root/generators/js_templates/validation_macros.tmpl",
  ]
  script = mojom_generator_script

  inputs = jinja2_sources
  outputs = [
    "$target_gen_dir/cpp_templates.zip",
    "$target_gen_dir/java_templates.zip",
    "$target_gen_dir/js_templates.zip",
  ]
  args = [
    "--use_bundled_pylibs",
    "precompile",
    "-o",
    rebase_path(target_gen_dir, root_build_dir),
  ]
}
