# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//build/config/ui.gni")
import("../../build/webrtc.gni")

use_desktop_capture_differ_sse2 =
    !is_ios && (current_cpu == "x86" || current_cpu == "x64")

rtc_static_library("primitives") {
  sources = [
    "desktop_capture_types.h",
    "desktop_frame.cc",
    "desktop_frame.h",
    "desktop_geometry.cc",
    "desktop_geometry.h",
    "desktop_region.cc",
    "desktop_region.h",
  ]
}

rtc_static_library("desktop_capture") {
  sources = [
    "cropped_desktop_frame.cc",
    "cropped_desktop_frame.h",
    "cropping_window_capturer.cc",
    "cropping_window_capturer.h",
    "cropping_window_capturer_win.cc",
    "desktop_and_cursor_composer.cc",
    "desktop_and_cursor_composer.h",
    "desktop_capture_options.cc",
    "desktop_capture_options.h",
    "desktop_capturer.h",
    "desktop_frame_win.cc",
    "desktop_frame_win.h",
    "mac/desktop_configuration.h",
    "mac/desktop_configuration.mm",
    "mac/desktop_configuration_monitor.cc",
    "mac/desktop_configuration_monitor.h",
    "mac/full_screen_chrome_window_detector.cc",
    "mac/full_screen_chrome_window_detector.h",
    "mac/scoped_pixel_buffer_object.cc",
    "mac/scoped_pixel_buffer_object.h",
    "mac/window_list_utils.cc",
    "mac/window_list_utils.h",
    "mouse_cursor.cc",
    "mouse_cursor.h",
    "mouse_cursor_monitor.h",
    "mouse_cursor_monitor_mac.mm",
    "mouse_cursor_monitor_win.cc",
    "screen_capture_frame_queue.h",
    "screen_capturer.h",
    "screen_capturer_helper.cc",
    "screen_capturer_helper.h",
    "screen_capturer_mac.mm",
    "screen_capturer_win.cc",
    "shared_desktop_frame.cc",
    "shared_desktop_frame.h",
    "shared_memory.cc",
    "shared_memory.h",
    "win/cursor.cc",
    "win/cursor.h",
    "win/d3d_device.cc",
    "win/d3d_device.h",
    "win/desktop.cc",
    "win/desktop.h",
    "win/dxgi_adapter_duplicator.cc",
    "win/dxgi_adapter_duplicator.h",
    "win/dxgi_duplicator_controller.cc",
    "win/dxgi_duplicator_controller.h",
    "win/dxgi_output_duplicator.cc",
    "win/dxgi_output_duplicator.h",
    "win/dxgi_texture.cc",
    "win/dxgi_texture.h",
    "win/dxgi_texture_mapping.cc",
    "win/dxgi_texture_mapping.h",
    "win/dxgi_texture_staging.cc",
    "win/dxgi_texture_staging.h",
    "win/scoped_gdi_object.h",
    "win/scoped_thread_desktop.cc",
    "win/scoped_thread_desktop.h",
    "win/screen_capture_utils.cc",
    "win/screen_capture_utils.h",
    "win/screen_capturer_win_directx.cc",
    "win/screen_capturer_win_directx.h",
    "win/screen_capturer_win_gdi.cc",
    "win/screen_capturer_win_gdi.h",
    "win/screen_capturer_win_magnifier.cc",
    "win/screen_capturer_win_magnifier.h",
    "win/window_capture_utils.cc",
    "win/window_capture_utils.h",
    "window_capturer.h",
    "window_capturer_mac.mm",
    "window_capturer_win.cc",
  ]

  if (use_x11) {
    sources += [
      "mouse_cursor_monitor_x11.cc",
      "screen_capturer_x11.cc",
      "window_capturer_x11.cc",
      "x11/shared_x_display.cc",
      "x11/shared_x_display.h",
      "x11/x_error_trap.cc",
      "x11/x_error_trap.h",
      "x11/x_server_pixel_buffer.cc",
      "x11/x_server_pixel_buffer.h",
    ]
    configs += [ "//build/config/linux:x11" ]
  }

  if (!is_win && !is_mac && !use_x11) {
    sources += [
      "mouse_cursor_monitor_null.cc",
      "screen_capturer_null.cc",
      "window_capturer_null.cc",
    ]
  }

  if (!is_ios) {
    sources += [
      "differ_block.cc",
      "differ_block.h",
      "screen_capturer_differ_wrapper.cc",
      "screen_capturer_differ_wrapper.h",
    ]
  }

  if (is_mac) {
    libs = [
      "AppKit.framework",
      "IOKit.framework",
      "OpenGL.framework",
    ]
  }

  if (is_win) {
    libs = [
      "d3d11.lib",
      "dxgi.lib",
    ]
  }

  if (is_clang && !is_nacl) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":primitives",
    "../../base:rtc_base",  # TODO(kjellander): Cleanup in bugs.webrtc.org/3806.
    "../../system_wrappers",
  ]

  if (use_desktop_capture_differ_sse2) {
    deps += [ ":desktop_capture_differ_sse2" ]
  }
}

if (use_desktop_capture_differ_sse2) {
  # Have to be compiled as a separate target because it needs to be compiled
  # with SSE2 enabled.
  rtc_static_library("desktop_capture_differ_sse2") {
    visibility = [ ":*" ]
    sources = [
      "differ_vector_sse2.cc",
      "differ_vector_sse2.h",
    ]

    if (is_posix) {
      cflags = [ "-msse2" ]
    }
  }
}
