# Copyright 2016 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("//testing/test.gni")
import("//build/config/ui.gni")
import("//gpu/vulkan/features.gni")
if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
}

component("service") {
  output_name = "gpu_ipc_service"
  sources = [
    "command_buffer_stub.cc",
    "command_buffer_stub.h",
    "gles2_command_buffer_stub.cc",
    "gles2_command_buffer_stub.h",
    "gpu_channel.cc",
    "gpu_channel.h",
    "gpu_channel_manager.cc",
    "gpu_channel_manager.h",
    "gpu_channel_manager_delegate.h",
    "gpu_config.h",
    "gpu_init.cc",
    "gpu_init.h",
    "gpu_memory_buffer_factory.cc",
    "gpu_memory_buffer_factory.h",
    "gpu_watchdog_thread.cc",
    "gpu_watchdog_thread.h",
    "image_transport_surface.h",
    "image_transport_surface_delegate.h",
    "pass_through_image_transport_surface.cc",
    "pass_through_image_transport_surface.h",
    "raster_command_buffer_stub.cc",
    "raster_command_buffer_stub.h",
  ]
  defines = [ "GPU_IPC_SERVICE_IMPLEMENTATION" ]
  if (is_chromecast) {
    defines += [ "IS_CHROMECAST" ]
  }
  public_deps = [
    "//base",
    "//components/viz/common",
    "//ipc",
    "//ui/base",
    "//ui/display",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/gl:gl_features",
    "//ui/gl/init",
    "//url",
  ]
  deps = [
    "//base/third_party/dynamic_annotations",

    # crbug.com/799267: crash_key needs to be added explicitly for Windows and
    # Mac even though it's not directly referenced, because it's being
    # implicitly depended upon by gpu/config/gpu_crash_keys.h but deps (even
    # public ones) are not transitive for static libraries.
    "//components/crash/core/common:crash_key",
    "//gpu/command_buffer/common",
    "//gpu/command_buffer/service",
    "//gpu/command_buffer/service:gles2",
    "//gpu/config",
    "//gpu/ipc/common",
    "//gpu/vulkan:buildflags",
  ]
  libs = []
  ldflags = []
  if (is_win) {
    sources += [
      "child_window_win.cc",
      "child_window_win.h",
      "direct_composition_child_surface_win.cc",
      "direct_composition_child_surface_win.h",
      "direct_composition_surface_win.cc",
      "direct_composition_surface_win.h",
      "gpu_memory_buffer_factory_dxgi.cc",
      "gpu_memory_buffer_factory_dxgi.h",
      "image_transport_surface_win.cc",
    ]
    if (use_qt) {
      sources -= [
        "direct_composition_surface_win.cc",
        "direct_composition_surface_win.h",
      ]
    }
    libs += [
      "dxgi.lib",
      "dwmapi.lib",
    ]
    ldflags += [ "/DELAYLOAD:dxgi.dll" ]
  }
  if (is_mac) {
    sources += [
      "gpu_memory_buffer_factory_io_surface.cc",
      "gpu_memory_buffer_factory_io_surface.h",
      "image_transport_surface_mac.mm",
      "image_transport_surface_overlay_mac.h",
      "image_transport_surface_overlay_mac.mm",
    ]
    deps += [ "//ui/accelerated_widget_mac" ]
    lib_dirs = [ "$mac_sdk_path/usr/lib" ]
    libs += [
      "CoreGraphics.framework",
      "IOSurface.framework",
      "OpenGL.framework",
      "QuartzCore.framework",
    ]
  }
  if (is_android) {
    sources += [
      "gpu_memory_buffer_factory_android_hardware_buffer.cc",
      "gpu_memory_buffer_factory_android_hardware_buffer.h",
      "image_transport_surface_android.cc",
      "stream_texture_android.cc",
      "stream_texture_android.h",
    ]
    libs += [ "android" ]
  }
  if (is_linux) {
    sources += [
      "gpu_memory_buffer_factory_native_pixmap.cc",
      "gpu_memory_buffer_factory_native_pixmap.h",
      "image_transport_surface_linux.cc",
    ]
  }
  if (use_x11) {
    sources += [ "x_util.h" ]
    libs += [ "X11" ]
  }
  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }
  if (is_fuchsia) {
    sources += [ "image_transport_surface_fuchsia.cc" ]
  }
  if (enable_vulkan) {
    deps += [ "//gpu/vulkan/init" ]
  }
}

source_set("test_support") {
  testonly = true
  sources = [
    "gpu_memory_buffer_factory_test_template.h",
  ]
  public_deps = [
    ":service",
    "//testing/gtest:gtest",
  ]
  deps = [
    "//gpu/ipc/common",
    "//ui/gl:test_support",
  ]
}
