# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//cobalt/bindings/blink_variables.gni")
import("//cobalt/script/v8c/v8c_variables.gni")

# The allowlist of what extended attributes we support. If an attribute
# not in this list is encountered, it will cause an error in the
# pipeline.
_extended_attributes_file = "//cobalt/bindings/IDLExtendedAttributes.txt"

# Additional files used by the idl compilation scripts.
_bindings_extra_inputs = [
  "//cobalt/bindings/code_generator_cobalt.py",
  "//cobalt/bindings/expression_generator.py",
  "//cobalt/bindings/contexts.py",
  "//cobalt/bindings/idl_compiler_cobalt.py",
  "//cobalt/bindings/generate_conversion_header.py",
  "//cobalt/bindings/name_conversion.py",
  "//cobalt/bindings/overload_context.py",
]
_bindings_extra_inputs += engine_bindings_scripts
_bindings_extra_inputs += idl_lexer_parser_files
_bindings_extra_inputs += idl_compiler_files

# Template definitions.
template("idl_compile") {
  action_foreach(target_name) {
    script = engine_idl_compiler

    sources = invoker.sources

    forward_variables_from(invoker,
                           [
                             "testonly",
                             "deps",
                             "public_deps",
                             "public_configs",
                           ])

    inputs = [
      _extended_attributes_file,
      invoker.component_info,
      invoker.interfaces_info,
    ]
    inputs += _bindings_extra_inputs

    generated_file_path =
        invoker.output_directory + "/{{source_root_relative_dir}}"

    if (defined(invoker.header_prefix)) {
      header_prefix = invoker.header_prefix + "_"
    } else {
      header_prefix = ""
    }

    outputs = [
      "$generated_file_path/${header_prefix}{{source_name_part}}.h",
      "$generated_file_path/${generated_bindings_prefix}_{{source_name_part}}.cc",
    ]

    args = [
      "--cache-directory",
      rebase_path(invoker.cache_directory),
      "--output-directory",
      rebase_path(invoker.output_directory),
      "--interfaces-info",
      rebase_path(invoker.interfaces_info),
      "--component-info",
      rebase_path(invoker.component_info),
      "--extended-attributes",
      rebase_path(_extended_attributes_file),
      "{{source}}",
    ]
  }
}

template("generate_type_conversion") {
  action(target_name) {
    script = engine_conversion_header_generator_script

    deps = invoker.deps

    public_deps = engine_dependencies

    inputs = [
      _extended_attributes_file,
      invoker.global_names_idl_file,
      "//cobalt/bindings/shared/idl_conditional_macros.h",
    ]
    inputs += _bindings_extra_inputs
    inputs += invoker.inputs

    # Generated header file that contains forward declarations for converting
    # to/from JS value and generated types.
    outputs = [ "${invoker.output_dir}/${generated_bindings_prefix}_gen_type_conversion.h" ]

    args = [
      "--cache-directory",
      rebase_path(invoker.cache_directory, root_build_dir),
      "--output-dir",
      rebase_path(invoker.output_dir, root_build_dir),
      "--interfaces-info",
      rebase_path(invoker.interfaces_info, root_build_dir),
      "--component-info",
      rebase_path(invoker.component_info, root_build_dir),
    ]
  }
}

template("compute_global_objects") {
  action(target_name) {
    script = "$bindings_scripts_dir/compute_global_objects.py"

    inputs = [ "$bindings_scripts_dir/utilities.py" ]
    inputs += invoker.idl_files

    outputs = [ invoker.global_objects_file ]

    idl_files_list = "$target_gen_dir/${target_name}_idl_files_list.tmp"
    write_file(idl_files_list, rebase_path(invoker.idl_files, root_build_dir))

    args = [
      "--idl-files-list",
      rebase_path(idl_files_list, root_build_dir),
      "--",
      rebase_path(invoker.global_objects_file, root_build_dir),
    ]
  }
}

template("compute_global_constructors_idls") {
  action(target_name) {
    script = "$bindings_scripts_dir/generate_global_constructors.py"

    deps = invoker.deps

    inputs = [
      "$bindings_scripts_dir/utilities.py",
      invoker.global_objects_file,
    ]
    inputs += invoker.idl_files

    outputs = [
      invoker.global_names_idl_file,
      invoker.global_constructors_generated_header_file,
    ]

    # Write the file list to a unique temp file to avoid blowing out the
    # command line length limit.
    idl_files_list = "$target_gen_dir/${target_name}_static_idl_files_list.tmp"
    write_file(idl_files_list, rebase_path(invoker.idl_files, root_build_dir))

    args = [
      "--idl-files-list",
      rebase_path(idl_files_list, root_build_dir),
      "--global-objects-file",
      rebase_path(invoker.global_objects_file, root_build_dir),
      "--",
      "Window",
      rebase_path(invoker.global_names_idl_file, root_build_dir),
    ]
  }
}

