# 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/mojo_application.gni")

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
  import("//mojo/public/tools/bindings/mojom.gni")

  group("native_viewport") {
    deps = [
      ":lib",
      ":native_viewport_java",
      ":jni_headers",
    ]
  }

  android_library("native_viewport_java") {
    java_files =
        [ "android/src/org/chromium/mojo/PlatformViewportAndroid.java" ]

    deps = [
      "//base:base_java",
      "//services/keyboard",
      "//mojo/services/keyboard/public/interfaces:interfaces_java",
      "//mojo/public/java:bindings",
      "//mojo/public/java:system",
    ]
  }

  generate_jni("jni_headers") {
    sources = [
      "android/src/org/chromium/mojo/PlatformViewportAndroid.java",
    ]

    jni_package = "mojo"
  }

  mojom("interfaces") {
    sources = [
      "native_viewport_support.mojom",
    ]
  }
} else {
  mojo_native_application("native_viewport") {
    output_name = "native_viewport_service"
    sources = [
      "app_delegate.cc",
      "main.cc",
    ]
    deps = [
      ":lib",
      "//base",
      "//mojo/application",
      "//mojo/common:tracing_impl",
      "//mojo/public/cpp/bindings:bindings",
      "//mojo/services/native_viewport/public/interfaces",
      "//mojo/services/native_viewport/public/cpp:args",
      "//services/gles2",
      "//ui/events",
      "//ui/events/platform",
      "//ui/gl",
    ]

    if (use_ozone) {
      sources += [ "ozone/app_delegate_ozone.cc" ]
      deps += [
        "//mojo/services/ozone_drm_gpu/public/interfaces",
        "//mojo/services/ozone_drm_host/public/interfaces",
        "//ui/events/ozone:events_ozone_evdev",
        "//ui/ozone",
      ]
    }
  }
}

source_set("lib") {
  sources = [
    "native_viewport_impl.cc",
    "native_viewport_impl.h",
    "onscreen_context_provider.cc",
    "onscreen_context_provider.h",
    "platform_viewport.h",
    "platform_viewport_android.cc",
    "platform_viewport_android.h",
    "platform_viewport_headless.cc",
    "platform_viewport_headless.h",
    "platform_viewport_stub.cc",
    "platform_viewport_x11.cc",
  ]

  if (!is_ios) {
    sources -= [ "platform_viewport_stub.cc" ]
  }

  deps = [
    "//base",
    "//gpu/command_buffer/service",
    "//mojo/application",
    "//mojo/common",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/converters/native_viewport",
    "//mojo/environment:chromium",
    "//services/gles2",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/native_viewport/public/interfaces",
    "//ui/events",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/platform_window",
    "//ui/display/types",
  ]

  if (is_android) {
    deps += [
      ":interfaces",
      ":jni_headers",
    ]
  }

  if (use_x11) {
    deps += [ "//ui/platform_window/x11" ]
  } else {
    sources -= [ "platform_viewport_x11.cc" ]
  }

  if (use_ozone) {
    sources += [
      "ozone/display_manager.cc",
      "ozone/display_manager.h",
      "ozone/platform_viewport_ozone.cc",
    ]
    deps += [
      "//ui/events/ozone:events_ozone_evdev",
      "//ui/ozone",
      "//ui/ozone:ozone_base",
      "//ui/ozone/platform/drm:drm_common",
    ]
  }

  if (is_win) {
    deps += [ "//ui/platform_window/win" ]
  }
}
