# 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 = "//starboard/build/run_bash.py"
    py_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,
      py_script,
    ]
    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 = [
      "python2",
      rebase_path(py_script, root_build_dir),
      "--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 = "//starboard/build/run_bash.py"
    py_script = engine_conversion_header_generator_script

    deps = invoker.deps

    public_deps = engine_dependencies

    inputs = [
      py_script,
      _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 = [
      "python2",
      rebase_path(py_script, root_build_dir),
      "--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 = "//starboard/build/run_bash.py"
    py_script = "$bindings_scripts_dir/compute_global_objects.py"

    inputs = [
      py_script,
      "$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 = [
      "python2",
      rebase_path(py_script, root_build_dir),
      "--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 = "//starboard/build/run_bash.py"
    py_script = "$bindings_scripts_dir/generate_global_constructors.py"

    deps = invoker.deps

    inputs = [
      py_script,
      "$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 = [
      "python2",
      rebase_path(py_script, root_build_dir),
      "--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 = "//starboard/build/run_bash.py"
    py_script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"

    deps = invoker.deps

    inputs = [
      py_script,
      "$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 = [
      "python2",
      rebase_path(py_script, root_build_dir),
      "--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 = "//starboard/build/run_bash.py"
    py_script = "$bindings_scripts_dir/compute_interfaces_info_overall.py"

    deps = invoker.deps

    inputs = [
      py_script,
      invoker.individual_interfaces_file,
    ]

    outputs = [ invoker.combined_interfaces_file ]

    args = [
      "python2",
      rebase_path(py_script, root_build_dir),
      "--",
      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 = "//starboard/build/run_bash.py"
    py_script = "$bindings_scripts_dir/blink_idl_parser.py"

    inputs = [ py_script ]
    inputs += idl_lexer_parser_files

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

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

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

    inputs = [
      py_script,
      "//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 = [
      "python2",
      rebase_path(py_script, root_build_dir),
      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),
    ]
  }
}
