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

assert(use_aura)

group("wm_flow") {
  deps = [
    ":app",
    ":embedded",
    ":wm",
  ]
}

shared_library("wm") {
  output_name = "wm_flow_wm"

  sources = [
    "wm/wm.cc",
    "wm/frame_controller.cc",
    "wm/frame_controller.h",
  ]

  deps = [
    "//base",
    "//skia",
    "//ui/aura",
    "//ui/views",
    "//ui/wm:wm",
    "//mojo/application",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/services/public/cpp/view_manager",
    "//mojo/services/public/interfaces/input_events",
    "//mojo/services/window_manager:lib",
    "//mojo/views:views",
  ]
}

shared_library("app") {
  output_name = "wm_flow_app"

  sources = [
    "app/app.cc",
  ]

  deps = [
    ":embedder_bindings",
    ":embeddee_bindings",
    "//base",
    "//mojo/application",
    "//mojo/examples/bitmap_uploader",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/public/interfaces/application:application",
    "//mojo/services/public/cpp/view_manager",
    "//mojo/services/window_manager:lib",
  ]
}

shared_library("embedded") {
  output_name = "wm_flow_embedded"

  sources = [
    "embedded/embedded.cc",
  ]

  deps = [
    ":embeddee_bindings",
    ":embedder_bindings",
    "//base",
    "//mojo/application",
    "//mojo/examples/bitmap_uploader",
    "//mojo/public/c/system:for_shared_library",
    "//mojo/services/public/cpp/view_manager",
    "//mojo/services/window_manager:lib",
  ]
}

mojom("embedder_bindings") {
  sources = [
    "app/embedder.mojom",
  ]
}

mojom("embeddee_bindings") {
  sources = [
    "embedded/embeddee.mojom",
  ]
}
