# 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")
import("//mojo/public/tools/bindings/mojom.gni")

group("debugger") {
  testonly = true

  deps = [
    "//sky/tools/debugger/prompt",
    ":sky_debugger",
  ]
}

mojo_native_application("sky_debugger") {
  sources = [
    "debugger.cc",
    "debugger.h",
    "main.cc",
    "navigator_host_impl.cc",
    "navigator_host_impl.h",
  ]

  deps = [
    "//base",
    "//mojo/application",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
    "//mojo/services/input_events/public/interfaces",
    "//mojo/services/navigation/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//services/window_manager:lib",
    "//sky/viewer:bindings",
    ":bindings",
  ]
}

mojom("bindings") {
  sources = [
    "debugger.mojom",
  ]
}
