# 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",
    "mojo_dart_state.h",
    "mojo_io_natives.cc",
    "mojo_io_natives.h",
    "mojo_natives.cc",
    "mojo_natives.h",
    "vmservice.cc",
    "vmservice.h",
  ]

  if (is_linux) {
    sources += [ "io/internet_address_linux.cc" ]
  }

  if (is_android) {
    sources += [ "io/internet_address_android.cc" ]
  }

  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",
    "//third_party/dart-pkg",
    "//mojo/message_pump",
    "//mojo/public/c/system",
    "//mojo/public/cpp/system",
    "//mojo/services/network/public/interfaces",
  ]

  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/lib/application.dart",
    "//mojo/public/dart/lib/bindings.dart",
    "//mojo/public/dart/lib/core.dart",
    "//mojo/public/dart/lib/src/application.dart",
    "//mojo/public/dart/lib/src/application_connection.dart",
    "//mojo/public/dart/lib/src/buffer.dart",
    "//mojo/public/dart/lib/src/codec.dart",
    "//mojo/public/dart/lib/src/control_message.dart",
    "//mojo/public/dart/lib/src/data_pipe.dart",
    "//mojo/public/dart/lib/src/drain_data.dart",
    "//mojo/public/dart/lib/src/event_stream.dart",
    "//mojo/public/dart/lib/src/handle.dart",
    "//mojo/public/dart/lib/src/message.dart",
    "//mojo/public/dart/lib/src/message_pipe.dart",
    "//mojo/public/dart/lib/src/proxy.dart",
    "//mojo/public/dart/lib/src/struct.dart",
    "//mojo/public/dart/lib/src/stub.dart",
    "//mojo/public/dart/lib/src/types.dart",
    "//mojo/public/dart/lib/src/union.dart",
    "//mojo/public/dart/lib/src/utils.dart",
    "//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",
  ]
  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/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",
  ]
  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/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/lib/application.dart")
  embedder_package_bindings_path = rebase_path(
          "$root_gen_dir/dart_embedder_packages/mojo/public/dart/lib/bindings.dart")
  embedder_package_core_path =
      rebase_path(
          "$root_gen_dir/dart_embedder_packages/mojo/public/dart/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",
  ]
}
