# 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/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",
    "android/surface_texture_tracker.cc",
    "android/surface_texture_tracker.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.cc",
    "gl_image.h",
    "gl_image_android.cc",
    "gl_image_mac.cc",
    "gl_image_shm.cc",
    "gl_image_shm.h",
    "gl_image_stub.cc",
    "gl_image_stub.h",
    "gl_image_win.cc",
    "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",
    "//base/third_party/dynamic_annotations",
    "//gpu/command_buffer/common",
    "//third_party/mesa:mesa_headers",
    "//skia",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  # TODO(GYP) hook up once this is converted.
  forward_dependent_configs_from = [ "//third_party/mesa:mesa_headers" ]

  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 (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_image_glx.cc",
      "gl_image_glx.h",
      "gl_image_x11.cc",
      "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_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_android_native_buffer.cc",
      "gl_image_android_native_buffer.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_image_ozone.cc",
      "gl_implementation_ozone.cc",
      "gl_surface_ozone.cc",
    ]
    deps += [
      #"//ui/gfx/ozone",
      "//ui/ozone",
    ]
  }

  # TODO(GYP) enable this dependency once its written.
  #if (is_android && !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") {
  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" ]
  direct_dependent_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" ]
    forward_dependent_configs_from = [ ":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"
  }
}
