1# Copyright (c) 2013 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    'xmlfiles': [
8      'src/src/mapi/glapi/gen/EXT_draw_buffers2.xml',
9      'src/src/mapi/glapi/gen/NV_texture_barrier.xml',
10      'src/src/mapi/glapi/gen/NV_primitive_restart.xml',
11      'src/src/mapi/glapi/gen/ARB_base_instance.xml',
12      'src/src/mapi/glapi/gen/EXT_packed_depth_stencil.xml',
13      'src/src/mapi/glapi/gen/ARB_sync.xml',
14      'src/src/mapi/glapi/gen/ARB_draw_buffers.xml',
15      'src/src/mapi/glapi/gen/ARB_geometry_shader4.xml',
16      'src/src/mapi/glapi/gen/ARB_draw_buffers_blend.xml',
17      'src/src/mapi/glapi/gen/GL3x.xml',
18      'src/src/mapi/glapi/gen/ARB_blend_func_extended.xml',
19      'src/src/mapi/glapi/gen/EXT_gpu_shader4.xml',
20      'src/src/mapi/glapi/gen/ARB_robustness.xml',
21      'src/src/mapi/glapi/gen/ARB_ES2_compatibility.xml',
22      'src/src/mapi/glapi/gen/ARB_map_buffer_range.xml',
23      'src/src/mapi/glapi/gen/OES_single_precision.xml',
24      'src/src/mapi/glapi/gen/ARB_debug_output.xml',
25      'src/src/mapi/glapi/gen/ARB_draw_instanced.xml',
26      'src/src/mapi/glapi/gen/ARB_copy_buffer.xml',
27      'src/src/mapi/glapi/gen/glX_API.xml',
28      'src/src/mapi/glapi/gen/ARB_framebuffer_object.xml',
29      'src/src/mapi/glapi/gen/OES_EGL_image.xml',
30      'src/src/mapi/glapi/gen/gl_and_es_API.xml',
31      'src/src/mapi/glapi/gen/ARB_color_buffer_float.xml',
32      'src/src/mapi/glapi/gen/ARB_instanced_arrays.xml',
33      'src/src/mapi/glapi/gen/APPLE_object_purgeable.xml',
34      'src/src/mapi/glapi/gen/APPLE_vertex_array_object.xml',
35      'src/src/mapi/glapi/gen/ARB_texture_rgb10_a2ui.xml',
36      'src/src/mapi/glapi/gen/ARB_sampler_objects.xml',
37      'src/src/mapi/glapi/gen/OES_fixed_point.xml',
38      'src/src/mapi/glapi/gen/EXT_provoking_vertex.xml',
39      'src/src/mapi/glapi/gen/ARB_texture_float.xml',
40      'src/src/mapi/glapi/gen/EXT_texture_integer.xml',
41      'src/src/mapi/glapi/gen/es_EXT.xml',
42      'src/src/mapi/glapi/gen/gl_and_glX_API.xml',
43      'src/src/mapi/glapi/gen/EXT_transform_feedback.xml',
44      'src/src/mapi/glapi/gen/ARB_texture_buffer_object.xml',
45      'src/src/mapi/glapi/gen/EXT_framebuffer_object.xml',
46      'src/src/mapi/glapi/gen/ARB_uniform_buffer_object.xml',
47      'src/src/mapi/glapi/gen/ARB_texture_rg.xml',
48      'src/src/mapi/glapi/gen/ARB_vertex_type_2_10_10_10_rev.xml',
49      'src/src/mapi/glapi/gen/ARB_seamless_cube_map.xml',
50      'src/src/mapi/glapi/gen/EXT_texture_array.xml',
51      'src/src/mapi/glapi/gen/ARB_vertex_array_object.xml',
52      'src/src/mapi/glapi/gen/ARB_invalidate_subdata.xml',
53      'src/src/mapi/glapi/gen/ARB_draw_elements_base_vertex.xml',
54      'src/src/mapi/glapi/gen/AMD_draw_buffers_blend.xml',
55      'src/src/mapi/glapi/gen/ARB_get_program_binary.xml',
56      'src/src/mapi/glapi/gen/gl_API.xml',
57      'src/src/mapi/glapi/gen/ARB_depth_clamp.xml',
58      'src/src/mapi/glapi/gen/ARB_texture_storage.xml',
59      'src/src/mapi/glapi/gen/ARB_depth_buffer_float.xml',
60      'src/src/mapi/glapi/gen/EXT_separate_shader_objects.xml',
61      'src/src/mapi/glapi/gen/ARB_texture_compression_rgtc.xml',
62      'src/src/mapi/glapi/gen/NV_conditional_render.xml',
63      'src/src/mesa/main/APIspec.xml',
64    ],
65  },
66
67  'targets': [
68    # The targets below generate all of the sources Mesa generates
69    # during its build process. Mesa's XML processors like gl_XML.py
70    # rely heavily on Python's libxml2 bindings. Specifically, the
71    # processors require validation against the DTD for default values
72    # for attributes, and none of Python's built-in XML parsers support
73    # validation. It's infeasible to use any third-party XML parser for
74    # Python which relies on native code due to the large number of
75    # host platforms Chromium must build on, and pure Python validators
76    # are in short supply.
77
78    # The main target is generate_mesa_sources, which must be run
79    # manually on a host platform with libxml2's Python bindings
80    # installed. (Most Linux distributions should fulfill this
81    # requirement.)
82    {
83      'target_name': 'mesa_builtin_compiler',
84      'type': 'executable',
85      'include_dirs': [
86        'src/src/gallium/auxiliary',
87        'src/src/gallium/include',
88        'src/src/glsl',
89        'src/src/glsl/glcpp',
90        'src/src/mapi',
91        'src/src/mapi/glapi',
92        'src/src/mesa',
93        'src/src/mesa/main',
94        '<(generated_src_dir)/mesa/',
95        '<(generated_src_dir)/mesa/main',
96        '<(generated_src_dir)/mesa/program',
97        '<(generated_src_dir)/mesa/glapi',
98      ],
99      'dependencies': [
100        'generate_main_mesa_sources',
101        'mesa_headers',
102        'mesa_libglslcommon', # implicit dependency on generate_main_mesa_sources
103      ],
104      'variables': {
105        'clang_warning_flags': [
106          '-Wno-tautological-constant-out-of-range-compare',
107        ],
108        'clang_warning_flags_unset': [
109          # Don't warn about string->bool used in asserts.
110          '-Wstring-conversion',
111        ],
112      },
113      'sources': [
114        'src/src/mesa/program/hash_table.c',
115        'src/src/mesa/program/symbol_table.c',
116        'src/src/glsl/standalone_scaffolding.cpp',
117        'src/src/glsl/main.cpp',
118        'src/src/glsl/builtin_stubs.cpp',
119      ],
120    },
121    {
122      'target_name': 'generate_mesa_sources',
123      'type': 'none',
124      'dependencies': [
125        'mesa_builtin_compiler',
126      ],
127      'actions': [
128        {
129          'action_name': 'generateBuiltins',
130          'inputs': [
131            '<(PRODUCT_DIR)/mesa_builtin_compiler',
132            'src/src/glsl/builtins/tools/generate_builtins.py'
133          ],
134          'outputs': [
135            '<(generated_src_dir)/mesa/builtin_function.cpp',
136          ],
137          'action': [
138            'python',
139            'redirectoutput.py',
140            '<(generated_src_dir)/mesa/builtin_function.cpp',
141            'src/src/glsl/builtins/tools/generate_builtins.py',
142            '<(PRODUCT_DIR)/mesa_builtin_compiler',
143          ],
144          'message': "Generating Mesa builtins ...",
145        }
146      ],
147    },
148    {
149      'target_name': 'generate_main_mesa_sources',
150      'type': 'none',
151      'actions': [
152        {
153          'action_name': 'glsl_parser_cc',
154          'inputs': [
155            'src/src/glsl/glsl_parser.yy',
156          ],
157          'outputs': [
158            '<(generated_src_dir)/mesa/glsl_parser.cc',
159            '<(generated_src_dir)/mesa/glsl_parser.h',
160          ],
161          'action': [
162            'bison',
163            '-y',
164            '-v',
165            '-o',
166            '<(generated_src_dir)/mesa/glsl_parser.cc',
167            '-p',
168            '_mesa_glsl_',
169            '--defines=<(generated_src_dir)/mesa/glsl_parser.h',
170            'src/src/glsl/glsl_parser.yy'
171          ],
172          'message': "Generating glsl parser ...",
173        },
174        {
175          'action_name': 'lex_yy_c',
176          'inputs': [
177            'src/src/mesa/program/program_lexer.l',
178          ],
179          'outputs': [
180            '<(generated_src_dir)/mesa/lex.yy.c',
181          ],
182          'action': [
183            'flex',
184            '--never-interactive',
185            '--outfile=<(generated_src_dir)/mesa/lex.yy.c',
186            'src/src/mesa/program/program_lexer.l'
187          ],
188          'message': "Generating lex.yy.c ...",
189        },
190        {
191          'action_name': 'glsl_lexer_cc',
192          'inputs': [
193            'src/src/glsl/glsl_lexer.ll',
194          ],
195          'outputs': [
196            '<(generated_src_dir)/mesa/glsl_lexer.cc',
197          ],
198          'action': [
199            'flex',
200            '--nounistd',
201            '--outfile=<(generated_src_dir)/mesa/glsl_lexer.cc',
202            'src/src/glsl/glsl_lexer.ll',
203          ],
204          'message': "Generating glsl lexer ...",
205        },
206        {
207          'action_name': 'glcpp_lex_c',
208          'inputs': [
209            'src/src/glsl/glcpp/glcpp-lex.l',
210          ],
211          'outputs': [
212            '<(generated_src_dir)/mesa/glcpp-lex.c',
213          ],
214          'action': [
215            'flex',
216            '--nounistd',
217            '--outfile=<(generated_src_dir)/mesa/glcpp-lex.c',
218            'src/src/glsl/glcpp/glcpp-lex.l',
219          ],
220          'message': "Generating glcpp-lex.c ...",
221        },
222        {
223          'action_name': 'glcpp_parse_c',
224          'inputs': [
225            'src/src/glsl/glcpp/glcpp-parse.y',
226          ],
227          'outputs': [
228            '<(generated_src_dir)/mesa/glcpp-parse.c',
229            '<(generated_src_dir)/mesa/glcpp-parse.h',
230          ],
231          'action': [
232            'bison',
233            '-y',
234            '-v',
235            '-d',
236            '-p',
237            'glcpp_parser_',
238            '-o',
239            '<(generated_src_dir)/mesa/glcpp-parse.c',
240            '--defines=<(generated_src_dir)/mesa/glcpp-parse.h',
241            'src/src/glsl/glcpp/glcpp-parse.y',
242          ],
243          'message': "Generating glcpp parser ...",
244        },
245        {
246          'action_name': 'program_parse_tab_c',
247          'inputs': [
248            'src/src/mesa/program/program_parse.y',
249          ],
250          'outputs': [
251            '<(generated_src_dir)/mesa/program/program_parse.tab.c',
252          ],
253          'action': [
254            'bison',
255            '-y',
256            '-v',
257            '-d',
258            '-p',
259            '_mesa_program_',
260            '--output=<(generated_src_dir)/mesa/program/program_parse.tab.c',
261            'src/src/mesa/program/program_parse.y',
262          ],
263          'message': "Generating program_parse.y ...",
264        },
265        {
266          'action_name': 'glapi_mapi_tmp_h',
267          'inputs': [
268            '<@(xmlfiles)',
269            'redirectoutput.py',
270            'src/src/mapi/mapi/mapi_abi.py',
271          ],
272          'outputs': [
273            '<(generated_src_dir)/mesa/glapi_mapi_tmp.h',
274          ],
275          'action': [
276            'python',
277            'redirectoutput.py',
278            '<(generated_src_dir)/mesa/glapi_mapi_tmp.h',
279            'src/src/mapi/mapi/mapi_abi.py',
280            '--printer',
281            'glapi',
282            '--mode',
283            'lib',
284            'src/src/mapi/glapi/gen/gl_and_es_API.xml',
285          ],
286          'message': "Generating glapi_mapi_tmp.h ...",
287        },
288        {
289          'action_name': 'glapi_mapi_tmp_shared_h',
290          'inputs': [
291            '<@(xmlfiles)',
292            'redirectoutput.py',
293            'src/src/mapi/mapi/mapi_abi.py',
294          ],
295          'outputs': [
296            '<(generated_src_dir)/mesa/glapi_mapi_tmp_shared.h',
297          ],
298          'action': [
299            'python',
300            'redirectoutput.py',
301            '<(generated_src_dir)/mesa/glapi_mapi_tmp_shared.h',
302            'src/src/mapi/mapi/mapi_abi.py',
303            '--printer',
304            'shared-glapi',
305            '--mode',
306            'lib',
307            'src/src/mapi/glapi/gen/gl_and_es_API.xml',
308          ],
309          'message': "Generating glapi_mapi_tmp_shared.h ...",
310        },
311        {
312          'action_name': 'glprocs_h',
313          'inputs': [
314            '<@(xmlfiles)',
315            'redirectoutput.py',
316            'src/src/mapi/glapi/gen/gl_procs.py',
317          ],
318          'outputs': [
319            '<(generated_src_dir)/mesa/glprocs.h',
320          ],
321          'action': [
322            'python',
323            'redirectoutput.py',
324            '<(generated_src_dir)/mesa/glprocs.h',
325            'src/src/mapi/glapi/gen/gl_procs.py',
326            '-f',
327            'src/src/mapi/glapi/gen/gl_API.xml',
328          ],
329          'message': "Generating glprocs.h ...",
330        },
331        {
332          'action_name': 'glapitemp_h',
333          'inputs': [
334            '<@(xmlfiles)',
335            'redirectoutput.py',
336            'src/src/mapi/glapi/gen/gl_apitemp.py',
337          ],
338          'outputs': [
339            '<(generated_src_dir)/mesa/glapi/glapitemp.h',
340          ],
341          'action': [
342            'python',
343            'redirectoutput.py',
344            '<(generated_src_dir)/mesa/glapi/glapitemp.h',
345            'src/src/mapi/glapi/gen/gl_apitemp.py',
346            '-f',
347            'src/src/mapi/glapi/gen/gl_API.xml',
348          ],
349          'message': "Generating glapitemp.h ...",
350        },
351        {
352          'action_name': 'glapitable_h',
353          'inputs': [
354            '<@(xmlfiles)',
355            'redirectoutput.py',
356            'src/src/mapi/glapi/gen/gl_table.py',
357          ],
358          'outputs': [
359            '<(generated_src_dir)/mesa/glapi/glapitable.h',
360          ],
361          'action': [
362            'python',
363            'redirectoutput.py',
364            '<(generated_src_dir)/mesa/glapi/glapitable.h',
365            'src/src/mapi/glapi/gen/gl_table.py',
366            '-f',
367            'src/src/mapi/glapi/gen/gl_API.xml',
368          ],
369          'message': "Generating glapitable.h ...",
370        },
371        {
372          'action_name': 'glapi_gentable_c',
373          'inputs': [
374            '<@(xmlfiles)',
375            'redirectoutput.py',
376            'src/src/mapi/glapi/gen/gl_gentable.py',
377          ],
378          'outputs': [
379            '<(generated_src_dir)/mesa/glapi_gentable.c',
380          ],
381          'action': [
382            'python',
383            'redirectoutput.py',
384            '<(generated_src_dir)/mesa/glapi_gentable.c',
385            'src/src/mapi/glapi/gen/gl_gentable.py',
386            '-f',
387            'src/src/mapi/glapi/gen/gl_API.xml',
388          ],
389          'message': "Generating glapi_gentable.c ...",
390        },
391        {
392          'action_name': 'glapi_x86_64_S',
393          'inputs': [
394            '<@(xmlfiles)',
395            'redirectoutput.py',
396            'src/src/mapi/glapi/gen/gl_x86-64_asm.py',
397          ],
398          'outputs': [
399            '<(generated_src_dir)/mesa/glapi_x86-64.S',
400          ],
401          'action': [
402            'python',
403            'redirectoutput.py',
404            '<(generated_src_dir)/mesa/glapi_x86-64.S',
405            'src/src/mapi/glapi/gen/gl_x86-64_asm.py',
406            '-f',
407            'src/src/mapi/glapi/gen/gl_API.xml',
408          ],
409          'message': "Generating glapi_x86-64.S ...",
410        },
411        {
412          'action_name': 'enums_c',
413          'inputs': [
414            '<@(xmlfiles)',
415            'redirectoutput.py',
416            'src/src/mapi/glapi/gen/gl_enums.py',
417          ],
418          'outputs': [
419            '<(generated_src_dir)/mesa/enums.c',
420          ],
421          'action': [
422            'python',
423            'redirectoutput.py',
424            '<(generated_src_dir)/mesa/enums.c',
425            'src/src/mapi/glapi/gen/gl_enums.py',
426            '-f',
427            'src/src/mapi/glapi/gen/gl_and_es_API.xml',
428          ],
429          'message': "Generating enums.c ...",
430        },
431        {
432          'action_name': 'dispatch_h',
433          'inputs': [
434            '<@(xmlfiles)',
435            'redirectoutput.py',
436            'src/src/mapi/glapi/gen/gl_table.py',
437          ],
438          'outputs': [
439            '<(generated_src_dir)/mesa/main/dispatch.h',
440          ],
441          'action': [
442            'python',
443            'redirectoutput.py',
444            '<(generated_src_dir)/mesa/main/dispatch.h',
445            'src/src/mapi/glapi/gen/gl_table.py',
446            '-f',
447            'src/src/mapi/glapi/gen/gl_API.xml',
448            '-m',
449            'remap_table',
450          ],
451          'message': "Generating dispatch.h ...",
452        },
453        {
454          'action_name': 'remap_helper_h',
455          'inputs': [
456            '<@(xmlfiles)',
457            'redirectoutput.py',
458            'src/src/mapi/glapi/gen/remap_helper.py',
459          ],
460          'outputs': [
461            '<(generated_src_dir)/mesa/main/remap_helper.h',
462          ],
463          'action': [
464            'python',
465            'redirectoutput.py',
466            '<(generated_src_dir)/mesa/main/remap_helper.h',
467            'src/src/mapi/glapi/gen/remap_helper.py',
468            '-f',
469            'src/src/mapi/glapi/gen/gl_API.xml',
470          ],
471          'message': "Generating remap_helper.h ...",
472        },
473        {
474          'action_name': 'indirect_c',
475          'inputs': [
476            '<@(xmlfiles)',
477            'src/src/mapi/glapi/gen/glX_proto_send.py',
478            'redirectoutput.py',
479          ],
480          'outputs': [
481            '<(generated_src_dir)/mesa/indirect.c',
482          ],
483          'action': [
484            'python',
485            'redirectoutput.py',
486            '<(generated_src_dir)/mesa/indirect.c',
487            'src/src/mapi/glapi/gen/glX_proto_send.py',
488            '-f',
489            'src/src/mapi/glapi/gen/gl_API.xml',
490            '-m',
491            'proto',
492          ],
493          'message': "Generating indirect.c ...",
494        },
495        {
496          'action_name': 'indirect_h',
497          'inputs': [
498            '<@(xmlfiles)',
499            'redirectoutput.py',
500            'src/src/mapi/glapi/gen/glX_proto_send.py',
501          ],
502          'outputs': [
503            '<(generated_src_dir)/mesa/indirect.h',
504          ],
505          'action': [
506            'python',
507            'redirectoutput.py',
508            '<(generated_src_dir)/mesa/indirect.h',
509            'src/src/mapi/glapi/gen/glX_proto_send.py',
510            '-f',
511            'src/src/mapi/glapi/gen/gl_API.xml',
512            '-m',
513            'init_h',
514          ],
515          'message': "Generating indirect.h ...",
516        },
517        {
518          'action_name': 'indirect_init_c',
519          'inputs': [
520            '<@(xmlfiles)',
521            'redirectoutput.py',
522            'src/src/mapi/glapi/gen/glX_proto_send.py',
523          ],
524          'outputs': [
525            '<(generated_src_dir)/mesa/indirect_init.c',
526          ],
527          'action': [
528            'python',
529            'redirectoutput.py',
530            '<(generated_src_dir)/mesa/indirect_init.c',
531            'src/src/mapi/glapi/gen/glX_proto_send.py',
532            '-f',
533            'src/src/mapi/glapi/gen/gl_API.xml',
534            '-m',
535            'init_c',
536          ],
537          'message': "Generating indirect_init.c ...",
538        },
539        {
540          'action_name': 'indirect_size_h',
541          'inputs': [
542            '<@(xmlfiles)',
543            'redirectoutput.py',
544            'src/src/mapi/glapi/gen/glX_proto_size.py',
545          ],
546          'outputs': [
547            '<(generated_src_dir)/mesa/indirect_size.h',
548          ],
549          'action': [
550            'python',
551            'redirectoutput.py',
552            '<(generated_src_dir)/mesa/indirect_size.h',
553            'src/src/mapi/glapi/gen/glX_proto_size.py',
554            '-f',
555            'src/src/mapi/glapi/gen/gl_API.xml',
556            '-m',
557            'size_h',
558            '--only-set',
559            '-h',
560            '_INDIRECT_SIZE_H_',
561          ],
562          'message': "Generating indirect_size.h ...",
563        },
564        {
565          'action_name': 'indirect_size_c',
566          'inputs': [
567            '<@(xmlfiles)',
568            'redirectoutput.py',
569            'src/src/mapi/glapi/gen/glX_proto_size.py',
570          ],
571          'outputs': [
572            '<(generated_src_dir)/mesa/indirect_size.c',
573          ],
574          'action': [
575            'python',
576            'redirectoutput.py',
577            '<(generated_src_dir)/mesa/indirect_size.c',
578            'src/src/mapi/glapi/gen/glX_proto_size.py',
579            '-f',
580            'src/src/mapi/glapi/gen/gl_API.xml',
581            '-m',
582            'size_c',
583            '--only-set',
584          ],
585          'message': "Generating indirect_size.c ...",
586        },
587        {
588          'action_name': 'api_exec_es1_c',
589          'inputs': [
590            '<@(xmlfiles)',
591            'redirectoutput.py',
592            'src/src/mesa/main/es_generator.py',
593          ],
594          'outputs': [
595            '<(generated_src_dir)/mesa/api_exec_es1.c',
596          ],
597          'action': [
598            'python',
599            'redirectoutput.py',
600            '<(generated_src_dir)/mesa/api_exec_es1.c',
601            'src/src/mesa/main/es_generator.py',
602            '-S',
603            'src/src/mesa/main/APIspec.xml',
604            '-V',
605            'GLES1.1',
606          ],
607          'message': "Generating api_exec_es1.c ...",
608        },
609        {
610          'action_name': 'git_sha1_h',
611          'inputs': [
612          ],
613          'outputs': [
614            '<(generated_src_dir)/mesa/git_sha1.h',
615          ],
616          'action': [
617            'python',
618            'generate_git_sha1.py',
619            '<(generated_src_dir)/mesa/git_sha1.h',
620          ],
621          'message': "Generating Mesa sources ...",
622        },
623      ],
624    },
625  ],
626}
627