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

import("//mojo/public/mojo_application.gni")

group("dart") {
  deps = [
    ":dart_content_handler",
  ]
}

action("generate_snapshot_bin") {
  deps = [
    "//dart/runtime/bin:gen_snapshot($host_toolchain)",
    "//mojo/public/interfaces/application",
  ]
  inputs = [
    "snapshot.dart",
    "//dart/runtime/tools/create_snapshot_bin.py",
    "//mojo/dart/embedder/builtin.dart",
    "//mojo/public/dart/application.dart",
    "//mojo/public/dart/bindings.dart",
    "//mojo/public/dart/core.dart",
    "//mojo/public/dart/src/application.dart",
    "//mojo/public/dart/src/application_connection.dart",
    "//mojo/public/dart/src/buffer.dart",
    "//mojo/public/dart/src/codec.dart",
    "//mojo/public/dart/src/data_pipe.dart",
    "//mojo/public/dart/src/drain_data.dart",
    "//mojo/public/dart/src/event_stream.dart",
    "//mojo/public/dart/src/handle.dart",
    "//mojo/public/dart/src/handle_watcher.dart",
    "//mojo/public/dart/src/message.dart",
    "//mojo/public/dart/src/message_pipe.dart",
    "//mojo/public/dart/src/proxy.dart",
    "//mojo/public/dart/src/struct.dart",
    "//mojo/public/dart/src/stub.dart",
    "//mojo/public/dart/src/timer_queue.dart",
    "//mojo/public/dart/src/types.dart",
  ]
  output = "$target_gen_dir/snapshot_gen.bin"
  outputs = [
    output,
  ]

  gen_snapshot_dir =
      get_label_info("//dart/runtime/bin:gen_snapshot($host_toolchain)",
                     "root_out_dir")
  script = "//dart/runtime/tools/create_snapshot_bin.py"
  application_path = rebase_path("//mojo/public/dart/application.dart")
  builtin_path = rebase_path("//mojo/dart/embedder/builtin.dart")
  bindings_path = rebase_path("//mojo/public/dart/bindings.dart")
  core_path = rebase_path("//mojo/public/dart/core.dart")
  args = [
    "--executable",
    rebase_path("$gen_snapshot_dir/gen_snapshot"),
    "--package_root",
    rebase_path("$root_gen_dir"),
    "--script",
    rebase_path("snapshot.dart"),
    "--output_bin",
    rebase_path(output, root_build_dir),
    "--target_os",
    os,
    "--url_mapping=mojo:application,$application_path",
    "--url_mapping=mojo:bindings,$bindings_path",
    "--url_mapping=mojo:builtin,$builtin_path",
    "--url_mapping=mojo:core,$core_path",
  ]
}

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/snapshot_gen.bin",
  ]
  output = "$target_gen_dir/snapshot.cc"
  outputs = [
    output,
  ]

  script = "//dart/runtime/tools/create_snapshot_file.py"
  args = [
    "--input_bin",
    rebase_path("$target_gen_dir/snapshot_gen.bin"),
    "--input_cc",
    rebase_path("//mojo/dart/embedder/snapshot.cc.tmpl"),
    "--output",
    rebase_path(output),
  ]
}

source_set("dart_controller") {
  sources = [
    "$target_gen_dir/snapshot.cc",
  ]

  deps = [
    ":generate_snapshot_file",
    "//mojo/dart/embedder:dart_controller_no_snapshot",
  ]
}

mojo_native_application("dart_content_handler") {
  sources = [
    "content_handler_main.cc",
    "dart_app.cc",
    "dart_app.h",
  ]

  deps = [
    ":dart_controller",
    "//base",
    "//base:i18n",
    "//crypto",
    "//dart/runtime:libdart",
    "//mojo/application",
    "//mojo/application:application",
    "//mojo/application:content_handler",
    "//mojo/dart/embedder:dart_controller_no_snapshot",
    "//mojo/common",
    "//mojo/environment:chromium",
    "//mojo/icu",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/utility",
    "//mojo/public/interfaces/application",
    "//mojo/services/content_handler/public/interfaces",
    "//mojo/services/network/public/interfaces",
    "//third_party/zlib:zip",
    "//url:url",
  ]
}
