# Copyright 2015 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("//sky/engine/bindings/bindings.gni")
import("//sky/engine/core/core.gni")

source_set("bindings") {
  sources = [
    "builtin.cc",
    "builtin.h",
    "builtin_natives.cc",
    "builtin_natives.h",
    "builtin_sky.cc",
    "builtin_sky.h",
    "custom/dart_element_custom.cc",
    "dart_callback.cc",
    "dart_callback.h",
    "dart_event_listener.cc",
    "dart_event_listener.h",
    "exception_messages.cc",
    "exception_messages.h",
    "exception_state.cc",
    "exception_state.h",
    "exception_state_placeholder.cc",
    "exception_state_placeholder.h",
    "mojo_natives.cc",
    "mojo_natives.h",
    "nullable.h",
    "scheduled_action.cc",
    "scheduled_action.h",
  ]
  deps = [
    "//base",
    "//dart/runtime/bin:libdart_withcore",
    "//mojo/public/c/system",
    "//mojo/public/cpp/system",
    "//sky/engine/platform:platform",
    "//sky/engine/tonic",
    "//sky/engine/wtf",
    ":generated_bindings",
    ":snapshot_cc",
  ]
  include_dirs = [
    "..",
    "$root_build_dir",
  ]
}

action("generate_snapshot_bin") {
  deps = [
    "//dart/runtime/bin:gen_snapshot($host_toolchain)",
    ":generate_dart_sky",
  ]
  inputs = [
    "//dart/runtime/tools/create_snapshot_bin.py",
    "//sky/engine/bindings/builtin.dart",
    "//mojo/public/dart/internal.dart",
    "//mojo/public/dart/src/handle_watcher.dart",
    "//mojo/public/dart/src/natives.dart",
    "//mojo/public/dart/src/timer_queue.dart",
    "snapshot.dart",
  ]
  vm_isolate_snapshot = "$target_gen_dir/vm_isolate_snapshot.bin"
  isolate_snapshot = "$target_gen_dir/isolate_snapshot.bin"
  outputs = [
    vm_isolate_snapshot,
    isolate_snapshot,
  ]

  builtin_path = rebase_path("//sky/engine/bindings/builtin.dart")
  dart_sky_path = rebase_path("$bindings_output_dir/dart_sky.dart")
  internal_path = rebase_path("//mojo/public/dart/internal.dart")

  gen_snapshot_dir =
      get_label_info("//dart/runtime/bin:gen_snapshot($host_toolchain)",
                     "root_out_dir")
  script = "//dart/runtime/tools/create_snapshot_bin.py"

  args = [
    "--executable",
    rebase_path("$gen_snapshot_dir/gen_snapshot"),
    "--package_root",
    rebase_path("$root_gen_dir"),
    "--script",
    rebase_path("snapshot.dart"),
    "--vm_output_bin",
    rebase_path(vm_isolate_snapshot, root_build_dir),
    "--output_bin",
    rebase_path(isolate_snapshot, root_build_dir),
    "--target_os",
    os,
    "--url_mapping=dart:sky,$dart_sky_path",
    "--url_mapping=dart:mojo.internal,$internal_path",
    "--url_mapping=dart:sky_builtin,$builtin_path",
  ]
}

action("generate_snapshot_file") {
  deps = [
    ":generate_snapshot_bin",
  ]
  inputs = [
    "//dart/runtime/tools/create_snapshot_file.py",
    "snapshot.cc.tmpl",
    "$target_gen_dir/vm_isolate_snapshot.bin",
    "$target_gen_dir/isolate_snapshot.bin",
  ]
  output = "$target_gen_dir/snapshot.cc"
  outputs = [
    output,
  ]

  script = "//dart/runtime/tools/create_snapshot_file.py"
  args = [
    "--vm_input_bin",
    rebase_path("$target_gen_dir/vm_isolate_snapshot.bin"),
    "--input_bin",
    rebase_path("$target_gen_dir/isolate_snapshot.bin"),
    "--input_cc",
    rebase_path("snapshot.cc.tmpl"),
    "--output",
    rebase_path(output),
  ]
}

