# Copyright 2014 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.

# embedder specific template rules.
import("embedder.gni")

source_set("dart_controller_no_snapshot") {
  sources = [
    "$target_gen_dir/dart_embedder_patch_resources.cc",
    "$target_gen_dir/dart_embedder_service_isolate_resources.cc",
    "builtin.cc",
    "builtin.h",
    "builtin_natives.cc",
    "common.cc",
    "common.h",
    "dart_controller.cc",
    "dart_controller.h",
    "io/internet_address.h",
    "io/internet_address_posix.cc",
    "mojo_dart_state.h",
    "mojo_io_natives.cc",
    "mojo_io_natives.h",
    "mojo_natives.cc",
    "mojo_natives.h",
    "vmservice.cc",
    "vmservice.h",
  ]

  deps = [
    ":dart_embedder_packages",
    ":generate_dart_embedder_patch_resources_cc",
    ":generate_dart_embedder_service_isolate_resources_cc",
    "//base",
    "//base:i18n",
    "//dart/runtime:libdart",
    "//dart/runtime/bin:libdart_embedder_noio",
    "//mojo/message_pump",
    "//mojo/public/c/system",
    "//mojo/public/cpp/system",
    "//mojo/services/network/public/interfaces",
    "//tonic",
  ]

  defines = []
  if (is_debug) {
    defines += [ "DEBUG" ]
  } else {
    defines += [ "NDEBUG" ]
  }
}

dart_embedder_resources("generate_dart_embedder_patch_resources_cc") {
  inputs = [
    "//mojo/dart/embedder/core/natives_patch.dart",
    "//mojo/dart/embedder/io/internet_address_patch.dart",
    "//mojo/dart/embedder/io/mojo_patch.dart",
    "//mojo/dart/embedder/io/platform_patch.dart",
    "//mojo/dart/embedder/io/process_patch.dart",
    "//mojo/dart/embedder/io/socket_patch.dart",
    "//mojo/dart/embedder/io/server_socket_patch.dart",
  ]
  root_prefix = "//mojo/dart/embedder/"
  output = "$target_gen_dir/dart_embedder_patch_resources.cc"
  table_name = "dart_embedder_patch"
}

group("dart_embedder_packages") {
  deps = [
    ":dart_embedder_package_sdk",
    ":dart_embedder_package_application",
    ":dart_embedder_package_bindings",
    ":dart_embedder_package_network",
    ":dart_embedder_package_network_service",
  ]
}

dart_embedder_package("dart_embedder_package_application") {
  package = "mojo/public/interfaces/application"
  destination = "mojo/mojo"
}

dart_embedder_package("dart_embedder_package_bindings") {
  package = "mojo/public/interfaces/bindings"
  destination = "mojo/mojo"
}

dart_embedder_package("dart_embedder_package_network") {
  package = "mojo/public/interfaces/network"
  destination = "mojo/mojo"
}

dart_embedder_package("dart_embedder_package_network_service") {
  package = "mojo/services/network/public/interfaces"
  destination = "mojo_services/mojo"
}

action_foreach("dart_embedder_package_sdk") {
  sources = [
    "//mojo/public/dart/mojo/lib/application.dart",
    "//mojo/public/dart/mojo/lib/bindings.dart",
    "//mojo/public/dart/mojo/lib/core.dart",
    "//mojo/public/dart/mojo/lib/src/application.dart",
    "//mojo/public/dart/mojo/lib/src/application_connection.dart",
    "//mojo/public/dart/mojo/lib/src/buffer.dart",
    "//mojo/public/dart/mojo/lib/src/codec.dart",
    "//mojo/public/dart/mojo/lib/src/control_message.dart",
    "//mojo/public/dart/mojo/lib/src/data_pipe.dart",
    "//mojo/public/dart/mojo/lib/src/drain_data.dart",
    "//mojo/public/dart/mojo/lib/src/enum.dart",
    "//mojo/public/dart/mojo/lib/src/event_stream.dart",
    "//mojo/public/dart/mojo/lib/src/handle.dart",
    "//mojo/public/dart/mojo/lib/src/message.dart",
    "//mojo/public/dart/mojo/lib/src/message_pipe.dart",
    "//mojo/public/dart/mojo/lib/src/proxy.dart",
    "//mojo/public/dart/mojo/lib/src/struct.dart",
    "//mojo/public/dart/mojo/lib/src/stub.dart",
    "//mojo/public/dart/mojo/lib/src/types.dart",
    "//mojo/public/dart/mojo/lib/src/union.dart",
    "//mojo/public/dart/mojo/lib/src/utils.dart",
    "//mojo/public/dart/mojo/sdk_ext/internal.dart",
    "//mojo/public/dart/mojo/sdk_ext/src/handle_watcher.dart",
    "//mojo/public/dart/mojo/sdk_ext/src/natives.dart",
    "//mojo/public/dart/mojo/sdk_ext/src/timer_queue.dart",
  ]
  outputs = [
    "$root_gen_dir/dart_embedder_packages/{{source_root_relative_dir}}/{{source_file_part}}",
  ]
  script = rebase_path(
          "//mojo/dart/embedder/tools/dart_rewrite_embedder_package_imports.py")
  args = [
    rebase_path("{{source}}", "", root_build_dir),
    rebase_path(
        "$root_gen_dir/dart_embedder_packages/{{source_root_relative_dir}}/{{source_file_part}}"),
  ]
}

