Frank Henigman | dda048c | 2018-01-11 20:09:09 -0500 | [diff] [blame] | 1 | #!/usr/bin/python2 |
Jamie Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 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 | |
| 10 | import 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. |
| 14 | generators = { |
| 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 Ferron | 4ea3b45 | 2018-03-13 11:48:26 -0400 | [diff] [blame] | 27 | '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 Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 36 | '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 Lang | 8ceea81 | 2018-04-10 03:07:13 -0400 | [diff] [blame^] | 118 | 'packed enum': { |
Jamie Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 119 | 'inputs': [ |
| 120 | 'src/libANGLE/packed_gl_enums.json', |
Geoff Lang | 8ceea81 | 2018-04-10 03:07:13 -0400 | [diff] [blame^] | 121 | 'src/libANGLE/packed_egl_enums.json', |
Jamie Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 122 | ], |
| 123 | 'outputs': [ |
Geoff Lang | 8ceea81 | 2018-04-10 03:07:13 -0400 | [diff] [blame^] | 124 | 'src/libANGLE/PackedEGLEnums_autogen.cpp', |
| 125 | 'src/libANGLE/PackedEGLEnums_autogen.h', |
Jamie Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 126 | 'src/libANGLE/PackedGLEnums_autogen.cpp', |
| 127 | 'src/libANGLE/PackedGLEnums_autogen.h', |
| 128 | ], |
| 129 | 'script': 'src/libANGLE/gen_packed_gl_enums.py', |
| 130 | }, |
Jamie Madill | 5ad5299 | 2017-11-14 12:43:40 -0500 | [diff] [blame] | 131 | '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 Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 140 | '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 Ferron | 0aa1ffe | 2018-02-08 13:42:36 -0500 | [diff] [blame] | 151 | '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 Etuaho | 5fec7ab | 2018-04-04 11:58:33 +0300 | [diff] [blame] | 162 | '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 Etuaho | 140152e | 2018-02-08 14:46:44 +0200 | [diff] [blame] | 171 | 'ESSL static builtins': { |
| 172 | 'inputs': [ |
| 173 | 'src/compiler/translator/builtin_function_declarations.txt', |
Olli Etuaho | 391bda2 | 2018-02-23 11:43:14 +0200 | [diff] [blame] | 174 | 'src/compiler/translator/builtin_variables.json', |
Olli Etuaho | 140152e | 2018-02-08 14:46:44 +0200 | [diff] [blame] | 175 | ], |
| 176 | 'outputs': [ |
Olli Etuaho | c26214d | 2018-03-16 10:43:11 +0200 | [diff] [blame] | 177 | 'src/compiler/translator/tree_util/BuiltIn_autogen.h', |
Olli Etuaho | 89398b6 | 2018-03-21 17:30:50 +0200 | [diff] [blame] | 178 | 'src/compiler/translator/builtin_symbols_hash_autogen.txt', |
Olli Etuaho | 2bfe9f6 | 2018-03-02 16:53:29 +0200 | [diff] [blame] | 179 | 'src/compiler/translator/ParseContext_autogen.h', |
Olli Etuaho | 140152e | 2018-02-08 14:46:44 +0200 | [diff] [blame] | 180 | 'src/compiler/translator/SymbolTable_autogen.cpp', |
Olli Etuaho | b391ec4 | 2018-03-12 17:04:59 +0200 | [diff] [blame] | 181 | 'src/compiler/translator/SymbolTable_autogen.h', |
Olli Etuaho | 7618eaf | 2018-03-07 11:25:40 +0200 | [diff] [blame] | 182 | 'src/tests/compiler_tests/ImmutableString_test_autogen.cpp', |
Olli Etuaho | 140152e | 2018-02-08 14:46:44 +0200 | [diff] [blame] | 183 | ], |
| 184 | 'script': 'src/compiler/translator/gen_builtin_symbols.py', |
| 185 | }, |
Jamie Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 186 | } |
| 187 | |
| 188 | root_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) |
| 189 | any_dirty = False |
| 190 | |
| 191 | for 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 Madill | 5ad5299 | 2017-11-14 12:43:40 -0500 | [diff] [blame] | 203 | print('Output ' + foutput + ' not found for ' + name + ' table') |
Jamie Madill | a8b73ed | 2017-11-02 09:22:29 -0400 | [diff] [blame] | 204 | 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 | |
| 220 | if 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 Henigman | dda048c | 2018-01-11 20:09:09 -0500 | [diff] [blame] | 228 | subprocess.call(args) |