source_set("snapshot_cc") {
  sources = [
    "$target_gen_dir/snapshot.cc",
  ]

  deps = [
    ":generate_snapshot_file",
  ]
}

action("compute_interfaces_info_individual") {
  sources = core_idl_files + core_dependency_idl_files
  script = "$bindings_scripts_dir/compute_interfaces_info_individual.py"
  output_file = "$bindings_output_dir/InterfacesInfoIndividual.pickle"

  # TODO(eseidel): This is no longer needed, could pass these as args.
  file_list = "$target_gen_dir/${target_name}_file_list.txt"
  write_file(file_list, rebase_path(sources, root_build_dir))

  # TODO(eseidel): Use depfile instead of this manual list.
  inputs = [ "$bindings_scripts_dir/utilities.py" ] + sources

  outputs = [
    file_list,
    output_file,
  ]

  args = [
    # TODO(eseidel): Remove component-dir, it is meaningless in sky.
    "--component-dir",
    "ignored",
    "--idl-files-list",
    rebase_path(file_list, root_build_dir),
    "--interfaces-info-file",
    rebase_path(output_file, root_build_dir),

    # TODO(eseidel): only-if-changed is always true, remove
    "--write-file-only-if-changed=1",
  ]
}

interfaces_info_individual_path =
    "$bindings_output_dir/InterfacesInfoIndividual.pickle"

interfaces_info_overall_path =
    "$bindings_output_dir/InterfacesInfoOverall.pickle"

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

  inputs = [
    interfaces_info_individual_path,
  ]
  outputs = [
    interfaces_info_overall_path,
  ]

  args = [
    # TODO(eseidel): only-if-changed is always true, remove
    "--write-file-only-if-changed=1",
    "--",
  ]
  args += rebase_path(inputs, root_build_dir)
  args += rebase_path(outputs, root_build_dir)

  deps = [
    ":compute_interfaces_info_individual",
  ]
}

# This separate pre-caching step is required to use lex/parse table
# caching in PLY, since PLY itself does not check if the cache is
# valid, and thus may end up using a stale cache if this step hasn"t
# been run to update it.
#
# This action"s dependencies *is* the cache validation.
#
# GYP version: scripts.gyp:cached_lex_yacc_tables
action("cached_lex_yacc_tables") {
  script = "scripts/blink_idl_parser.py"

  inputs = idl_lexer_parser_files
  outputs = [
    "$bindings_output_dir/lextab.py",
    "$bindings_output_dir/parsetab.pickle",
  ]

  args = [ rebase_path(bindings_output_dir, root_build_dir) ]
}

