# 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")
}

gl_binding_output_dir = target_gen_dir

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

  # TODO(brettw) this should be removed and the the files using the generated
  # GL bindings should use the path inside the gen directory.
  include_dirs = [ gl_binding_output_dir ]
}

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

  sources = [
    "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",
    "gl_bindings.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_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_export.h",
    "gl_fence.cc",
    "gl_fence.h",
    "gl_fence_arb.cc",
    "gl_fence_arb.h",
    "gl_fence_nv.cc",
    "gl_fence_nv.h",
    "gl_gl_api_implementation.cc",
    "gl_gl_api_implementation.h",
    "gl_image.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_mac.cc",
    "gl_surface_stub.cc",
    "gl_surface_stub.h",
    "gl_surface_win.cc",
    "gl_surface_osmesa.cc",
    "gl_surface_osmesa.h",
    "gl_switches.cc",
    "gl_switches.h",
    "gl_version_info.cc",
    "gl_version_info.h",
    "gpu_switching_manager.cc",
    "gpu_switching_manager.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",
    "$gl_binding_output_dir/gl_bindings_autogen_gl.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_gl.h",
    "$gl_binding_output_dir/gl_bindings_autogen_osmesa.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_osmesa.h",
  ]

  defines = [ "GL_IMPLEMENTATION" ]

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

  all_dependent_configs = [ ":gl_config" ]

  deps = [
    ":generate_gl_bindings",
    "//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_win || is_android || is_linux) {
    sources += [
      "egl_util.cc",
      "egl_util.h",
      "gl_context_egl.cc",
      "gl_context_egl.h",
      "gl_fence_egl.cc",
      "gl_fence_egl.h",
      "gl_image_egl.cc",
      "gl_image_egl.h",
      "gl_surface_egl.cc",
      "gl_surface_egl.h",
      "$gl_binding_output_dir/gl_bindings_autogen_egl.cc",
      "$gl_binding_output_dir/gl_bindings_autogen_egl.h",
    ]
  }
  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_context_glx.cc",
      "gl_context_glx.h",
      "gl_context_x11.cc",
      "gl_glx_api_implementation.cc",
      "gl_glx_api_implementation.h",
      "gl_implementation_x11.cc",
      "gl_surface_glx.cc",
      "gl_surface_glx.h",
      "gl_surface_x11.cc",
      "gl_egl_api_implementation.cc",
      "gl_egl_api_implementation.h",
      "$gl_binding_output_dir/gl_bindings_autogen_glx.cc",
      "$gl_binding_output_dir/gl_bindings_autogen_glx.h",
    ]

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

    deps += [
      "//ui/gfx/x",
    ]
  }
  if (is_win) {
    sources += [
      "gl_context_wgl.cc",
      "gl_context_wgl.h",
      "gl_egl_api_implementation.cc",
      "gl_egl_api_implementation.h",
      "gl_surface_wgl.cc",
      "gl_surface_wgl.h",
      "gl_wgl_api_implementation.cc",
      "gl_wgl_api_implementation.h",
      "$gl_binding_output_dir/gl_bindings_autogen_wgl.cc",
      "$gl_binding_output_dir/gl_bindings_autogen_wgl.h",
    ]

    libs = [ "dwmapi.lib" ]
    ldflags = [ "/DELAYLOAD:dwmapi.dll" ]
  }
  if (is_mac) {
    sources += [
      "gl_context_cgl.cc",
      "gl_context_cgl.h",
      "gl_fence_apple.cc",
      "gl_fence_apple.h",
      "gl_image_io_surface.cc",
      "gl_image_io_surface.h",
      "scoped_cgl.cc",
      "scoped_cgl.h",
    ]

    libs = [
      "IOSurface.framework",
      "OpenGL.framework",
    ]
  }
  if (is_android) {
    sources += [
      "gl_egl_api_implementation.cc",
      "gl_egl_api_implementation.h",
      "gl_image_surface_texture.cc",
      "gl_image_surface_texture.h",
    ]

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

    libs = [ "android" ]

    deps += [
      ":gl_jni_headers",
    ]
  }
  if (use_ozone) {
    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_android && !is_android_webview_build) {
    deps += [ "//ui/android:ui_java" ]
  }
}

action("generate_gl_bindings") {
  visibility = [ ":*" ]  # Only targets in this file can see this.

  script = "generate_bindings.py"

  # TODO(brettw) make this dynamic. The GYP version calls "generate_bindings.py
  # --inputs" to get the list here. What should happen is that the script
  # should generate a .d file, which we should declare here. That will
  # eliminate the need bot both hardcoding the list here or calling the script
  # during GN-time.
  inputs = [
    "EGL/eglextchromium.h",
    "GL/glextchromium.h",
    "//third_party/mesa/src/include/GL/glext.h",
    "//third_party/khronos/GLES2/gl2ext.h",
    "//gpu/GLES2/gl2chromium.h",
    "//gpu/GLES2/gl2extchromium.h",
    "//third_party/khronos/EGL/eglext.h",
    "//third_party/mesa/src/include/GL/wglext.h",
    "//third_party/mesa/src/include/GL/glx.h",
    "//third_party/mesa/src/include/GL/glxext.h",
  ]

  outputs = [
    "$gl_binding_output_dir/gl_bindings_autogen_egl.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_egl.h",
    "$gl_binding_output_dir/gl_bindings_api_autogen_egl.h",
    "$gl_binding_output_dir/gl_bindings_autogen_gl.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_gl.h",
    "$gl_binding_output_dir/gl_bindings_api_autogen_gl.h",
    "$gl_binding_output_dir/gl_bindings_autogen_glx.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_glx.h",
    "$gl_binding_output_dir/gl_bindings_api_autogen_glx.h",
    "$gl_binding_output_dir/gl_bindings_autogen_mock.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_mock.h",
    "$gl_binding_output_dir/gl_bindings_autogen_osmesa.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_osmesa.h",
    "$gl_binding_output_dir/gl_bindings_api_autogen_osmesa.h",
    "$gl_binding_output_dir/gl_bindings_autogen_wgl.cc",
    "$gl_binding_output_dir/gl_bindings_autogen_wgl.h",
    "$gl_binding_output_dir/gl_bindings_api_autogen_wgl.h",
    "$gl_binding_output_dir/gl_mock_autogen_gl.h",
  ]

  args = [
    "--header-paths=" +
        rebase_path("//third_party/khronos", root_build_dir) + ":" +
        rebase_path("//third_party/mesa/src/include", root_build_dir) + ":" +
        rebase_path("//ui/gl", root_build_dir) + ":" +
        rebase_path("//gpu", root_build_dir),
    rebase_path(gl_binding_output_dir, root_build_dir),
  ]
}

config("gl_unittest_utils_config") {
  include_dirs = [ gl_binding_output_dir ]
}

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

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

  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") {
    deps = [ ":surface_jni_headers" ]
    sources = [
      "../android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java",
      "../android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java",
    ]
    jni_package = "ui/gl"
  }
}
