# 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")

  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",
    ]
  }

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

    jni_package = "mojo"
  }
} else {
  mojo_native_application("native_viewport") {
    output_name = "native_viewport_service"
    sources = [
      "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/gl",
    ]
  }
}

source_set("lib") {
  sources = [
    "native_viewport_impl.cc",
    "native_viewport_impl.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_win.cc",
    "platform_viewport_x11.cc",
    "viewport_surface.cc",
    "viewport_surface.h",
  ]

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

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

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

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

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