1 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import("//build/config/ui.gni") 6 if (is_android) { 7 import("//build/config/android/config.gni") 8 import("//build/config/android/rules.gni") 9 } 10 11 gl_binding_output_dir = target_gen_dir 12 13 config("gl_config") { 14 if (use_x11) { 15 defines = [ "GL_GLEXT_PROTOTYPES" ] 16 } 17 18 # TODO(brettw) this should be removed and the the files using the generated 19 # GL bindings should use the path inside the gen directory. 20 include_dirs = [ gl_binding_output_dir ] 21 } 22 23 component("gl") { 24 output_name = "gl_wrapper" # Avoid colliding with OS X"s libGL.dylib. 25 26 sources = [ 27 "android/gl_jni_registrar.cc", 28 "android/gl_jni_registrar.h", 29 "android/scoped_java_surface.cc", 30 "android/scoped_java_surface.h", 31 "android/surface_texture.cc", 32 "android/surface_texture.h", 33 "android/surface_texture_listener.cc", 34 "android/surface_texture_listener.h", 35 "android/surface_texture_tracker.cc", 36 "android/surface_texture_tracker.h", 37 "gl_bindings.h", 38 "gl_bindings_skia_in_process.cc", 39 "gl_bindings_skia_in_process.h", 40 "gl_context.cc", 41 "gl_context.h", 42 "gl_context_android.cc", 43 "gl_context_mac.mm", 44 "gl_context_osmesa.cc", 45 "gl_context_osmesa.h", 46 "gl_context_stub.cc", 47 "gl_context_stub.h", 48 "gl_context_stub_with_extensions.cc", 49 "gl_context_stub_with_extensions.h", 50 "gl_context_win.cc", 51 "gl_export.h", 52 "gl_fence.cc", 53 "gl_fence.h", 54 "gl_fence_arb.cc", 55 "gl_fence_arb.h", 56 "gl_fence_nv.cc", 57 "gl_fence_nv.h", 58 "gl_gl_api_implementation.cc", 59 "gl_gl_api_implementation.h", 60 "gl_image.cc", 61 "gl_image.h", 62 "gl_image_memory.cc", 63 "gl_image_memory.h", 64 "gl_image_ref_counted_memory.cc", 65 "gl_image_ref_counted_memory.h", 66 "gl_image_shared_memory.cc", 67 "gl_image_shared_memory.h", 68 "gl_image_stub.cc", 69 "gl_image_stub.h", 70 "gl_implementation.cc", 71 "gl_implementation.h", 72 "gl_implementation_android.cc", 73 "gl_implementation_mac.cc", 74 "gl_implementation_win.cc", 75 "gl_osmesa_api_implementation.cc", 76 "gl_osmesa_api_implementation.h", 77 "gl_share_group.cc", 78 "gl_share_group.h", 79 "gl_state_restorer.cc", 80 "gl_state_restorer.h", 81 "gl_surface.cc", 82 "gl_surface.h", 83 "gl_surface_android.cc", 84 "gl_surface_mac.cc", 85 "gl_surface_stub.cc", 86 "gl_surface_stub.h", 87 "gl_surface_win.cc", 88 "gl_surface_osmesa.cc", 89 "gl_surface_osmesa.h", 90 "gl_switches.cc", 91 "gl_switches.h", 92 "gl_version_info.cc", 93 "gl_version_info.h", 94 "gpu_switching_manager.cc", 95 "gpu_switching_manager.h", 96 "scoped_binders.cc", 97 "scoped_binders.h", 98 "scoped_make_current.cc", 99 "scoped_make_current.h", 100 "sync_control_vsync_provider.cc", 101 "sync_control_vsync_provider.h", 102 "$gl_binding_output_dir/gl_bindings_autogen_gl.cc", 103 "$gl_binding_output_dir/gl_bindings_autogen_gl.h", 104 "$gl_binding_output_dir/gl_bindings_autogen_osmesa.cc", 105 "$gl_binding_output_dir/gl_bindings_autogen_osmesa.h", 106 ] 107 108 defines = [ "GL_IMPLEMENTATION" ] 109 110 include_dirs = [ 111 "//third_party/switfshader/include", 112 "//third_party/khronos", 113 "//third_party/mesa/src/include", 114 gl_binding_output_dir, 115 ] 116 117 all_dependent_configs = [ ":gl_config" ] 118 119 deps = [ 120 ":generate_gl_bindings", 121 "//base/third_party/dynamic_annotations", 122 "//gpu/command_buffer/common", 123 "//skia", 124 ] 125 public_deps = [ 126 "//base", 127 "//third_party/mesa:mesa_headers", 128 "//ui/events/platform", 129 "//ui/gfx", 130 "//ui/gfx/geometry", 131 ] 132 133 if (is_win || is_android || is_linux) { 134 sources += [ 135 "egl_util.cc", 136 "egl_util.h", 137 "gl_context_egl.cc", 138 "gl_context_egl.h", 139 "gl_fence_egl.cc", 140 "gl_fence_egl.h", 141 "gl_image_egl.cc", 142 "gl_image_egl.h", 143 "gl_surface_egl.cc", 144 "gl_surface_egl.h", 145 "$gl_binding_output_dir/gl_bindings_autogen_egl.cc", 146 "$gl_binding_output_dir/gl_bindings_autogen_egl.h", 147 ] 148 } 149 if (is_android || is_linux) { 150 sources += [ 151 "gl_implementation_osmesa.cc", 152 "gl_implementation_osmesa.h", 153 ] 154 } 155 if (is_linux) { 156 deps += [ "//third_party/libevent" ] 157 } 158 if (use_x11) { 159 sources += [ 160 "gl_context_glx.cc", 161 "gl_context_glx.h", 162 "gl_context_x11.cc", 163 "gl_glx_api_implementation.cc", 164 "gl_glx_api_implementation.h", 165 "gl_image_glx.cc", 166 "gl_image_glx.h", 167 "gl_implementation_x11.cc", 168 "gl_surface_glx.cc", 169 "gl_surface_glx.h", 170 "gl_surface_x11.cc", 171 "gl_egl_api_implementation.cc", 172 "gl_egl_api_implementation.h", 173 "$gl_binding_output_dir/gl_bindings_autogen_glx.cc", 174 "$gl_binding_output_dir/gl_bindings_autogen_glx.h", 175 ] 176 177 configs += [ 178 "//build/config/linux:x11", 179 "//build/config/linux:xcomposite", 180 "//build/config/linux:xext", 181 ] 182 183 deps += [ 184 "//ui/gfx/x", 185 ] 186 } 187 if (is_win) { 188 sources += [ 189 "gl_context_wgl.cc", 190 "gl_context_wgl.h", 191 "gl_egl_api_implementation.cc", 192 "gl_egl_api_implementation.h", 193 "gl_surface_wgl.cc", 194 "gl_surface_wgl.h", 195 "gl_wgl_api_implementation.cc", 196 "gl_wgl_api_implementation.h", 197 "$gl_binding_output_dir/gl_bindings_autogen_wgl.cc", 198 "$gl_binding_output_dir/gl_bindings_autogen_wgl.h", 199 ] 200 201 libs = [ "dwmapi.lib" ] 202 ldflags = [ "/DELAYLOAD:dwmapi.dll" ] 203 } 204 if (is_mac) { 205 sources += [ 206 "gl_context_cgl.cc", 207 "gl_context_cgl.h", 208 "gl_image_io_surface.cc", 209 "gl_image_io_surface.h", 210 "scoped_cgl.cc", 211 "scoped_cgl.h", 212 ] 213 214 libs = [ 215 "IOSurface.framework", 216 "OpenGL.framework", 217 ] 218 } 219 if (is_android) { 220 sources += [ 221 "gl_egl_api_implementation.cc", 222 "gl_egl_api_implementation.h", 223 "gl_image_android_native_buffer.cc", 224 "gl_image_android_native_buffer.h", 225 "gl_image_surface_texture.cc", 226 "gl_image_surface_texture.h", 227 ] 228 229 defines += [ 230 "GL_GLEXT_PROTOTYPES", 231 "EGL_EGLEXT_PROTOTYPES", 232 ] 233 234 libs = [ "android" ] 235 236 deps += [ 237 ":gl_jni_headers", 238 ] 239 } 240 if (use_ozone) { 241 sources += [ 242 "gl_context_ozone.cc", 243 "gl_egl_api_implementation.cc", 244 "gl_egl_api_implementation.h", 245 "gl_implementation_ozone.cc", 246 "gl_surface_ozone.cc", 247 ] 248 deps += [ 249 "//ui/ozone", 250 "//ui/ozone:ozone_base", 251 ] 252 } 253 254 if (is_android && !is_android_webview_build) { 255 deps += [ "//ui/android:ui_java" ] 256 } 257 } 258 259 action("generate_gl_bindings") { 260 visibility = [ ":*" ] # Only targets in this file can see this. 261 262 script = "generate_bindings.py" 263 264 # TODO(brettw) make this dynamic. The GYP version calls "generate_bindings.py 265 # --inputs" to get the list here. What should happen is that the script 266 # should generate a .d file, which we should declare here. That will 267 # eliminate the need bot both hardcoding the list here or calling the script 268 # during GN-time. 269 inputs = [ 270 "EGL/eglextchromium.h", 271 "GL/glextchromium.h", 272 "//third_party/mesa/src/include/GL/glext.h", 273 "//third_party/khronos/GLES2/gl2ext.h", 274 "//gpu/GLES2/gl2chromium.h", 275 "//gpu/GLES2/gl2extchromium.h", 276 "//third_party/khronos/EGL/eglext.h", 277 "//third_party/mesa/src/include/GL/wglext.h", 278 "//third_party/mesa/src/include/GL/glx.h", 279 "//third_party/mesa/src/include/GL/glxext.h", 280 ] 281 282 outputs = [ 283 "$gl_binding_output_dir/gl_bindings_autogen_egl.cc", 284 "$gl_binding_output_dir/gl_bindings_autogen_egl.h", 285 "$gl_binding_output_dir/gl_bindings_api_autogen_egl.h", 286 "$gl_binding_output_dir/gl_bindings_autogen_gl.cc", 287 "$gl_binding_output_dir/gl_bindings_autogen_gl.h", 288 "$gl_binding_output_dir/gl_bindings_api_autogen_gl.h", 289 "$gl_binding_output_dir/gl_bindings_autogen_glx.cc", 290 "$gl_binding_output_dir/gl_bindings_autogen_glx.h", 291 "$gl_binding_output_dir/gl_bindings_api_autogen_glx.h", 292 "$gl_binding_output_dir/gl_bindings_autogen_mock.cc", 293 "$gl_binding_output_dir/gl_bindings_autogen_mock.h", 294 "$gl_binding_output_dir/gl_bindings_autogen_osmesa.cc", 295 "$gl_binding_output_dir/gl_bindings_autogen_osmesa.h", 296 "$gl_binding_output_dir/gl_bindings_api_autogen_osmesa.h", 297 "$gl_binding_output_dir/gl_bindings_autogen_wgl.cc", 298 "$gl_binding_output_dir/gl_bindings_autogen_wgl.h", 299 "$gl_binding_output_dir/gl_bindings_api_autogen_wgl.h", 300 "$gl_binding_output_dir/gl_mock_autogen_gl.h", 301 ] 302 303 args = [ 304 "--header-paths=" + 305 rebase_path("//third_party/khronos", root_build_dir) + ":" + 306 rebase_path("//third_party/mesa/src/include", root_build_dir) + ":" + 307 rebase_path("//ui/gl", root_build_dir) + ":" + 308 rebase_path("//gpu", root_build_dir), 309 rebase_path(gl_binding_output_dir, root_build_dir), 310 ] 311 } 312 313 config("gl_unittest_utils_config") { 314 include_dirs = [ gl_binding_output_dir ] 315 } 316 317 source_set("gl_unittest_utils") { 318 testonly = true 319 sources = [ 320 "gl_mock.h", 321 "gl_mock.cc", 322 "$gl_binding_output_dir/gl_bindings_autogen_mock.cc", 323 "$gl_binding_output_dir/gl_bindings_autogen_mock.h", 324 "$gl_binding_output_dir/gl_mock_autogen_gl.h", 325 ] 326 327 configs += [ "//third_party/khronos:khronos_headers" ] 328 public_configs = [ ":gl_unittest_utils_config" ] 329 330 deps = [ 331 ":gl", 332 "//testing/gmock", 333 ] 334 } 335 336 if (is_android) { 337 generate_jar_jni("surface_jni_headers") { 338 jni_package = "ui/gl" 339 classes = [ "android/view/Surface.class" ] 340 } 341 342 generate_jni("gl_jni_headers") { 343 deps = [ ":surface_jni_headers" ] 344 sources = [ 345 "../android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java", 346 "../android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java", 347 ] 348 jni_package = "ui/gl" 349 } 350 } 351