# 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/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/service_provider.dart",
    "//mojo/public/dart/src/struct.dart",
    "//mojo/public/dart/src/stub.dart",
    "//mojo/public/dart/src/timer_impl.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",
  ]
}

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",
    "//services/dart/test:pingpong_service",
  ]
}
