blob: 7b9442808030fdae097221b8c3f23fa2d1a5e709 [file] [log] [blame]
Jamie Madilla8b73ed2017-11-02 09:22:29 -04001#!/usr/bin/python
2#
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 },
119 'Vulkan format': {
120 'inputs': [
121 'src/libANGLE/renderer/angle_format.py',
122 'src/libANGLE/renderer/angle_format_map.json',
123 'src/libANGLE/renderer/vulkan/vk_format_map.json',
124 ],
125 'outputs': [
126 'src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp',
127 ],
128 'script': 'src/libANGLE/renderer/vulkan/gen_vk_format_table.py',
129 },
130}
131
132root_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))
133any_dirty = False
134
135for name, info in sorted(generators.iteritems()):
136
137 # Set the CWD to the root ANGLE directory.
138 os.chdir(root_dir)
139
140 script = info['script']
141 dirty = False
142
143 for finput in info['inputs'] + [script]:
144 input_mtime = os.path.getmtime(finput)
145 for foutput in info['outputs']:
146 if not os.path.exists(foutput):
147 print('Output' + foutput + ' not found for ' + name + ' table')
148 dirty = True
149 else:
150 output_mtime = os.path.getmtime(foutput)
151 if input_mtime > output_mtime:
152 dirty = True
153
154 if dirty:
155 any_dirty = True
156
157 # Set the CWD to the script directory.
158 os.chdir(os.path.dirname(os.path.abspath(script)))
159
160 print('Running ' + name + ' code generator')
161 if subprocess.call(['python', os.path.basename(script)]) != 0:
162 sys.exit(1)
163
164if any_dirty:
165 args = []
166 if os.name == 'nt':
167 args += ['git.bat']
168 else:
169 args += ['git']
170 args += ['cl', 'format']
171 print('Calling git cl format')
172 subprocess.call(args)