# 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")
import("//mojo/dart/packages/mojo/sources.gni")
import("//mojo/dart/packages/mojo/sdk_ext_sources.gni")

group("embedder") {
  deps = [
    ":dart_controller_no_snapshot",
    ":generate_snapshot_file",
    "//mojo/dart/embedder/snapshotter",
  ]
}

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/filter.cc",
    "io/filter.h",
    "io/internet_address.h",
    "io/internet_address_posix.cc",
    "mojo_dart_state.h",
    "mojo_io_natives.cc",
    "mojo_io_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",
    "//dart/runtime/observatory:embedded_observatory_archive",
    "//mojo/message_pump",
    "//mojo/public/c/system",
    "//mojo/public/cpp/environment",
    "//mojo/public/cpp/system",
    "//mojo/public/platform/dart:mojo_internal_impl",
    "//mojo/services/files/interfaces",
    "//mojo/services/network/interfaces",
    "//third_party/zlib",
    "//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/file_patch.dart",
    "//mojo/dart/embedder/io/filter_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_application",
    ":dart_embedder_package_bindings",
    ":dart_embedder_package_bindings_types",
    ":dart_embedder_package_files_service",
    ":dart_embedder_package_network",
    ":dart_embedder_package_network_service",
    ":dart_embedder_package_sdk",
  ]
}

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_bindings_types") {
  package = "mojo/public/interfaces/bindings"
  destination = "mojo/mojo/bindings/types"
  is_bindings_types = true
}

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/interfaces"
  destination = "mojo_services/mojo"
}

dart_embedder_package("dart_embedder_package_files_service") {
  package = "mojo/services/files/interfaces"
  destination = "mojo_services/mojo/files"
}

action_foreach("dart_embedder_package_sdk") {
  sources = rebase_path(package_mojo_sources + dart_mojo_internal_sdk_sources,
                        "",
                        "//mojo/dart/packages/mojo")
  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}}"),
  ]
}

vmservice_sources_gypi =
    exec_script(
        "//build/gypi_to_gn.py",
        [ rebase_path("//dart/runtime/bin/vmservice/vmservice_sources.gypi") ],
        "scope",
        [ rebase_path("//dart/runtime/bin/vmservice/vmservice_sources.gypi") ])

dart_embedder_resources("generate_dart_embedder_service_isolate_resources_cc") {
  inputs = rebase_path(vmservice_sources_gypi.sources,
                       "",
                       "//dart/runtime/bin/vmservice/")
  root_prefix = "//dart/runtime/bin/"
  output = "$target_gen_dir/dart_embedder_service_isolate_resources.cc"
  table_name = "dart_embedder_service_isolate"
}

action("generate_snapshot_bin") {
  deps = [
    ":dart_embedder_packages",
    "//dart/runtime/bin:gen_snapshot($host_toolchain)",
  ]
  inputs = [
    "snapshot.dart",
    "//dart/runtime/tools/create_snapshot_bin.py",
    "//mojo/dart/embedder/builtin.dart",
    "//mojo/dart/embedder/packages.dart",
  ]

  inputs += rebase_path(dart_mojo_internal_sdk_sources, "", "../packages/mojo")

  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/dart/packages/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/dart/packages/mojo/lib/application.dart")
  embedder_package_bindings_path = rebase_path(
          "$root_gen_dir/dart_embedder_packages/mojo/dart/packages/mojo/lib/bindings.dart")
  embedder_package_core_path = rebase_path(
          "$root_gen_dir/dart_embedder_packages/mojo/dart/packages/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/interfaces")
  files_mojoms = rebase_path("//mojo/services/files/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",
                    "$files_mojoms,mojo_services/mojo/files",
                  ],
                  "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",
  ]
}