template("compute_interfaces_info_individual") {
  action(target_name) {
    script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"

    deps = invoker.deps

    inputs = [
      "$bindings_scripts_dir/utilities.py",
      _extended_attributes_file,
      invoker.generated_idl_files,
    ]
    inputs += invoker.idl_files

    outputs = [
      invoker.interfaces_info_file,
      invoker.component_info_file,
    ]

    # Write the file list to a unique temp file to avoid blowing out the
    # command line length limit.
    idl_files_list = "$target_gen_dir/${target_name}_static_idl_files_list.tmp"
    write_file(idl_files_list, rebase_path(invoker.idl_files, root_build_dir))

    dependency_idl_files_paths =
        rebase_path(invoker.dependency_idl_files, root_build_dir)
    dependency_idl_files_list = string_join(" ", dependency_idl_files_paths)
    args = [
      "--cache-directory",
      rebase_path(invoker.cache_directory, root_build_dir),
      "--root-directory",
      rebase_path("//", root_build_dir),
      "--idl-files-list",
      rebase_path(idl_files_list, root_build_dir),
      "--interfaces-info-file",
      rebase_path(invoker.interfaces_info_file, root_build_dir),
      "--component-info-file",
      rebase_path(invoker.component_info_file, root_build_dir),
      "--extended-attributes",
      rebase_path(_extended_attributes_file, root_build_dir),
      "--dependency-idl-files",
      dependency_idl_files_list,
      "--",

      # Generated files must be passed at command line
      rebase_path(invoker.generated_idl_files, root_build_dir),
    ]
  }
}

template("generate_interfaces_info_overall") {
  action(target_name) {
    script = "$bindings_scripts_dir/compute_interfaces_info_overall.py"

    deps = invoker.deps

    inputs = [ invoker.individual_interfaces_file ]

    outputs = [ invoker.combined_interfaces_file ]

    args = [
      "--",
      rebase_path(invoker.individual_interfaces_file, root_build_dir),
      rebase_path(invoker.combined_interfaces_file, root_build_dir),
    ]
  }
}

template("cache_lex_tables") {
  action(target_name) {
    script = "$bindings_scripts_dir/blink_idl_parser.py"

    inputs = idl_lexer_parser_files
    outputs = [
      "${invoker.output_dir}/lextab.py",
      "${invoker.output_dir}/parsetab.pickle",
    ]

    args = [ rebase_path(invoker.output_dir, root_build_dir) ]
  }
}

template("cache_templates") {
  action(target_name) {
    script = "//cobalt/bindings/code_generator_cobalt.py"

    inputs = [
      "//cobalt/bindings/path_generator.py",
      "//third_party/jinja2/__init__.py",
      "//third_party/markupsafe/__init__.py",  # jinja2 dep
    ]

    # Cobalt's Jinja templates.
    inputs += engine_template_files

    # Templates that are shared by the code generation for multiple engines.
    inputs += [
      "//cobalt/bindings/templates/dictionary.h.template",
      "//cobalt/bindings/templates/interface-base.cc.template",
      "//cobalt/bindings/templates/interface-base.h.template",
      "//cobalt/bindings/templates/callback-interface-base.cc.template",
      "//cobalt/bindings/templates/callback-interface-base.h.template",
    ]

    # The filenames are hashes of the template file path.
    outputs = [
      "${invoker.output_dir}/__jinja2_0458bc0cdbf0dcc5ede1938c55c599dc57dcae71.cache",
      "${invoker.output_dir}/__jinja2_303dad9caff7b8c046562177d5460bb9f7b159df.cache",
      "${invoker.output_dir}/__jinja2_4038c00836c6764d385cf4c46462430f9aaf17be.cache",
      "${invoker.output_dir}/__jinja2_435670c71610a56f1cef61f2d38133c78acac78f.cache",
      "${invoker.output_dir}/__jinja2_4a2a64213caba2133a0b71aada741965e14fc1bb.cache",
      "${invoker.output_dir}/__jinja2_4c7f97150281049711d4ce10a328cc061253b390.cache",
      "${invoker.output_dir}/__jinja2_5d45ad6b9cacef6d9d179dc9099ec37cf6ee1724.cache",
      "${invoker.output_dir}/__jinja2_65e7aef6627bae7400833440f6e4ae091c710908.cache",
      "${invoker.output_dir}/__jinja2_74db451681d577fcb9c39eae42a296cbbcf752c7.cache",
      "${invoker.output_dir}/__jinja2_8e238dc5f6ff498c4406817387ddb7ece64b45bd.cache",
      "${invoker.output_dir}/__jinja2_b0197cf1f0bbd6fc7944725aec13712883090f68.cache",
      "${invoker.output_dir}/__jinja2_d049954a9d5a3dc383d37b7673da54b661ec34b0.cache",
      "${invoker.output_dir}/__jinja2_d09b22d687fad0727f239c3feb23cadd73ac6bc0.cache",
      "${invoker.output_dir}/__jinja2_df2da080300d5d4b19c5c7b8b87f6a5521d00c89.cache",
    ]

    args = [
      rebase_path("${invoker.output_dir}", root_build_dir),
      rebase_path("$engine_templates_dir", root_build_dir),
      rebase_path("${invoker.output_dir}/cached_jinja_templates.stamp",
                  root_build_dir),
    ]
  }
}
