# 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/chromecast_build.gni")
import("//ui/ozone/ozone.gni")

visibility = [
  "//ui/ozone/*",
  "//chromecast/*",
]

# GYP version: cast.gypi:ozone_platform_cast
# TODO(slan): gn check needs deps on ozone and media to pass. Correct this.
source_set("cast") {
  sources = [
    "client_native_pixmap_factory_cast.cc",
    "client_native_pixmap_factory_cast.h",
    "gl_surface_cast.cc",
    "gl_surface_cast.h",
    "gpu_platform_support_cast.cc",
    "gpu_platform_support_cast.h",
    "overlay_manager_cast.cc",
    "overlay_manager_cast.h",
    "ozone_platform_cast.cc",
    "ozone_platform_cast.h",
    "platform_window_cast.cc",
    "platform_window_cast.h",
    "surface_factory_cast.cc",
    "surface_factory_cast.h",
  ]

  defines = [ "OZONE_IMPLEMENTATION" ]

  # For EGL header included in surface_factory_cast.cc (needs EGL types).
  configs += [ "//third_party/khronos:khronos_headers" ]

  # For loading EGL functions using dlsym in surface_factory_cast.cc because we
  # do not want to statically link against EGL library.
  libs = [ "dl" ]

  deps = [
    "//base",
    "//chromecast:chromecast_features",
    "//chromecast/base:base",
    "//chromecast/graphics:libcast_graphics_1.0",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/ozone:ozone_base",
    "//ui/ozone/common",
    "//ui/platform_window",
  ]
}
