# 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")
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

config("gl_config") {
  if (use_x11) {
    defines = [ "GL_GLEXT_PROTOTYPES" ]
  }
}

component("gl") {
  output_name = "gl_wrapper"  # Avoid colliding with OS X"s libGL.dylib.

  sources = [
    "android/android_vsync_provider.cc",
    "android/android_vsync_provider.h",
    "android/gl_jni_registrar.cc",
    "android/gl_jni_registrar.h",
    "android/scoped_java_surface.cc",
    "android/scoped_java_surface.h",
    "android/surface_texture.cc",
    "android/surface_texture.h",
    "android/surface_texture_listener.cc",
    "android/surface_texture_listener.h",
    "egl_util.cc",
    "egl_util.h",
    "gl_bindings.cc",
    "gl_bindings.h",
    "gl_bindings_autogen_egl.cc",
    "gl_bindings_autogen_egl.h",
    "gl_bindings_autogen_gl.cc",
    "gl_bindings_autogen_gl.h",
    "gl_bindings_autogen_osmesa.cc",
    "gl_bindings_autogen_osmesa.h",
    "gl_bindings_skia_in_process.cc",
    "gl_bindings_skia_in_process.h",
    "gl_context.cc",
    "gl_context.h",
    "gl_context_android.cc",
    "gl_context_egl.cc",
    "gl_context_egl.h",
    "gl_context_mac.mm",
    "gl_context_osmesa.cc",
    "gl_context_osmesa.h",
    "gl_context_stub.cc",
    "gl_context_stub.h",
    "gl_context_stub_with_extensions.cc",
    "gl_context_stub_with_extensions.h",
    "gl_context_win.cc",
    "gl_enums.cc",
    "gl_enums.h",
    "gl_enums_implementation_autogen.h",
    "gl_export.h",
    "gl_fence.cc",
    "gl_fence.h",
    "gl_fence_arb.cc",
    "gl_fence_arb.h",
    "gl_fence_egl.cc",
    "gl_fence_egl.h",
    "gl_fence_nv.cc",
    "gl_fence_nv.h",
    "gl_gl_api_implementation.cc",
    "gl_gl_api_implementation.h",
    "gl_image.h",
    "gl_image_egl.cc",
    "gl_image_egl.h",
    "gl_image_memory.cc",
    "gl_image_memory.h",
    "gl_image_ref_counted_memory.cc",
    "gl_image_ref_counted_memory.h",
    "gl_image_shared_memory.cc",
    "gl_image_shared_memory.h",
    "gl_image_stub.cc",
    "gl_image_stub.h",
    "gl_implementation.cc",
    "gl_implementation.h",
    "gl_implementation_android.cc",
    "gl_implementation_mac.cc",
    "gl_implementation_win.cc",
    "gl_osmesa_api_implementation.cc",
    "gl_osmesa_api_implementation.h",
    "gl_share_group.cc",
    "gl_share_group.h",
    "gl_state_restorer.cc",
    "gl_state_restorer.h",
    "gl_surface.cc",
    "gl_surface.h",
    "gl_surface_android.cc",
    "gl_surface_egl.cc",
    "gl_surface_egl.h",
    "gl_surface_mac.cc",
    "gl_surface_osmesa.cc",
    "gl_surface_osmesa.h",
    "gl_surface_stub.cc",
    "gl_surface_stub.h",
    "gl_surface_win.cc",
    "gl_switches.cc",
    "gl_switches.h",
    "gl_version_info.cc",
    "gl_version_info.h",
    "gpu_switching_manager.cc",
    "gpu_switching_manager.h",
    "gpu_timing.cc",
    "gpu_timing.h",
    "scoped_binders.cc",
    "scoped_binders.h",
    "scoped_make_current.cc",
    "scoped_make_current.h",
    "sync_control_vsync_provider.cc",
    "sync_control_vsync_provider.h",
  ]

  defines = [ "GL_IMPLEMENTATION" ]

  include_dirs = [
    "//third_party/switfshader/include",
    "//third_party/khronos",
    "//third_party/mesa/src/include",
  ]

  all_dependent_configs = [ ":gl_config" ]

  deps = [
    "//base/third_party/dynamic_annotations",
    "//gpu/command_buffer/common",
    "//skia",
  ]
  public_deps = [
    "//base",
    "//third_party/mesa:mesa_headers",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (is_android || is_linux) {
    sources += [
      "gl_implementation_osmesa.cc",
      "gl_implementation_osmesa.h",
    ]
  }
  if (is_linux) {
    deps += [ "//third_party/libevent" ]
    sources += [
      "gl_image_linux_dma_buffer.cc",
      "gl_image_linux_dma_buffer.h",
    ]
  }
  if (use_x11) {
    sources += [
      "gl_bindings_autogen_glx.cc",
      "gl_bindings_autogen_glx.h",
      "gl_context_glx.cc",
      "gl_context_glx.h",
      "gl_context_x11.cc",
      "gl_egl_api_implementation.cc",
      "gl_egl_api_implementation.h",
      "gl_glx_api_implementation.cc",
      "gl_glx_api_implementation.h",
      "gl_image_glx.cc",
      "gl_image_glx.h",
      "gl_implementation_x11.cc",
      "gl_surface_glx.cc",
      "gl_surface_glx.h",
      "gl_surface_x11.cc",
    ]

    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xcomposite",
      "//build/config/linux:xext",
    ]

    deps += [ "//ui/gfx/x" ]
  }
  if (is_android) {
    sources += [
      "gl_egl_api_implementation.cc",
      "gl_egl_api_implementation.h",
      "gl_image_linux_dma_buffer.cc",
      "gl_image_linux_dma_buffer.h",
    ]

    defines += [
      "GL_GLEXT_PROTOTYPES",
      "EGL_EGLEXT_PROTOTYPES",
    ]

    libs = [ "android" ]

    deps += [ ":gl_jni_headers" ]
  }
  if (use_ozone) {
    if (is_android) {
      sources -= [
        "gl_implementation_android.cc",
        "gl_surface_android.cc",
      ]
    }
    sources += [
      "gl_context_ozone.cc",
      "gl_egl_api_implementation.cc",
      "gl_egl_api_implementation.h",
      "gl_implementation_ozone.cc",
      "gl_surface_ozone.cc",
    ]
    deps += [
      "//ui/ozone",
      "//ui/ozone:ozone_base",
    ]
  }
  if (is_ios || is_mac) {
    sources = []
    sources = [
      "gl_bindings_autogen_gl.cc",
      "gl_bindings_autogen_gl.h",
      "gl_bindings_skia_in_process.cc",
      "gl_bindings_skia_in_process.h",
      "gl_context.cc",
      "gl_context.h",
      "gl_context_ios.h",
      "gl_context_ios.mm",
      "gl_context_mac.mm",
      "gl_context_stub.cc",
      "gl_context_stub.h",
      "gl_context_stub_with_extensions.cc",
      "gl_context_stub_with_extensions.h",
      "gl_enums.cc",
      "gl_enums.h",
      "gl_enums_implementation_autogen.h",
      "gl_gl_api_implementation.cc",
      "gl_gl_api_implementation.h",
      "gl_implementation.cc",
      "gl_implementation.h",
      "gl_implementation_ios.cc",
      "gl_implementation_mac.cc",
      "gl_share_group.cc",
      "gl_share_group.h",
      "gl_surface.cc",
      "gl_surface.h",
      "gl_surface_ios.h",
      "gl_surface_ios.mm",
      "gl_surface_mac.cc",
      "gl_surface_stub.cc",
      "gl_surface_stub.h",
      "gl_switches.cc",
      "gl_switches.h",
      "gl_version_info.cc",
      "gl_version_info.h",
      "gpu_timing.cc",
      "gpu_timing.h",
    ]
  }

  if (is_mac) {
    sources += [
      "gl_context_cgl.cc",
      "gl_context_cgl.h",
      "gpu_switching_manager.cc",
      "gpu_switching_manager.h",
    ]

    cflags = [ "-Wno-deprecated-declarations" ]
  }
}

source_set("gl_unittest_utils") {
  testonly = true
  sources = [
    "gl_bindings_autogen_mock.cc",
    "gl_bindings_autogen_mock.h",
    "gl_mock.cc",
    "gl_mock.h",
    "gl_mock_autogen_gl.h",
  ]

  configs += [ "//third_party/khronos:khronos_headers" ]

  deps = [
    ":gl",
    "//testing/gmock",
  ]
}

if (is_android) {
  generate_jar_jni("surface_jni_headers") {
    jni_package = "ui/gl"
    classes = [ "android/view/Surface.class" ]
  }

  generate_jni("gl_jni_headers") {
    sources = [
      "android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java",
      "android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java",
      "android/java/src/org/chromium/ui/gl/VSyncProvider.java",
    ]
    public_deps = [
      ":surface_jni_headers",
    ]
    jni_package = "ui/gl"
  }

  android_library("gl_java") {
    java_files = [
      "android/java/src/org/chromium/ui/gl/RollingMedianComputer.java",
      "android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java",
      "android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java",
      "android/java/src/org/chromium/ui/gl/VSyncProvider.java",
    ]

    deps = [
      "//base:base_java",
    ]
  }
}
