17ec681f3Smrg# Copyright © 2020 Google, Inc
27ec681f3Smrg
37ec681f3Smrg# Permission is hereby granted, free of charge, to any person obtaining a copy
47ec681f3Smrg# of this software and associated documentation files (the "Software"), to deal
57ec681f3Smrg# in the Software without restriction, including without limitation the rights
67ec681f3Smrg# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
77ec681f3Smrg# copies of the Software, and to permit persons to whom the Software is
87ec681f3Smrg# furnished to do so, subject to the following conditions:
97ec681f3Smrg
107ec681f3Smrg# The above copyright notice and this permission notice shall be included in
117ec681f3Smrg# all copies or substantial portions of the Software.
127ec681f3Smrg
137ec681f3Smrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
147ec681f3Smrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
157ec681f3Smrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
167ec681f3Smrg# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
177ec681f3Smrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
187ec681f3Smrg# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
197ec681f3Smrg# SOFTWARE.
207ec681f3Smrg
217ec681f3Smrgif with_tests
227ec681f3Smrg  diff = find_program('diff')
237ec681f3Smrgendif
247ec681f3Smrg
257ec681f3Smrg# Shared cmdstream decoding:
267ec681f3Smrglibfreedreno_cffdec = static_library(
277ec681f3Smrg  'freedreno_cffdec',
287ec681f3Smrg  [
297ec681f3Smrg    'buffers.c',
307ec681f3Smrg    'buffers.h',
317ec681f3Smrg    'cffdec.c',
327ec681f3Smrg    'cffdec.h',
337ec681f3Smrg    'pager.c',
347ec681f3Smrg    'pager.h',
357ec681f3Smrg    'rnnutil.c',
367ec681f3Smrg    'rnnutil.h',
377ec681f3Smrg    'util.h',
387ec681f3Smrg  ],
397ec681f3Smrg  include_directories: [
407ec681f3Smrg    inc_freedreno,
417ec681f3Smrg    inc_freedreno_rnn,
427ec681f3Smrg    inc_include,
437ec681f3Smrg    inc_src,
447ec681f3Smrg  ],
457ec681f3Smrg  c_args : [ no_override_init_args ],
467ec681f3Smrg  gnu_symbol_visibility: 'hidden',
477ec681f3Smrg  dependencies: [],
487ec681f3Smrg  link_with: [
497ec681f3Smrg    libfreedreno_rnn,
507ec681f3Smrg    libfreedreno_ir2,  # for disasm_a2xx
517ec681f3Smrg    libfreedreno_ir3,  # for disasm_a3xx
527ec681f3Smrg    _libmesa_util,
537ec681f3Smrg  ],
547ec681f3Smrg  build_by_default: false,
557ec681f3Smrg)
567ec681f3Smrg
577ec681f3Smrgif dep_libarchive.found()
587ec681f3Smrg  libfreedreno_io = static_library(
597ec681f3Smrg    'libfreedreno_io',
607ec681f3Smrg    [
617ec681f3Smrg      'io.c',
627ec681f3Smrg      'io.h',
637ec681f3Smrg    ],
647ec681f3Smrg    include_directories: [],
657ec681f3Smrg    c_args : [no_override_init_args],
667ec681f3Smrg    gnu_symbol_visibility: 'hidden',
677ec681f3Smrg    dependencies: [
687ec681f3Smrg      dep_libarchive,
697ec681f3Smrg    ],
707ec681f3Smrg    build_by_default: false,
717ec681f3Smrg  )
727ec681f3Smrgendif
737ec681f3Smrg
747ec681f3Smrgif dep_lua.found() and dep_libarchive.found()
757ec681f3Smrg  cffdump = executable(
767ec681f3Smrg    'cffdump',
777ec681f3Smrg    [
787ec681f3Smrg      'cffdump.c',
797ec681f3Smrg      'script.c',
807ec681f3Smrg      'script.h'
817ec681f3Smrg    ],
827ec681f3Smrg    include_directories: [
837ec681f3Smrg      inc_freedreno,
847ec681f3Smrg      inc_freedreno_rnn,
857ec681f3Smrg      inc_include,
867ec681f3Smrg      inc_src,
877ec681f3Smrg    ],
887ec681f3Smrg    c_args : [no_override_init_args],
897ec681f3Smrg    gnu_symbol_visibility: 'hidden',
907ec681f3Smrg    dependencies: [
917ec681f3Smrg      dep_lua,
927ec681f3Smrg    ],
937ec681f3Smrg    link_with: [
947ec681f3Smrg      libfreedreno_cffdec,
957ec681f3Smrg      libfreedreno_io,
967ec681f3Smrg    ],
977ec681f3Smrg    build_by_default: with_tools.contains('freedreno'),
987ec681f3Smrg    install: install_fd_decode_tools,
997ec681f3Smrg  )
1007ec681f3Smrg
1017ec681f3Smrg  if with_tests
1027ec681f3Smrg    # dump only a single frame, and single tile pass, to keep the
1037ec681f3Smrg    # reference output size managable
1047ec681f3Smrg    cffdump_tests = [
1057ec681f3Smrg      ['fd-clouds', ['--frame', '0', '--once']],
1067ec681f3Smrg      ['es2gears-a320', ['--frame', '0', '--once']],
1077ec681f3Smrg      ['glxgears-a420', ['--frame', '1', '--once']],
1087ec681f3Smrg      ['dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d', ['--once']],
1097ec681f3Smrg      ['dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list', ['--frame', '0', '--once']],
1107ec681f3Smrg      # Test a lua script to ensure we don't break scripting API
1117ec681f3Smrg      ['shadow', ['--script', files(join_paths(meson.current_source_dir(), 'scripts', 'parse-submits.lua'))]],
1127ec681f3Smrg    ]
1137ec681f3Smrg    foreach cffdump_test: cffdump_tests
1147ec681f3Smrg      name = cffdump_test[0]
1157ec681f3Smrg      args = cffdump_test[1]
1167ec681f3Smrg
1177ec681f3Smrg      log = custom_target(name + '.log',
1187ec681f3Smrg        output: name + '.log',
1197ec681f3Smrg        command: [cffdump, '--unit-test', args, files('../.gitlab-ci/traces/' + name + '.rd.gz')],
1207ec681f3Smrg        capture: true,
1217ec681f3Smrg      )
1227ec681f3Smrg      test('cffdump-' + name,
1237ec681f3Smrg        diff,
1247ec681f3Smrg        args: ['-u', files('../.gitlab-ci/reference/' + name + '.log'), log],
1257ec681f3Smrg        suite: 'freedreno',
1267ec681f3Smrg        workdir: meson.source_root()
1277ec681f3Smrg      )
1287ec681f3Smrg
1297ec681f3Smrg    endforeach
1307ec681f3Smrg  endif
1317ec681f3Smrgendif
1327ec681f3Smrg
1337ec681f3Smrgcrashdec = executable(
1347ec681f3Smrg  'crashdec',
1357ec681f3Smrg  'crashdec.c',
1367ec681f3Smrg  include_directories: [
1377ec681f3Smrg    inc_freedreno,
1387ec681f3Smrg    inc_freedreno_rnn,
1397ec681f3Smrg    inc_include,
1407ec681f3Smrg    inc_src,
1417ec681f3Smrg  ],
1427ec681f3Smrg  gnu_symbol_visibility: 'hidden',
1437ec681f3Smrg  dependencies: [],
1447ec681f3Smrg  link_with: [
1457ec681f3Smrg    libfreedreno_cffdec,
1467ec681f3Smrg  ],
1477ec681f3Smrg  build_by_default: with_tools.contains('freedreno'),
1487ec681f3Smrg  install: install_fd_decode_tools,
1497ec681f3Smrg)
1507ec681f3Smrg
1517ec681f3Smrgif with_tests
1527ec681f3Smrg  crashdec_output = custom_target('crashdec.txt',
1537ec681f3Smrg    output: 'crashdec.txt',
1547ec681f3Smrg    command: [crashdec, '-sf', files('../.gitlab-ci/traces/crash.devcore')],
1557ec681f3Smrg    capture: true
1567ec681f3Smrg  )
1577ec681f3Smrg  test('crashdec',
1587ec681f3Smrg    diff,
1597ec681f3Smrg    args: ['-u', files('../.gitlab-ci/reference/crash.log'), crashdec_output],
1607ec681f3Smrg    suite: 'freedreno',
1617ec681f3Smrg    workdir: meson.source_root()
1627ec681f3Smrg  )
1637ec681f3Smrgendif
1647ec681f3Smrg
1657ec681f3Smrgif dep_libarchive.found()
1667ec681f3Smrg  pgmdump = executable(
1677ec681f3Smrg    'pgmdump',
1687ec681f3Smrg    'pgmdump.c',
1697ec681f3Smrg    include_directories: [
1707ec681f3Smrg      inc_freedreno,
1717ec681f3Smrg      inc_include,
1727ec681f3Smrg      inc_src,
1737ec681f3Smrg    ],
1747ec681f3Smrg    gnu_symbol_visibility: 'hidden',
1757ec681f3Smrg    dependencies: [],
1767ec681f3Smrg    link_with: [
1777ec681f3Smrg      libfreedreno_cffdec,
1787ec681f3Smrg      libfreedreno_io,
1797ec681f3Smrg      libfreedreno_ir2,  # for disasm_a2xx
1807ec681f3Smrg      libfreedreno_ir3,  # for disasm_a3xx
1817ec681f3Smrg    ],
1827ec681f3Smrg    build_by_default: with_tools.contains('freedreno'),
1837ec681f3Smrg    install: false,
1847ec681f3Smrg  )
1857ec681f3Smrg  pgmdump2 = executable(
1867ec681f3Smrg    'pgmdump2',
1877ec681f3Smrg    'pgmdump2.c',
1887ec681f3Smrg    include_directories: [
1897ec681f3Smrg      inc_freedreno,
1907ec681f3Smrg      inc_include,
1917ec681f3Smrg      inc_src,
1927ec681f3Smrg    ],
1937ec681f3Smrg    gnu_symbol_visibility: 'hidden',
1947ec681f3Smrg    dependencies: [],
1957ec681f3Smrg    link_with: [
1967ec681f3Smrg      libfreedreno_cffdec,
1977ec681f3Smrg      libfreedreno_io,
1987ec681f3Smrg      libfreedreno_ir2,  # for disasm_a2xx
1997ec681f3Smrg      libfreedreno_ir3,  # for disasm_a3xx
2007ec681f3Smrg    ],
2017ec681f3Smrg    build_by_default: with_tools.contains('freedreno'),
2027ec681f3Smrg    install: false,
2037ec681f3Smrg  )
2047ec681f3Smrgendif
205