dart_embedder_resources("generate_dart_embedder_service_isolate_resources_cc") {
  deps = [
    ":deploy_observatory",
  ]
  inputs = [
    "//mojo/dart/embedder/vmservice/loader.dart",
    "//mojo/dart/embedder/vmservice/main.dart",
    "//mojo/dart/embedder/vmservice/resources.dart",
    "//mojo/dart/embedder/vmservice/server.dart",
  ]
  root_prefix = "//mojo/dart/embedder/"
  input_directory = "$root_out_dir/observatory/deployed/web/"
  output = "$target_gen_dir/dart_embedder_service_isolate_resources.cc"
  table_name = "dart_embedder_service_isolate"
}

observatory_sources_gypi =
    exec_script("../../../dart/tools/gypi_to_gn.py",
                [ rebase_path(
                    "//dart/runtime/observatory/observatory_sources.gypi") ],
                "scope",
                [ "//dart/runtime/observatory/observatory_sources.gypi" ])

copy("copy_observatory") {
  sources = rebase_path(observatory_sources_gypi.sources,
                        "",
                        "../../../dart/runtime/observatory")
  outputs = [
    "$root_gen_dir/observatory_copy/{{source_root_relative_dir}}/{{source_file_part}}",
  ]
}

action("write_observatory_pubspec_yaml") {
  deps = [
    ":copy_observatory",
  ]

  script = "//dart/tools/observatory_tool.py"

  inputs = [
    rebase_path("//dart/runtime/observatory/pubspec.yaml"),
  ]

  args = [
    "--silent=True",
    "--pub-executable",
    rebase_path("//third_party/dart-sdk/dart-sdk/bin/pub"),
    "--directory",
    rebase_path("$root_gen_dir/observatory_copy/dart/runtime/observatory/"),
    "--command",
    "rewrite",
    rebase_path("//dart/runtime/observatory/pubspec.yaml"),
    rebase_path(
        "$root_gen_dir/observatory_copy/dart/runtime/observatory/pubspec.yaml"),
    "../../third_party/",
    rebase_path("../../../dart/third_party/"),
  ]

  outputs = [
    "$root_gen_dir/observatory_copy/dart/runtime/observatory/pubspec.yaml",
  ]
}

action("copy_observatory_deps") {
  deps = [
    ":write_observatory_pubspec_yaml",
  ]

  script = "//dart/tools/observatory_tool.py"

  inputs = [
    script,
    "$root_gen_dir/observatory_copy/dart/runtime/observatory/pubspec.yaml",
  ]

  args = [
    "--silent=True",
    "--pub-executable",
    rebase_path("//third_party/dart-sdk/dart-sdk/bin/pub"),
    "--directory",
    rebase_path("$root_gen_dir/observatory_copy/dart/runtime/observatory/"),
    "--command",
    "get",
  ]

  outputs = [
    "$root_gen_dir/observatory_copy/dart/runtime/observatory/pubspec.lock",
  ]
}

action("pub_build_observatory") {
  sources =
      rebase_path(observatory_sources_gypi.sources,
                  "",
                  "$root_gen_dir/observatory_copy/dart/runtime/observatory")

  deps = [
    ":copy_observatory",
    ":copy_observatory_deps",
  ]

  script = "//dart/tools/observatory_tool.py"

  inputs = [
    script,
  ]
  inputs += sources

  args = [
    "--silent=True",
    "--pub-executable",
    rebase_path("//third_party/dart-sdk/dart-sdk/bin/pub"),
    "--directory",
    rebase_path("$root_gen_dir/observatory_copy/dart/runtime/observatory/"),
    "--command",
    "build",
    rebase_path("$root_out_dir/observatory/build"),
  ]

  outputs = [
    "$root_out_dir/observatory/build/web/index.html",
    "$root_out_dir/observatory/build/web/index.html.polymer.bootstrap.dart.js",
  ]
}

