blob: e5cac240f176ef1d2b7f8d844846efd3a124c323 [file] [log] [blame]
Frank Henigmandda048c2018-01-11 20:09:09 -05001#!/usr/bin/python2
Jamie Madilla8b73ed2017-11-02 09:22:29 -04002#
3# Copyright 2017 The ANGLE Project Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6#
7# run_code_reneration.py:
8# Runs ANGLE format table and other script run_code_renerationgeneration.
9
10import os, subprocess, sys
11
12# TODO(jmadill): Might be nice to have a standard way for scripts to return
13# their inputs and outputs rather than listing them here.
14generators = {
15 'ANGLE format': {
16 'inputs': [
17 'src/libANGLE/renderer/angle_format.py',
18 'src/libANGLE/renderer/angle_format_data.json',
19 'src/libANGLE/renderer/angle_format_map.json',
20 ],
21 'outputs': [
22 'src/libANGLE/renderer/Format_table_autogen.cpp',
23 'src/libANGLE/renderer/Format_ID_autogen.inl',
24 ],
25 'script': 'src/libANGLE/renderer/gen_angle_format_table.py',
26 },
Luc Ferron4ea3b452018-03-13 11:48:26 -040027 'ANGLE load functions table': {
28 'inputs': [
29 'src/libANGLE/renderer/load_functions_data.json',
30 ],
31 'outputs': [
32 'src/libANGLE/renderer/load_functions_table_autogen.cpp',
33 ],
34 'script': 'src/libANGLE/renderer/gen_load_functions_table.py',
35 },
Jamie Madilla8b73ed2017-11-02 09:22:29 -040036 'D3D11 format': {
37 'inputs': [
38 'src/libANGLE/renderer/angle_format.py',
39 'src/libANGLE/renderer/d3d/d3d11/texture_format_data.json',
40 'src/libANGLE/renderer/d3d/d3d11/texture_format_map.json',
41 ],
42 'outputs': [
43 'src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp',
44 ],
45 'script': 'src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py',
46 },
47 'DXGI format': {
48 'inputs': [
49 'src/libANGLE/renderer/angle_format.py',
50 'src/libANGLE/renderer/angle_format_map.json',
51 'src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json',
52 ],
53 'outputs': [
54 'src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp',
55 ],
56 'script': 'src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py',
57 },
58 'DXGI format support': {
59 'inputs': [
60 'src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json',
61 ],
62 'outputs': [
63 'src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp',
64 ],
65 'script': 'src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py',
66 },
67 'GL copy conversion table': {
68 'inputs': [
69 'src/libANGLE/es3_copy_conversion_formats.json',
70 ],
71 'outputs': [
72 'src/libANGLE/es3_copy_conversion_table_autogen.cpp',
73 ],
74 'script': 'src/libANGLE/gen_copy_conversion_table.py',
75 },
76 'GL entry point': {
77 'inputs': [
78 'scripts/entry_point_packed_gl_enums.json',
79 'scripts/gl.xml',
80 ],
81 'outputs': [
82 'src/libGLESv2/entry_points_gles_2_0_autogen.cpp',
83 'src/libGLESv2/entry_points_gles_2_0_autogen.h',
84 'src/libGLESv2/entry_points_gles_3_0_autogen.cpp',
85 'src/libGLESv2/entry_points_gles_3_0_autogen.h',
86 ],
87 'script': 'scripts/generate_entry_points.py',
88 },
89 'GL format map': {
90 'inputs': [
91 'src/libANGLE/es3_format_type_combinations.json',
92 'src/libANGLE/format_map_data.json',
93 ],
94 'outputs': [
95 'src/libANGLE/format_map_autogen.cpp',
96 ],
97 'script': 'src/libANGLE/gen_format_map.py',
98 },
99 'uniform type': {
100 'inputs': [],
101 'outputs': [
102 'src/common/uniform_type_info_autogen.cpp',
103 ],
104 'script': 'src/common/gen_uniform_type_table.py',
105 },
106 'OpenGL dispatch table': {
107 'inputs': [
108 'scripts/gl.xml',
109 ],
110 'outputs': [
111 'src/libANGLE/renderer/gl/DispatchTableGL_autogen.cpp',
112 'src/libANGLE/renderer/gl/DispatchTableGL_autogen.h',
113 'src/libANGLE/renderer/gl/null_functions.h',
114 'src/libANGLE/renderer/gl/null_functions.cpp',
115 ],
116 'script': 'src/libANGLE/renderer/gl/generate_gl_dispatch_table.py',
117 },
Geoff Lang8ceea812018-04-10 03:07:13 -0400118 'packed enum': {
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400119 'inputs': [
120 'src/libANGLE/packed_gl_enums.json',
Geoff Lang8ceea812018-04-10 03:07:13 -0400121 'src/libANGLE/packed_egl_enums.json',
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400122 ],
123 'outputs': [
Geoff Lang8ceea812018-04-10 03:07:13 -0400124 'src/libANGLE/PackedEGLEnums_autogen.cpp',
125 'src/libANGLE/PackedEGLEnums_autogen.h',
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400126 'src/libANGLE/PackedGLEnums_autogen.cpp',
127 'src/libANGLE/PackedGLEnums_autogen.h',
128 ],
129 'script': 'src/libANGLE/gen_packed_gl_enums.py',
130 },
Jamie Madill5ad52992017-11-14 12:43:40 -0500131 'proc table': {
132 'inputs': [
133 'src/libGLESv2/proc_table_data.json',
134 ],
135 'outputs': [
136 'src/libGLESv2/proc_table_autogen.cpp',
137 ],
138 'script': 'src/libGLESv2/gen_proc_table.py',
139 },
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400140 'Vulkan format': {
141 'inputs': [
142 'src/libANGLE/renderer/angle_format.py',
143 'src/libANGLE/renderer/angle_format_map.json',
144 'src/libANGLE/renderer/vulkan/vk_format_map.json',
145 ],
146 'outputs': [
147 'src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp',
148 ],
149 'script': 'src/libANGLE/renderer/vulkan/gen_vk_format_table.py',
150 },
Luc Ferron0aa1ffe2018-02-08 13:42:36 -0500151 'Vulkan mandatory format support table': {
152 'inputs': [
153 'src/libANGLE/renderer/angle_format.py',
154 'third_party/vulkan-validation-layers/src/scripts/vk.xml',
155 'src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json',
156 ],
157 'outputs': [
158 'src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp',
159 ],
160 'script': 'src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py',
161 },
Olli Etuaho5fec7ab2018-04-04 11:58:33 +0300162 'Emulated HLSL functions': {
163 'inputs': [
164 'src/compiler/translator/emulated_builtin_function_data_hlsl.json'
165 ],
166 'outputs': [
167 'src/compiler/translator/emulated_builtin_functions_hlsl_autogen.cpp'
168 ],
169 'script': 'src/compiler/translator/gen_emulated_builtin_function_tables.py'
170 },
Olli Etuaho140152e2018-02-08 14:46:44 +0200171 'ESSL static builtins': {
172 'inputs': [
173 'src/compiler/translator/builtin_function_declarations.txt',
Olli Etuaho391bda22018-02-23 11:43:14 +0200174 'src/compiler/translator/builtin_variables.json',
Olli Etuaho140152e2018-02-08 14:46:44 +0200175 ],
176 'outputs': [
Olli Etuahoc26214d2018-03-16 10:43:11 +0200177 'src/compiler/translator/tree_util/BuiltIn_autogen.h',
Olli Etuaho89398b62018-03-21 17:30:50 +0200178 'src/compiler/translator/builtin_symbols_hash_autogen.txt',
Olli Etuaho2bfe9f62018-03-02 16:53:29 +0200179 'src/compiler/translator/ParseContext_autogen.h',
Olli Etuaho140152e2018-02-08 14:46:44 +0200180 'src/compiler/translator/SymbolTable_autogen.cpp',
Olli Etuahob391ec42018-03-12 17:04:59 +0200181 'src/compiler/translator/SymbolTable_autogen.h',
Olli Etuaho7618eaf2018-03-07 11:25:40 +0200182 'src/tests/compiler_tests/ImmutableString_test_autogen.cpp',
Olli Etuaho140152e2018-02-08 14:46:44 +0200183 ],
184 'script': 'src/compiler/translator/gen_builtin_symbols.py',
185 },
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400186}
187
188root_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))
189any_dirty = False
190
191for name, info in sorted(generators.iteritems()):
192
193 # Set the CWD to the root ANGLE directory.
194 os.chdir(root_dir)
195
196 script = info['script']
197 dirty = False
198
199 for finput in info['inputs'] + [script]:
200 input_mtime = os.path.getmtime(finput)
201 for foutput in info['outputs']:
202 if not os.path.exists(foutput):
Jamie Madill5ad52992017-11-14 12:43:40 -0500203 print('Output ' + foutput + ' not found for ' + name + ' table')
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400204 dirty = True
205 else:
206 output_mtime = os.path.getmtime(foutput)
207 if input_mtime > output_mtime:
208 dirty = True
209
210 if dirty:
211 any_dirty = True
212
213 # Set the CWD to the script directory.
214 os.chdir(os.path.dirname(os.path.abspath(script)))
215
216 print('Running ' + name + ' code generator')
217 if subprocess.call(['python', os.path.basename(script)]) != 0:
218 sys.exit(1)
219
220if any_dirty:
221 args = []
222 if os.name == 'nt':
223 args += ['git.bat']
224 else:
225 args += ['git']
226 args += ['cl', 'format']
227 print('Calling git cl format')
Frank Henigmandda048c2018-01-11 20:09:09 -0500228 subprocess.call(args)