# Runs the idl_compiler script over a list of sources.
#
# Parameters:
#   sources = list of IDL files to compile
#   output_dir = string containing the directory to put the output files.
template("idl_compiler") {
  output_dir = invoker.output_dir

  action_foreach(target_name) {
    # TODO(brettw) GYP adds a "-S before the script name to skip "import site" to
    # speed up startup. Figure out if we need this and do something similar (not
    # really expressible in GN now).
    script = "$bindings_scripts_dir/compiler.py"

    inputs = idl_lexer_parser_files + idl_compiler_files
    inputs += [
      "scripts/templates/attributes_cpp.template",
      "scripts/templates/callback_interface_cpp.template",
      "scripts/templates/callback_interface_dart.template",
      "scripts/templates/callback_interface_h.template",
      "scripts/templates/interface_base_cpp.template",
      "scripts/templates/interface_cpp.template",
      "scripts/templates/interface_dart.template",
      "scripts/templates/interface_h.template",
      "scripts/templates/methods_cpp.template",
    ]
    inputs += [
      "$bindings_output_dir/lextab.py",
      "$bindings_output_dir/parsetab.pickle",

      # "$bindings_output_dir/cached_jinja_templates.stamp",
      "//sky/engine/bindings/IDLExtendedAttributes.txt",

      # If the dependency structure or public interface info (e.g.,
      # [ImplementedAs]) changes, we rebuild all files, since we"re not
      # computing dependencies file-by-file in the build.
      # This data is generally stable.
      interfaces_info_overall_path,
    ]

    # Further, if any dependency (partial interface or implemented
    # interface) changes, rebuild everything, since every IDL potentially
    # depends on them, because we"re not computing dependencies
    # file-by-file.
    # FIXME: This is too conservative, and causes excess rebuilds:
    # compute this file-by-file.  http://crbug.com/341748
    # This should theoretically just be the IDL files passed in.
    inputs += core_dependency_idl_files

    sources = invoker.sources
    outputs = [
      "$output_dir/Dart{{source_name_part}}.cpp",
      "$output_dir/Dart{{source_name_part}}.h",
      "$output_dir/{{source_name_part}}.dart",
    ]

    args = [
      "--output-dir",
      rebase_path(output_dir, root_build_dir),
      "--interfaces-info",
      rebase_path(interfaces_info_overall_path, root_build_dir),
      "--write-file-only-if-changed=1",  # Always true for Ninja.
      "{{source}}",
    ]

    deps = [
      ":compute_interfaces_info_overall",
      ":cached_lex_yacc_tables",

      # ":cached_jinja_templates",
    ]
  }
}

idl_compiler("compile_idls") {
  sources = core_idl_files
  output_dir = bindings_output_dir
}

action("generate_dart_globals") {
  sources = core_idl_files
  script = "$bindings_scripts_dir/compiler.py"

  file_list = "$target_gen_dir/${target_name}_file_list.txt"
  write_file(file_list, rebase_path(sources, root_build_dir))

  inputs = sources + idl_compiler_files
  inputs += [
    "scripts/templates/global_cpp.template",
    "scripts/templates/global_h.template",
  ]

  outputs = [
    file_list,
    "$bindings_output_dir/DartGlobal.h",
    "$bindings_output_dir/DartGlobal.cpp",
  ]

  args = [
    "--output-directory",
    rebase_path(bindings_output_dir, root_build_dir),
    "--generate-globals",
    rebase_path(bindings_output_dir, root_build_dir),
    rebase_path(file_list, root_build_dir),
  ]

  deps = [
    ":compile_idls",
  ]
}

action("generate_dart_sky") {
  sources = core_idl_files
  script = "$bindings_scripts_dir/compiler.py"

  file_list = "$target_gen_dir/${target_name}_file_list.txt"
  write_file(file_list, rebase_path(sources, root_build_dir))

  inputs =
      sources + idl_compiler_files + [ "scripts/templates/dart_blink.template" ]

  outputs = [
    file_list,
    "$bindings_output_dir/dart_sky.dart",
  ]

  args = [
    "--output-directory",
    rebase_path(bindings_output_dir, root_build_dir),
    "--generate-dart-blink",
    rebase_path(bindings_output_dir, root_build_dir),
    rebase_path(file_list, root_build_dir),
  ]

  deps = [
    ":compile_idls",
  ]
}

source_set("generated_bindings") {
  deps = [
    "//base",
    "//dart/runtime/bin:libdart_withcore",
    "//gpu/command_buffer/client:gles2_c_lib",
    "//mojo/application",
    "//mojo/common",
    "//mojo/public/c/system",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/public/interfaces/application",
    "//mojo/services/keyboard/public/interfaces",
    "//mojo/services/navigation/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//skia",
    "//sky/engine/wtf",
    "//third_party/angle:translator",
    "//third_party/iccjpeg",
    "//third_party/libpng",
    "//third_party/ots",
    "//third_party/qcms",
    "//third_party/zlib",
    "//url",
    ":generate_dart_globals",
  ]

  include_dirs = [
    "..",
    "$root_build_dir",
  ]

  sources = get_target_outputs(":compile_idls")
  sources += get_target_outputs(":generate_dart_globals")
}
