1# Copyright (c) 2012 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{
6  'variables': {
7    'chromium_code': 1,
8  },
9
10  'targets': [
11    {
12      'target_name': 'gl',
13      'type': '<(component)',
14      'product_name': 'gl_wrapper',  # Avoid colliding with OS X's libGL.dylib
15      'dependencies': [
16        '<(DEPTH)/base/base.gyp:base',
17        '<(DEPTH)/base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
18        '<(DEPTH)/gpu/command_buffer/command_buffer.gyp:gles2_utils',
19        '<(DEPTH)/skia/skia.gyp:skia',
20        '<(DEPTH)/third_party/mesa/mesa.gyp:mesa_headers',
21        '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
22        '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
23      ],
24      'variables': {
25        'gl_binding_output_dir': '<(SHARED_INTERMEDIATE_DIR)/ui/gl',
26      },
27      'defines': [
28        'GL_IMPLEMENTATION',
29      ],
30      'include_dirs': [
31        '<(DEPTH)/third_party/swiftshader/include',
32        '<(DEPTH)/third_party/khronos',
33        '<(gl_binding_output_dir)',
34      ],
35      'direct_dependent_settings': {
36        'include_dirs': [
37          '<(gl_binding_output_dir)',
38        ],
39      },
40      'export_dependent_settings': [
41        '<(DEPTH)/third_party/mesa/mesa.gyp:mesa_headers',
42      ],
43      'sources': [
44        'android/gl_jni_registrar.cc',
45        'android/gl_jni_registrar.h',
46        'android/scoped_java_surface.cc',
47        'android/scoped_java_surface.h',
48        'android/surface_texture.cc',
49        'android/surface_texture.h',
50        'android/surface_texture_listener.cc',
51        'android/surface_texture_listener.h',
52        'android/surface_texture_tracker.cc',
53        'android/surface_texture_tracker.h',
54        'gl_bindings.h',
55        'gl_bindings_skia_in_process.cc',
56        'gl_bindings_skia_in_process.h',
57        'gl_context.cc',
58        'gl_context.h',
59        'gl_context_android.cc',
60        'gl_context_mac.mm',
61        'gl_context_ozone.cc',
62        'gl_context_osmesa.cc',
63        'gl_context_osmesa.h',
64        'gl_context_stub.cc',
65        'gl_context_stub.h',
66        'gl_context_stub_with_extensions.cc',
67        'gl_context_stub_with_extensions.h',
68        'gl_context_win.cc',
69        'gl_context_x11.cc',
70        'gl_export.h',
71        'gl_fence.cc',
72        'gl_fence.h',
73        'gl_fence_arb.cc',
74        'gl_fence_arb.h',
75        'gl_fence_nv.cc',
76        'gl_fence_nv.h',
77        'gl_gl_api_implementation.cc',
78        'gl_gl_api_implementation.h',
79        'gl_image.cc',
80        'gl_image.h',
81        'gl_image_memory.cc',
82        'gl_image_memory.h',
83        'gl_image_ref_counted_memory.cc',
84        'gl_image_ref_counted_memory.h',
85        'gl_image_shared_memory.cc',
86        'gl_image_shared_memory.h',
87        'gl_image_stub.cc',
88        'gl_image_stub.h',
89        'gl_implementation.cc',
90        'gl_implementation.h',
91        'gl_implementation_android.cc',
92        'gl_implementation_ozone.cc',
93        'gl_implementation_mac.cc',
94        'gl_implementation_win.cc',
95        'gl_implementation_x11.cc',
96        'gl_osmesa_api_implementation.cc',
97        'gl_osmesa_api_implementation.h',
98        'gl_share_group.cc',
99        'gl_share_group.h',
100        'gl_state_restorer.cc',
101        'gl_state_restorer.h',
102        'gl_surface.cc',
103        'gl_surface.h',
104        'gl_surface_android.cc',
105        'gl_surface_mac.cc',
106        'gl_surface_stub.cc',
107        'gl_surface_stub.h',
108        'gl_surface_win.cc',
109        'gl_surface_x11.cc',
110        'gl_surface_osmesa.cc',
111        'gl_surface_osmesa.h',
112        'gl_surface_ozone.cc',
113        'gl_switches.cc',
114        'gl_switches.h',
115        'gl_version_info.cc',
116        'gl_version_info.h',
117        'gpu_switching_manager.cc',
118        'gpu_switching_manager.h',
119        'scoped_binders.cc',
120        'scoped_binders.h',
121        'scoped_make_current.cc',
122        'scoped_make_current.h',
123        'sync_control_vsync_provider.cc',
124        'sync_control_vsync_provider.h',
125        '<(gl_binding_output_dir)/gl_bindings_autogen_gl.cc',
126        '<(gl_binding_output_dir)/gl_bindings_autogen_gl.h',
127        '<(gl_binding_output_dir)/gl_bindings_autogen_osmesa.cc',
128        '<(gl_binding_output_dir)/gl_bindings_autogen_osmesa.h',
129      ],
130      # hard_dependency is necessary for this target because it has actions
131      # that generate header files included by dependent targets. The header
132      # files must be generated before the dependents are compiled. The usual
133      # semantics are to allow the two targets to build concurrently.
134      'hard_dependency': 1,
135      'actions': [
136        {
137          'action_name': 'generate_gl_bindings',
138          'variables': {
139            'generator_path': 'generate_bindings.py',
140            # Prefer khronos EGL/GLES headers by listing that path first.
141            'header_paths': '../../third_party/khronos:../../third_party/mesa/src/include:.:../../gpu',
142          },
143          'inputs': [
144            '<(generator_path)',
145            '<!@(python <(generator_path) --header-paths=<(header_paths) --inputs)',
146          ],
147          'outputs': [
148            '<(gl_binding_output_dir)/gl_bindings_autogen_egl.cc',
149            '<(gl_binding_output_dir)/gl_bindings_autogen_egl.h',
150            '<(gl_binding_output_dir)/gl_bindings_api_autogen_egl.h',
151            '<(gl_binding_output_dir)/gl_bindings_autogen_gl.cc',
152            '<(gl_binding_output_dir)/gl_bindings_autogen_gl.h',
153            '<(gl_binding_output_dir)/gl_bindings_api_autogen_gl.h',
154            '<(gl_binding_output_dir)/gl_bindings_autogen_glx.cc',
155            '<(gl_binding_output_dir)/gl_bindings_autogen_glx.h',
156            '<(gl_binding_output_dir)/gl_bindings_api_autogen_glx.h',
157            '<(gl_binding_output_dir)/gl_bindings_autogen_mock.cc',
158            '<(gl_binding_output_dir)/gl_bindings_autogen_mock.h',
159            '<(gl_binding_output_dir)/gl_bindings_autogen_osmesa.cc',
160            '<(gl_binding_output_dir)/gl_bindings_autogen_osmesa.h',
161            '<(gl_binding_output_dir)/gl_bindings_api_autogen_osmesa.h',
162            '<(gl_binding_output_dir)/gl_bindings_autogen_wgl.cc',
163            '<(gl_binding_output_dir)/gl_bindings_autogen_wgl.h',
164            '<(gl_binding_output_dir)/gl_bindings_api_autogen_wgl.h',
165            '<(gl_binding_output_dir)/gl_mock_autogen_gl.h',
166          ],
167          'action': [
168            'python',
169            '<(generator_path)',
170            '--header-paths=<(header_paths)',
171            '<(gl_binding_output_dir)',
172          ],
173        },
174      ],
175      'conditions': [
176        ['OS in ("win", "android", "linux")', {
177          'sources': [
178            'egl_util.cc',
179            'egl_util.h',
180            'gl_context_egl.cc',
181            'gl_context_egl.h',
182            'gl_fence_egl.cc',
183            'gl_fence_egl.h',
184            'gl_image_egl.cc',
185            'gl_image_egl.h',
186            'gl_surface_egl.cc',
187            'gl_surface_egl.h',
188            'gl_egl_api_implementation.cc',
189            'gl_egl_api_implementation.h',
190            '<(gl_binding_output_dir)/gl_bindings_autogen_egl.cc',
191            '<(gl_binding_output_dir)/gl_bindings_autogen_egl.h',
192          ],
193          'include_dirs': [
194            '<(DEPTH)/third_party/khronos',
195        ],
196        }],
197        ['OS in ("android", "linux")', {
198          'sources': [
199            'gl_implementation_osmesa.cc',
200            'gl_implementation_osmesa.h',
201          ],
202        }],
203        ['use_x11 == 1', {
204          'sources': [
205            'gl_context_glx.cc',
206            'gl_context_glx.h',
207            'gl_glx_api_implementation.cc',
208            'gl_glx_api_implementation.h',
209            'gl_image_glx.cc',
210            'gl_image_glx.h',
211            'gl_surface_glx.cc',
212            'gl_surface_glx.h',
213            'gl_egl_api_implementation.cc',
214            'gl_egl_api_implementation.h',
215            '<(gl_binding_output_dir)/gl_bindings_autogen_glx.cc',
216            '<(gl_binding_output_dir)/gl_bindings_autogen_glx.h',
217          ],
218          'all_dependent_settings': {
219            'defines': [
220              'GL_GLEXT_PROTOTYPES',
221            ],
222          },
223          'dependencies': [
224            '<(DEPTH)/build/linux/system.gyp:x11',
225            '<(DEPTH)/build/linux/system.gyp:xcomposite',
226            '<(DEPTH)/build/linux/system.gyp:xext',
227            '<(DEPTH)/ui/events/platform/events_platform.gyp:events_platform',
228            '<(DEPTH)/ui/gfx/x/gfx_x11.gyp:gfx_x11',
229          ],
230        }],
231        ['OS=="win"', {
232          'sources': [
233            'gl_context_wgl.cc',
234            'gl_context_wgl.h',
235            'gl_egl_api_implementation.cc',
236            'gl_egl_api_implementation.h',
237            'gl_surface_wgl.cc',
238            'gl_surface_wgl.h',
239            'gl_wgl_api_implementation.cc',
240            'gl_wgl_api_implementation.h',
241            '<(gl_binding_output_dir)/gl_bindings_autogen_wgl.cc',
242            '<(gl_binding_output_dir)/gl_bindings_autogen_wgl.h',
243          ],
244          'msvs_settings': {
245            'VCLinkerTool': {
246              'DelayLoadDLLs': [
247                'dwmapi.dll',
248              ],
249              'AdditionalDependencies': [
250                'dwmapi.lib',
251              ],
252            },
253          },
254          'link_settings': {
255            'libraries': [
256              '-ldwmapi.lib',
257            ],
258          },
259        }],
260        ['OS=="mac"', {
261          'sources': [
262            'gl_context_cgl.cc',
263            'gl_context_cgl.h',
264            'gl_image_io_surface.cc',
265            'gl_image_io_surface.h',
266            'scoped_cgl.cc',
267            'scoped_cgl.h',
268          ],
269          'link_settings': {
270            'libraries': [
271              '$(SDKROOT)/System/Library/Frameworks/IOSurface.framework',
272              '$(SDKROOT)/System/Library/Frameworks/OpenGL.framework',
273            ],
274          },
275        }],
276        ['OS=="android"', {
277          'dependencies': [
278            'gl_jni_headers',
279          ],
280          'sources': [
281            'gl_image_android_native_buffer.cc',
282            'gl_image_android_native_buffer.h',
283            'gl_image_surface_texture.cc',
284            'gl_image_surface_texture.h',
285          ],
286          'link_settings': {
287            'libraries': [
288              '-landroid',
289            ],
290          },
291          'sources!': [
292            'system_monitor_posix.cc',
293          ],
294          'defines': [
295            'GL_GLEXT_PROTOTYPES',
296            'EGL_EGLEXT_PROTOTYPES',
297          ],
298        }],
299        ['OS!="android"', {
300          'sources/': [ ['exclude', '^android/'] ],
301        }],
302        ['use_ozone==1', {
303          'dependencies': [
304            '../ozone/ozone.gyp:ozone',
305            '../ozone/ozone.gyp:ozone_base',
306          ],
307        }],
308        ['OS=="android" and android_webview_build==0', {
309          'dependencies': [
310            '../android/ui_android.gyp:ui_java',
311          ],
312        }],
313      ],
314    },
315    {
316      'target_name': 'gl_unittest_utils',
317      'type': 'static_library',
318      'variables': {
319        'gl_binding_output_dir': '<(SHARED_INTERMEDIATE_DIR)/ui/gl',
320      },
321      'dependencies': [
322        '../../testing/gmock.gyp:gmock',
323        '../../third_party/khronos/khronos.gyp:khronos_headers',
324        'gl',
325      ],
326      'include_dirs': [
327        '<(gl_binding_output_dir)',
328        '../..',
329      ],
330      'direct_dependent_settings': {
331        'include_dirs': [
332          '<(gl_binding_output_dir)',
333        ],
334      },
335      'sources': [
336        'gl_mock.h',
337        'gl_mock.cc',
338        '<(gl_binding_output_dir)/gl_bindings_autogen_mock.cc',
339        '<(gl_binding_output_dir)/gl_bindings_autogen_mock.h',
340        '<(gl_binding_output_dir)/gl_mock_autogen_gl.h',
341      ],
342    },
343  ],
344  'conditions': [
345    ['OS=="android"' , {
346      'targets': [
347        {
348          'target_name': 'surface_jni_headers',
349          'type': 'none',
350          'variables': {
351            'jni_gen_package': 'ui/gl',
352            'input_java_class': 'android/view/Surface.class',
353          },
354          'includes': [ '../../build/jar_file_jni_generator.gypi' ],
355        },
356        {
357          'target_name': 'gl_jni_headers',
358          'type': 'none',
359          'dependencies': [
360            'surface_jni_headers',
361          ],
362          'sources': [
363            '../android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java',
364            '../android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java',
365          ],
366          'variables': {
367            'jni_gen_package': 'ui/gl',
368          },
369          'includes': [ '../../build/jni_generator.gypi' ],
370        },
371      ],
372    }],
373  ],
374}
375