# 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", "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_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" ] } 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_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_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" } }