# Copyright 2015 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/linux/pkg_config.gni")
import("//build/config/ui.gni")
import("//testing/test.gni")
import("//ui/base/ui_features.gni")
import("//ui/ozone/ozone.gni")

declare_args() {
  # Enable experimental vulkan wayland client.
  enable_vulkan_wayland_client = false
}

if (use_xkbcommon) {
  pkg_config("xkbcommon") {
    packages = [ "xkbcommon" ]
  }
}

if (use_ozone) {
  if (enable_vulkan_wayland_client) {
    pkg_config("vulkan") {
      packages = [ "vulkan" ]
    }
  }
}

source_set("wayland") {
  sources = [
    "scoped_wl.cc",
    "scoped_wl.h",
    "server.cc",
    "server.h",
    "server_util.cc",
    "server_util.h",
    "wayland_display_observer.cc",
    "wayland_display_observer.h",
    "wayland_display_output.cc",
    "wayland_display_output.h",
    "wayland_input_delegate.cc",
    "wayland_input_delegate.h",
    "wayland_touch_delegate.cc",
    "wayland_touch_delegate.h",
    "wayland_watcher.cc",
    "wayland_watcher.h",
    "wl_compositor.cc",
    "wl_compositor.h",
    "wl_output.cc",
    "wl_output.h",
    "wl_seat.cc",
    "wl_seat.h",
    "wl_shm.cc",
    "wl_shm.h",
  ]

  defines = [ "EXO_IMPLEMENTATION" ]

  if (is_chromeos) {
    sources += [
      "wayland_keyboard_delegate.cc",
      "wayland_keyboard_delegate.h",
      "wayland_pointer_delegate.cc",
      "wayland_pointer_delegate.h",
      "wl_shell.cc",
      "wl_shell.h",
      "zaura_shell.cc",
      "zaura_shell.h",
      "zcr_cursor_shapes.cc",
      "zcr_cursor_shapes.h",
      "zcr_gaming_input.cc",
      "zcr_gaming_input.h",
      "zcr_keyboard_configuration.cc",
      "zcr_keyboard_configuration.h",
      "zcr_keyboard_extension.cc",
      "zcr_keyboard_extension.h",
      "zcr_notification_shell.cc",
      "zcr_notification_shell.h",
      "zcr_remote_shell.cc",
      "zcr_remote_shell.h",
      "zcr_stylus_tools.cc",
      "zcr_stylus_tools.h",
      "zwp_input_timestamps_manager.cc",
      "zwp_input_timestamps_manager.h",
      "zwp_linux_explicit_synchronization.cc",
      "zwp_linux_explicit_synchronization.h",
      "zwp_pointer_gestures.cc",
      "zwp_pointer_gestures.h",
      "zwp_text_input_manager.cc",
      "zwp_text_input_manager.h",
      "zxdg_shell.cc",
      "zxdg_shell.h",
    ]
  }

  deps = [
    "//base",
    "//components/exo",
    "//components/exo/wayland/protocol:aura_shell_protocol",
    "//device/gamepad",
    "//services/viz/public/interfaces",
    "//skia",
    "//third_party/wayland:wayland_server",
    "//third_party/wayland-protocols:alpha_compositing_protocol",
    "//third_party/wayland-protocols:cursor_shapes_protocol",
    "//third_party/wayland-protocols:gaming_input_protocol",
    "//third_party/wayland-protocols:input_timestamps_protocol",
    "//third_party/wayland-protocols:keyboard_configuration_protocol",
    "//third_party/wayland-protocols:keyboard_extension_protocol",
    "//third_party/wayland-protocols:linux_explicit_synchronization_protocol",
    "//third_party/wayland-protocols:notification_shell_protocol",
    "//third_party/wayland-protocols:pointer_gestures_protocol",
    "//third_party/wayland-protocols:presentation_time_protocol",
    "//third_party/wayland-protocols:remote_shell_protocol",
    "//third_party/wayland-protocols:secure_output_protocol",
    "//third_party/wayland-protocols:stylus_protocol",
    "//third_party/wayland-protocols:stylus_tools_protocol",
    "//third_party/wayland-protocols:text_input_protocol",
    "//third_party/wayland-protocols:viewporter_protocol",
    "//third_party/wayland-protocols:vsync_feedback_protocol",
    "//third_party/wayland-protocols:xdg_shell_protocol",
    "//ui/aura",
    "//ui/base",
    "//ui/display/manager",
    "//ui/events:dom_keycode_converter",
    "//ui/events:events_base",
    "//ui/views",
    "//ui/wm:wm",
    "//ui/wm/public",
  ]

  if (use_ozone) {
    sources += [
      "zwp_linux_dmabuf.cc",
      "zwp_linux_dmabuf.h",
    ]

    deps += [
      "//build/config/linux/libdrm",
      "//third_party/wayland-protocols:linux_dmabuf_protocol",
    ]

    if (is_chromeos) {
      deps += [
        "//ash/public/cpp",
        "//ui/events/ozone:events_ozone_layout",
      ]
    }
  }

  if (use_xkbcommon) {
    configs += [ ":xkbcommon" ]
    deps += [ "//ui/events/keycodes:xkb" ]
  }

  if (is_chromecast) {
    defines += [ "USE_FULLSCREEN_SHELL" ]
    sources += [
      "zwp_fullscreen_shell.cc",
      "zwp_fullscreen_shell.h",
    ]
    deps += [ "//third_party/wayland-protocols:fullscreen_shell_protocol" ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "server_unittest.cc",
  ]

  deps = [
    ":wayland",
    "//base",
    "//components/exo",
    "//components/exo:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/wayland:wayland_client",
  ]

  if (is_chromeos) {
    sources += [ "server_util_unittest.cc" ]
    deps += [
      "//ui/display",
      "//ui/gfx",
    ]
  }
}

config("client_support_config") {
  if (ozone_platform_gbm) {
    defines = [ "USE_GBM" ]
    if (enable_vulkan_wayland_client) {
      defines += [ "USE_VULKAN" ]
    }
  }
}

source_set("client_support") {
  sources = [
    "clients/client_base.cc",
    "clients/client_base.h",
    "clients/client_helper.cc",
    "clients/client_helper.h",
  ]

  deps = [
    "//base",
    "//ui/gl",
    "//ui/gl/init",
  ]

  public_deps = [
    "//components/exo/wayland/protocol:aura_shell_protocol",
    "//skia",
    "//third_party/wayland:wayland_client",
    "//third_party/wayland-protocols:fullscreen_shell_protocol",
    "//third_party/wayland-protocols:input_timestamps_protocol",
    "//third_party/wayland-protocols:linux_dmabuf_protocol",
    "//third_party/wayland-protocols:linux_explicit_synchronization_protocol",
    "//third_party/wayland-protocols:presentation_time_protocol",
  ]

  if (ozone_platform_gbm) {
    configs += [ "//ui/gl:gl_config" ]
    if (enable_vulkan_wayland_client) {
      configs += [ ":vulkan" ]
    }
    deps += [
      "//build/config/linux/libdrm",
      "//ui/ozone",
    ]
    public_deps += [ "//third_party/minigbm" ]
  }

  public_configs = [ ":client_support_config" ]
}

executable("wayland_rects_client") {
  sources = [
    "clients/rects.cc",
  ]

  deps = [
    ":client_support",
    "//base",
    "//skia",
    "//third_party/wayland:wayland_client",
    "//third_party/wayland-protocols:input_timestamps_protocol",
    "//third_party/wayland-protocols:linux_dmabuf_protocol",
    "//third_party/wayland-protocols:presentation_time_protocol",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  if (ozone_platform_gbm) {
    configs += [ "//ui/gl:gl_config" ]
    defines = [ "USE_GBM" ]
    deps += [
      "//build/config/linux/libdrm",
      "//third_party/minigbm",
    ]
  }
}

source_set("simple") {
  sources = [
    "clients/simple.cc",
    "clients/simple.h",
  ]

  deps = [
    ":client_support",
    "//base",
    "//build/config/linux/libdrm",
    "//skia",
    "//third_party/wayland:wayland_client",
    "//third_party/wayland-protocols:linux_dmabuf_protocol",
    "//third_party/wayland-protocols:presentation_time_protocol",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  if (ozone_platform_gbm) {
    configs += [ "//ui/gl:gl_config" ]
  }
}

source_set("fullscreen_shell") {
  sources = [
    "clients/fullscreen_shell.cc",
    "clients/fullscreen_shell.h",
  ]

  deps = [
    ":client_support",
    "//base",
    "//build/config/linux/libdrm",
    "//skia",
    "//third_party/wayland:wayland_client",
    "//third_party/wayland-protocols:linux_dmabuf_protocol",
    "//third_party/wayland-protocols:presentation_time_protocol",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  if (ozone_platform_gbm) {
    configs += [ "//ui/gl:gl_config" ]
  }
}

executable("wayland_simple_client") {
  sources = [
    "clients/simple_main.cc",
  ]
  deps = [
    ":client_support",
    ":simple",
    "//base",
  ]
}

executable("wayland_fullscreen_client") {
  sources = [
    "clients/fullscreen_shell_main.cc",
  ]
  deps = [
    ":client_support",
    ":fullscreen_shell",
    "//base",
  ]
}

executable("wayland_subsurface_client") {
  sources = [
    "clients/subsurface.cc",
  ]

  deps = [
    ":client_support",
    "//base",
    "//build/config/linux/libdrm",
    "//skia",
    "//third_party/wayland:wayland_client",
    "//third_party/wayland-protocols:linux_dmabuf_protocol",
    "//third_party/wayland-protocols:presentation_time_protocol",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  if (ozone_platform_gbm) {
    configs += [ "//ui/gl:gl_config" ]
  }
}

source_set("blur") {
  sources = [
    "clients/blur.cc",
    "clients/blur.h",
  ]

  deps = [
    ":client_support",
    "//base",
    "//build/config/linux/libdrm",
    "//skia",
    "//third_party/wayland:wayland_client",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  if (ozone_platform_gbm) {
    configs += [ "//ui/gl:gl_config" ]
  }
}

executable("wayland_blur_client") {
  sources = [
    "clients/blur_main.cc",
  ]
  deps = [
    ":blur",
    ":client_support",
    "//base",
  ]
}

executable("wayland_info_client") {
  sources = [
    "clients/info.cc",
  ]

  deps = [
    ":client_support",
    "//base",
    "//third_party/wayland:wayland_client",
    "//ui/gfx/geometry",
  ]
}

test("wayland_client_perftests") {
  sources = [
    "clients/perftests.cc",
    "clients/test/run_all_client_perftests.cc",
    "clients/test/wayland_client_test.cc",
    "clients/test/wayland_client_test.h",
  ]

  deps = [
    ":blur",
    ":client_support",
    ":simple",
    ":wayland",
    "//base",
    "//base/test:test_support",
    "//cc:test_support",
    "//components/exo",
    "//components/viz/test:test_support",
    "//mojo/core/embedder",
    "//testing/gtest",
    "//testing/perf",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base",
    "//ui/compositor:test_support",
    "//ui/events:gesture_detection",
    "//ui/gl:test_support",
    "//ui/wm",
  ]

  data_deps = []

  if (is_chromeos) {
    sources += [
      "../../../ash/test/ash_test_suite.cc",
      "../../../ash/test/ash_test_suite.h",
    ]

    data_deps += [
      "//ash/strings:ash_test_strings",
      "//ash/resources:ash_test_resources_100_percent",
      "//ash/resources:ash_test_resources_200_percent",
    ]

    deps += [
      "//ash",
      "//ash:test_support",
      "//ash/public/cpp",
    ]
  }
}

if (ozone_platform_gbm) {
  executable("wayland_yuv_client") {
    sources = [
      "clients/yuv.cc",
    ]

    deps = [
      ":client_support",
      "//base",
      "//build/config/linux/libdrm",
      "//skia",
      "//third_party/wayland:wayland_client",
      "//third_party/wayland-protocols:linux_dmabuf_protocol",
      "//third_party/wayland-protocols:presentation_time_protocol",
      "//ui/gfx/geometry",
    ]

    configs += [ "//ui/gl:gl_config" ]
    deps += [ "//third_party/minigbm" ]
  }

  executable("wayland_explicit_synchronization_client") {
    sources = [
      "clients/explicit_synchronization.cc",
    ]

    deps = [
      ":client_support",
      "//base",
      "//build/config/linux/libdrm",
      "//skia",
      "//third_party/wayland:wayland_client",
      "//third_party/wayland-protocols:linux_explicit_synchronization_protocol",
      "//ui/gl",
    ]

    configs += [ "//ui/gl:gl_config" ]
  }

  if (enable_vulkan_wayland_client) {
    executable("wayland_vulkan_client") {
      sources = [
        "clients/vulkan.cc",
      ]

      deps = [
        ":client_support",
        "//base",
        "//build/config/linux/libdrm",
        "//skia",
        "//third_party/wayland:wayland_client",
        "//third_party/wayland-protocols:linux_dmabuf_protocol",
        "//third_party/wayland-protocols:presentation_time_protocol",
        "//ui/gfx/geometry",
      ]

      configs += [ "//ui/gl:gl_config" ]
      deps += [ "//third_party/minigbm" ]
    }
  }
}
