# 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=dart:mojo_application,$application_path",
    "--url_mapping=dart:mojo_bindings,$bindings_path",
    "--url_mapping=dart:mojo_builtin,$builtin_path",
    "--url_mapping=dart: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",
  ]
}

mojo_native_application("dart_apptests") {
  testonly = true

  sources = [
    "echo_apptest.cc",
    "pingpong_apptest.cc",
  ]

  deps = [
    "//base",
    "//mojo/application",
    "//mojo/application:test_support",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//services/dart/test:echo_service_interface",
    "//services/dart/test:pingpong_service_interface",
  ]
  data_deps = [
    "//services/dart/test/echo",
    "//services/dart/test/pingpong",
    "//services/dart/test/pingpong_target",
  ]
}
