blob: 2ea66ce9b3fa66ecb6ea2fe1c2b482711ca41455 [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 },
27 'D3D11 format': {
28 'inputs': [
29 'src/libANGLE/renderer/angle_format.py',
30 'src/libANGLE/renderer/d3d/d3d11/texture_format_data.json',
31 'src/libANGLE/renderer/d3d/d3d11/texture_format_map.json',
32 ],
33 'outputs': [
34 'src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp',
35 ],
36 'script': 'src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py',
37 },
38 'DXGI format': {
39 'inputs': [
40 'src/libANGLE/renderer/angle_format.py',
41 'src/libANGLE/renderer/angle_format_map.json',
42 'src/libANGLE/renderer/d3d/d3d11/dxgi_format_data.json',
43 ],
44 'outputs': [
45 'src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp',
46 ],
47 'script': 'src/libANGLE/renderer/d3d/d3d11/gen_dxgi_format_table.py',
48 },
49 'DXGI format support': {
50 'inputs': [
51 'src/libANGLE/renderer/d3d/d3d11/dxgi_support_data.json',
52 ],
53 'outputs': [
54 'src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.cpp',
55 ],
56 'script': 'src/libANGLE/renderer/d3d/d3d11/gen_dxgi_support_tables.py',
57 },
58 'GL copy conversion table': {
59 'inputs': [
60 'src/libANGLE/es3_copy_conversion_formats.json',
61 ],
62 'outputs': [
63 'src/libANGLE/es3_copy_conversion_table_autogen.cpp',
64 ],
65 'script': 'src/libANGLE/gen_copy_conversion_table.py',
66 },
67 'GL entry point': {
68 'inputs': [
69 'scripts/entry_point_packed_gl_enums.json',
70 'scripts/gl.xml',
71 ],
72 'outputs': [
73 'src/libGLESv2/entry_points_gles_2_0_autogen.cpp',
74 'src/libGLESv2/entry_points_gles_2_0_autogen.h',
75 'src/libGLESv2/entry_points_gles_3_0_autogen.cpp',
76 'src/libGLESv2/entry_points_gles_3_0_autogen.h',
77 ],
78 'script': 'scripts/generate_entry_points.py',
79 },
80 'GL format map': {
81 'inputs': [
82 'src/libANGLE/es3_format_type_combinations.json',
83 'src/libANGLE/format_map_data.json',
84 ],
85 'outputs': [
86 'src/libANGLE/format_map_autogen.cpp',
87 ],
88 'script': 'src/libANGLE/gen_format_map.py',
89 },
90 'uniform type': {
91 'inputs': [],
92 'outputs': [
93 'src/common/uniform_type_info_autogen.cpp',
94 ],
95 'script': 'src/common/gen_uniform_type_table.py',
96 },
97 'OpenGL dispatch table': {
98 'inputs': [
99 'scripts/gl.xml',
100 ],
101 'outputs': [
102 'src/libANGLE/renderer/gl/DispatchTableGL_autogen.cpp',
103 'src/libANGLE/renderer/gl/DispatchTableGL_autogen.h',
104 'src/libANGLE/renderer/gl/null_functions.h',
105 'src/libANGLE/renderer/gl/null_functions.cpp',
106 ],
107 'script': 'src/libANGLE/renderer/gl/generate_gl_dispatch_table.py',
108 },
109 'packed GLenum': {
110 'inputs': [
111 'src/libANGLE/packed_gl_enums.json',
112 ],
113 'outputs': [
114 'src/libANGLE/PackedGLEnums_autogen.cpp',
115 'src/libANGLE/PackedGLEnums_autogen.h',
116 ],
117 'script': 'src/libANGLE/gen_packed_gl_enums.py',
118 },
Jamie Madill5ad52992017-11-14 12:43:40 -0500119 'proc table': {
120 'inputs': [
121 'src/libGLESv2/proc_table_data.json',
122 ],
123 'outputs': [
124 'src/libGLESv2/proc_table_autogen.cpp',
125 ],
126 'script': 'src/libGLESv2/gen_proc_table.py',
127 },
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400128 'Vulkan format': {
129 'inputs': [
130 'src/libANGLE/renderer/angle_format.py',
131 'src/libANGLE/renderer/angle_format_map.json',
132 'src/libANGLE/renderer/vulkan/vk_format_map.json',
133 ],
134 'outputs': [
135 'src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp',
136 ],
137 'script': 'src/libANGLE/renderer/vulkan/gen_vk_format_table.py',
138 },
Luc Ferron0aa1ffe2018-02-08 13:42:36 -0500139 'Vulkan mandatory format support table': {
140 'inputs': [
141 'src/libANGLE/renderer/angle_format.py',
142 'third_party/vulkan-validation-layers/src/scripts/vk.xml',
143 'src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json',
144 ],
145 'outputs': [
146 'src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp',
147 ],
148 'script': 'src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py',
149 },
Olli Etuaho140152e2018-02-08 14:46:44 +0200150 'ESSL static builtins': {
151 'inputs': [
152 'src/compiler/translator/builtin_function_declarations.txt',
153 ],
154 'outputs': [
155 'src/compiler/translator/SymbolTable_autogen.cpp',
156 ],
157 'script': 'src/compiler/translator/gen_builtin_symbols.py',
158 },
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400159}
160
161root_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))
162any_dirty = False
163
164for name, info in sorted(generators.iteritems()):
165
166 # Set the CWD to the root ANGLE directory.
167 os.chdir(root_dir)
168
169 script = info['script']
170 dirty = False
171
172 for finput in info['inputs'] + [script]:
173 input_mtime = os.path.getmtime(finput)
174 for foutput in info['outputs']:
175 if not os.path.exists(foutput):
Jamie Madill5ad52992017-11-14 12:43:40 -0500176 print('Output ' + foutput + ' not found for ' + name + ' table')
Jamie Madilla8b73ed2017-11-02 09:22:29 -0400177 dirty = True
178 else:
179 output_mtime = os.path.getmtime(foutput)
180 if input_mtime > output_mtime:
181 dirty = True
182
183 if dirty:
184 any_dirty = True
185
186 # Set the CWD to the script directory.
187 os.chdir(os.path.dirname(os.path.abspath(script)))
188
189 print('Running ' + name + ' code generator')
190 if subprocess.call(['python', os.path.basename(script)]) != 0:
191 sys.exit(1)
192
193if any_dirty:
194 args = []
195 if os.name == 'nt':
196 args += ['git.bat']
197 else:
198 args += ['git']
199 args += ['cl', 'format']
200 print('Calling git cl format')
Frank Henigmandda048c2018-01-11 20:09:09 -0500201 subprocess.call(args)