# 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",
    "dart_callback.cc",
    "dart_callback.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",
  ]

  defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ]

  deps = [
    "//base",
    "//dart/runtime/bin:embedded_dart_io",
    "//dart/runtime:libdart",
    "//mojo/public/c/system",
    "//mojo/public/cpp/system",
    "//sky/engine/core:prerequisites",
    "//sky/engine/platform:platform",
    "//sky/engine/tonic",
    "//sky/engine/wtf",
    ":generated_bindings",
    ":snapshot_cc",
  ]
  include_dirs = [
    "..",
    "$root_build_dir",
    rebase_path("//dart/runtime"),
  ]
}

action("generate_snapshot_bin") {
  deps = [
    "//dart/runtime/bin:gen_snapshot($host_toolchain)",
    ":generate_dart_sky",
  ]
  inputs = [
    "//dart/runtime/tools/create_snapshot_bin.py",
    "//mojo/public/dart/sdk_ext/internal.dart",
    "//mojo/public/dart/sdk_ext/src/handle_watcher.dart",
    "//mojo/public/dart/sdk_ext/src/natives.dart",
    "//mojo/public/dart/sdk_ext/src/timer_queue.dart",
    "//sky/engine/bindings/builtin_natives.dart",
    "//sky/engine/bindings/sky_internals.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,
  ]

  dart_mojo_internal_path =
      rebase_path("//mojo/public/dart/sdk_ext/internal.dart")
  dart_sky_builtin_natives_path =
      rebase_path("//sky/engine/bindings/builtin_natives.dart")
  dart_sky_internals_path =
      rebase_path("//sky/engine/bindings/sky_internals.dart")
  dart_sky_path = rebase_path("$bindings_output_dir/dart_sky.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:mojo.internal,$dart_mojo_internal_path",
    "--url_mapping=dart:sky,$dart_sky_path",
    "--url_mapping=dart:sky.internals,$dart_sky_internals_path",
    "--url_mapping=dart:sky_builtin_natives,$dart_sky_builtin_natives_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",
  ]
}

copy("copy_core_dart_files") {
  sources = core_dart_files
  outputs = [
    "$bindings_output_dir/Custom{{source_file_part}}",
  ]
}

action("generate_dart_sky") {
  sources = core_idl_files + core_dart_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 = [
    ":copy_core_dart_files",
    ":compile_idls",
  ]
}

source_set("generated_bindings") {
  deps = [
    "//base",
    "//dart/runtime:libdart",
    "//dart/runtime/vm:libdart_platform",
    "//mojo/application",
    "//mojo/public/c/system",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/public/interfaces/application",
    "//skia",
    "//sky/engine/core:core_names",
    "//sky/engine/wtf",
    "//third_party/iccjpeg",
    "//third_party/libpng",
    "//third_party/ots",
    "//third_party/qcms",
    "//third_party/zlib",
    "//url",
    ":compile_idls",
    ":generate_dart_globals",
  ]

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

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