action("deploy_observatory") {
  deps = [
    ":pub_build_observatory",
  ]

  script = "//dart/tools/observatory_tool.py"

  inputs = [
    script,
    "$root_out_dir/observatory/build/web/index.html",
    "$root_out_dir/observatory/build/web/index.html.polymer.bootstrap.dart.js",
  ]

  args = [
    "--silent=True",
    "--pub-executable",
    rebase_path("//third_party/dart-sdk/dart-sdk/bin/pub"),
    "--directory",
    rebase_path("$root_out_dir/observatory"),
    "--command",
    "deploy",
  ]

  outputs = [
    "$root_out_dir/observatory/deployed/web/index.html",
    "$root_out_dir/observatory/deployed/web/index.html.polymer.bootstrap.dart.js",
  ]
}

action("generate_snapshot_bin") {
  deps = [
    "//dart/runtime/bin:gen_snapshot($host_toolchain)",
    ":dart_embedder_packages",
  ]
  inputs = [
    "snapshot.dart",
    "//dart/runtime/tools/create_snapshot_bin.py",
    "//mojo/dart/embedder/builtin.dart",
    "//mojo/dart/embedder/packages.dart",
    "//mojo/public/dart/mojo/sdk_ext/internal.dart",
    "//mojo/public/dart/mojo/sdk_ext/src/handle_watcher.dart",
    "//mojo/public/dart/mojo/sdk_ext/src/natives.dart",
    "//mojo/public/dart/mojo/sdk_ext/src/timer_queue.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,
  ]

  gen_snapshot_dir =
      get_label_info("//dart/runtime/bin:gen_snapshot($host_toolchain)",
                     "root_out_dir")
  script = "//dart/runtime/tools/create_snapshot_bin.py"
  builtin_path = rebase_path("//mojo/dart/embedder/builtin.dart")
  internal_path = rebase_path("//mojo/public/dart/mojo/sdk_ext/internal.dart")
  io_path = rebase_path("//dart/sdk/lib/io/io.dart")

  embedder_packages_path = rebase_path("//mojo/dart/embedder/packages.dart")
  embedder_package_application_path = rebase_path(
          "$root_gen_dir/dart_embedder_packages/mojo/public/dart/mojo/lib/application.dart")
  embedder_package_bindings_path = rebase_path(
          "$root_gen_dir/dart_embedder_packages/mojo/public/dart/mojo/lib/bindings.dart")
  embedder_package_core_path = rebase_path(
          "$root_gen_dir/dart_embedder_packages/mojo/public/dart/mojo/lib/core.dart")
  url_mappings_script =
      rebase_path("//mojo/dart/embedder/tools/dart_embedder_url_mappings.py")

  application_mojoms = rebase_path("//mojo/public/interfaces/application")
  bindings_mojoms = rebase_path("//mojo/public/interfaces/bindings")
  network_mojoms = rebase_path("//mojo/public/interfaces/network")
  network_service_mojoms =
      rebase_path("//mojo/services/network/public/interfaces")

  # This script generates --url_mapping command line arguments for all
  # generated mojom.dart bindings files. See HACKING.md for more information.
  embedder_mojom_url_mappings =
      exec_script(url_mappings_script,
                  [
                    # File system path containing target imports.
                    rebase_path("$root_gen_dir/dart_embedder_packages"),

                    # Embedder package directories.
                    "$application_mojoms,mojo/mojo",
                    "$bindings_mojoms,mojo/mojo",
                    "$network_mojoms,mojo/mojo",
                    "$network_service_mojoms,mojo_services/mojo",
                  ],
                  "list lines")

  args = [
           "--executable",
           rebase_path("$gen_snapshot_dir/gen_snapshot"),
           "--package_root",
           rebase_path("$root_gen_dir/dart-gen"),
           "--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",
           current_os,
           "--url_mapping=dart:mojo.builtin,$builtin_path",
           "--url_mapping=dart:mojo.internal,$internal_path",
           "--url_mapping=dart:io,$io_path",

           # Embedder packages
           "--url_mapping=dart:embedder_private_packages,$embedder_packages_path",
           "--url_mapping=dart:_mojo/application.dart,$embedder_package_application_path",
           "--url_mapping=dart:_mojo/bindings.dart,$embedder_package_bindings_path",
           "--url_mapping=dart:_mojo/core.dart,$embedder_package_core_path",
         ] + embedder_mojom_url_mappings
}

action("generate_snapshot_file") {
  deps = [
    ":generate_snapshot_bin",
  ]
  inputs = [
    "//dart/runtime/tools/create_snapshot_file.py",
    "//mojo/dart/embedder/snapshot.cc.tmpl",
    "$target_gen_dir/vm_isolate_snapshot.bin",
    "$target_gen_dir/isolate_snapshot.bin",
  ]
  output = "$root_gen_dir/dart_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("//mojo/dart/embedder/snapshot.cc.tmpl"),
    "--output",
    rebase_path(output),
  ]
}

source_set("dart_snapshot_cc") {
  sources = [
    "$root_gen_dir/dart_snapshot.cc",
  ]

  deps = [
    ":generate_snapshot_file",
  ]
}
