1# Copyright © 2020 Google, Inc 2# SPDX-License-Identifier: MIT 3 4if with_tests 5 diff = find_program('diff') 6endif 7 8# Shared cmdstream decoding: 9libfreedreno_cffdec = static_library( 10 'freedreno_cffdec', 11 [ 12 'buffers.c', 13 'buffers.h', 14 'cffdec.c', 15 'cffdec.h', 16 'pager.c', 17 'pager.h', 18 'rnnutil.c', 19 'rnnutil.h', 20 'util.h', 21 ], 22 include_directories: [ 23 inc_freedreno, 24 inc_freedreno_rnn, 25 inc_include, 26 inc_src, 27 ], 28 c_args : [ no_override_init_args ], 29 gnu_symbol_visibility: 'hidden', 30 dependencies: [], 31 link_with: [ 32 libfreedreno_rnn, 33 libfreedreno_ir2, # for disasm_a2xx 34 libfreedreno_ir3, # for disasm_a3xx 35 _libmesa_util, 36 ], 37 build_by_default: false, 38) 39 40if dep_libarchive.found() 41 libfreedreno_io = static_library( 42 'freedreno_io', 43 [ 44 'io.c', 45 'io.h', 46 ], 47 include_directories: [], 48 c_args : [no_override_init_args], 49 gnu_symbol_visibility: 'hidden', 50 dependencies: [ 51 dep_libarchive, 52 ], 53 build_by_default: false, 54 ) 55 56 foreach kmd : freedreno_kmds 57 if not (kmd in ['kgsl', 'msm', 'wsl']) 58 warning('replay not supported for ' + kmd + ' KMD') 59 continue 60 endif 61 62 # Only append the KMD name if there are multiple KMDs 63 if freedreno_kmds.length() == 1 64 replay_name = 'replay' 65 else 66 replay_name = 'replay-' + kmd 67 endif 68 69 replay_flags = [] 70 replay_deps = [] 71 if kmd == 'kgsl' 72 replay_flags += '-DFD_REPLAY_KGSL' 73 elif kmd == 'msm' 74 replay_flags += '-DFD_REPLAY_MSM' 75 replay_deps += dep_libdrm 76 elif kmd == 'wsl' 77 replay_flags += '-DFD_REPLAY_WSL' 78 endif 79 80 replay = executable( 81 replay_name, 82 [ 83 'replay.c' 84 ], 85 include_directories: [ 86 inc_freedreno, 87 inc_include, 88 inc_src, 89 ], 90 c_args : [no_override_init_args, replay_flags], 91 gnu_symbol_visibility: 'hidden', 92 dependencies: replay_deps, 93 link_with: [ 94 libfreedreno_cffdec, 95 libfreedreno_io, 96 ], 97 build_by_default: with_tools.contains('freedreno'), 98 install: install_fd_decode_tools, 99 ) 100 endforeach 101 102 rddecompiler = executable( 103 'rddecompiler', 104 [ 105 'rddecompiler.c', 106 freedreno_xml_header_files, 107 ], 108 include_directories: [ 109 inc_freedreno, 110 inc_freedreno_rnn, 111 inc_include, 112 inc_src, 113 ], 114 c_args : [no_override_init_args], 115 gnu_symbol_visibility: 'hidden', 116 dependencies: [ 117 dep_libdrm, 118 ], 119 link_with: [ 120 libfreedreno_cffdec, 121 libfreedreno_io, 122 ], 123 build_by_default: with_tools.contains('freedreno'), 124 install: install_fd_decode_tools, 125 ) 126 127 generate_rd = executable( 128 'generate_rd', 129 [ 130 'generate-rd.cc' 131 ], 132 include_directories: [ 133 inc_freedreno, 134 inc_freedreno_rnn, 135 inc_include, 136 inc_src, 137 ], 138 link_with: [ 139 libfreedreno_cffdec, 140 ], 141 dependencies : [ 142 idep_nir, 143 ], 144 install: install_fd_decode_tools, 145 ) 146else 147 warning('libarchive not found, not building replay or rddecompiler') 148endif 149 150if dep_lua.found() and dep_libarchive.found() 151 cffdump = executable( 152 'cffdump', 153 [ 154 'cffdump.c', 155 'script.c', 156 'script.h' 157 ], 158 include_directories: [ 159 inc_freedreno, 160 inc_freedreno_rnn, 161 inc_include, 162 inc_src, 163 ], 164 c_args : [no_override_init_args], 165 gnu_symbol_visibility: 'hidden', 166 dependencies: [ 167 dep_lua, 168 ], 169 link_with: [ 170 libfreedreno_cffdec, 171 libfreedreno_io, 172 ], 173 build_by_default: with_tools.contains('freedreno'), 174 install: install_fd_decode_tools, 175 ) 176 177 if with_tests 178 # dump only a single frame, and single tile pass, to keep the 179 # reference output size managable 180 cffdump_tests = [ 181 ['fd-clouds', ['--frame', '0', '--once']], 182 ['es2gears-a320', ['--frame', '0', '--once']], 183 ['glxgears-a420', ['--frame', '1', '--once']], 184 ['compute-a540', ['--once']], 185 ['dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d', ['--once']], 186 ['dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list', ['--frame', '0', '--once']], 187 # Test a lua script to ensure we don't break scripting API 188 ['shadow', ['--script', files('scripts/parse-submits.lua')]], 189 ] 190 foreach cffdump_test: cffdump_tests 191 name = cffdump_test[0] 192 args = cffdump_test[1] 193 194 log = custom_target(name + '.log', 195 output: name + '.log', 196 command: [cffdump, '--unit-test', args, files('../.gitlab-ci/traces/' + name + '.rd.gz')], 197 capture: true, 198 ) 199 test('cffdump-' + name, 200 diff, 201 args: ['-u', files('../.gitlab-ci/reference/' + name + '.log'), log], 202 suite: 'freedreno', 203 workdir: dir_source_root 204 ) 205 206 endforeach 207 endif 208else 209 warning('lua or libarchive not found, not building cffdump') 210endif 211 212crashdec = executable( 213 'crashdec', 214 [ 215 'crashdec.c', 216 'crashdec.h', 217 'crashdec-hfi.c', 218 'crashdec-mempool.c', 219 'crashdec-prefetch.c', 220 ], 221 include_directories: [ 222 inc_freedreno, 223 inc_freedreno_rnn, 224 inc_include, 225 inc_src, 226 ], 227 gnu_symbol_visibility: 'hidden', 228 dependencies: [], 229 link_with: [ 230 libfreedreno_cffdec, 231 ], 232 build_by_default: with_tools.contains('freedreno'), 233 install: install_fd_decode_tools, 234) 235 236if with_tests 237 crashdec_tests = [ 238 ['crash', ['-sf']], 239 ['crash_prefetch', ['-sf']], 240 ['prefetch-test', ['-sf']], 241 ] 242 foreach crashdec_test: crashdec_tests 243 name = crashdec_test[0] 244 args = crashdec_test[1] 245 246 log = custom_target(name + '.log', 247 output: name + '.log', 248 command: [crashdec, args, files('../.gitlab-ci/traces/' + name + '.devcore')], 249 capture: true, 250 env: {'GALLIUM_DUMP_CPU': 'false'}, 251 ) 252 253 test('crashdec-' + name, 254 diff, 255 args: ['-u', files('../.gitlab-ci/reference/' + name + '.log'), log], 256 suite: 'freedreno', 257 workdir: dir_source_root 258 ) 259 260 endforeach 261endif 262 263if dep_libarchive.found() 264 pgmdump = executable( 265 'pgmdump', 266 'pgmdump.c', 267 include_directories: [ 268 inc_freedreno, 269 inc_include, 270 inc_src, 271 ], 272 gnu_symbol_visibility: 'hidden', 273 dependencies: [], 274 link_with: [ 275 libfreedreno_cffdec, 276 libfreedreno_io, 277 libfreedreno_ir2, # for disasm_a2xx 278 libfreedreno_ir3, # for disasm_a3xx 279 ], 280 build_by_default: with_tools.contains('freedreno'), 281 install: false, 282 ) 283 pgmdump2 = executable( 284 'pgmdump2', 285 'pgmdump2.c', 286 include_directories: [ 287 inc_freedreno, 288 inc_include, 289 inc_src, 290 ], 291 gnu_symbol_visibility: 'hidden', 292 dependencies: [], 293 link_with: [ 294 libfreedreno_cffdec, 295 libfreedreno_io, 296 libfreedreno_ir2, # for disasm_a2xx 297 libfreedreno_ir3, # for disasm_a3xx 298 ], 299 build_by_default: with_tools.contains('freedreno'), 300 install: false, 301 ) 302else 303 warning('libarchive not found, not building pgmdump') 304endif 305