# 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",
    target_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")
}
