xref: /aosp_15_r20/external/mesa3d/src/etnaviv/isa/meson.build (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1# Copyright © 2023 Igalia S.L.
2# SPDX-License-Identifier: MIT
3
4isa_depend_files = [
5  'etnaviv.xml',
6  isaspec_py_deps,
7]
8
9etnaviv_isa = custom_target(
10  'etnaviv-isa',
11  input: ['etnaviv.xml'],
12  output: ['etnaviv-isa.c', 'etnaviv-isa.h'],
13  command: [
14    prog_isaspec_decode, '--xml', '@INPUT@',
15    '--out-c', '@OUTPUT0@', '--out-h', '@OUTPUT1@',
16  ],
17  depend_files: isa_depend_files,
18)
19
20decode_files = [
21  etnaviv_isa,
22  'isa.h',
23]
24
25_libetnaviv_decode = static_library(
26  'etnaviv_decode',
27  decode_files,
28  dependencies: [idep_mesautil, idep_isaspec_decode],
29  link_with: [libisaspec],
30  include_directories: [
31    inc_include,
32    inc_src,
33  ],
34  gnu_symbol_visibility: 'hidden',
35)
36
37idep_libetnaviv_decode = declare_dependency(
38  include_directories : [
39    include_directories('.'),
40    inc_include,
41    inc_src
42  ],
43  link_with : _libetnaviv_decode,
44  dependencies: [idep_isaspec_decode],
45  sources : [etnaviv_isa],
46)
47
48prog_enums_h = files('enums.h.py')
49etnaviv_enums_h = custom_target(
50  'enums.h',
51  input: 'etnaviv.xml',
52  output: 'enums.h',
53  command: [prog_python, prog_enums_h, '--xml', '@INPUT@', '--output', '@OUTPUT@'],
54  depend_files: [isa_depend_files, prog_enums_h],
55)
56
57idep_etnaviv_enums_h = declare_dependency(
58  sources : [etnaviv_enums_h],
59  include_directories : include_directories('.'),
60)
61
62encode_h = custom_target(
63  'encode.h',
64  input: ['etnaviv.xml'],
65  output: 'encode.h',
66  command: [
67    prog_isaspec_encode, '--xml', '@INPUT@', '--out-h', '@OUTPUT@'
68  ],
69  depend_files: isa_depend_files,
70)
71
72encode_files = [
73  etnaviv_enums_h,
74  encode_h,
75  'encode.c',
76]
77
78libetnaviv_encode = static_library(
79  'etnaviv_encode',
80  encode_files,
81  gnu_symbol_visibility: 'hidden',
82  include_directories: [
83    inc_src,
84  ],
85)
86
87disasm = executable(
88  'etnaviv-disasm',
89  ['disasm.c'],
90  dependencies: idep_libetnaviv_decode,
91  build_by_default: with_tools.contains('etnaviv'),
92  include_directories: [
93    inc_src,
94  ],
95  install: false,
96)
97
98if with_tools.contains('etnaviv')
99  isa_bindings_rs = rust.bindgen(
100    input : 'bindings.h',
101    output : 'isa_bindings.rs',
102    include_directories : [inc_src],
103    args : [
104      '--disable-header-comment',
105      '--ignore-functions',
106      '--allowlist-type', 'etna_asm_result',
107      '--allowlist-type', 'etna_inst',
108      '--allowlist-type', 'isa_swiz',
109      '--default-enum-style', 'rust',
110      '--with-derive-default',
111    ],
112  )
113
114  _libetnaviv_isa_bindings_gen = static_library(
115    'isa_bindings',
116    isa_bindings_rs,
117    gnu_symbol_visibility : 'hidden',
118    rust_abi : 'rust',
119    rust_args: [
120      '-Anon_camel_case_types',
121    ],
122  )
123
124  dep_indexmap = dependency('indexmap',
125    version : '>= 2.2.6',
126    fallback : ['indexmap', 'dep_indexmap'],
127    required : true,
128  )
129
130  dep_roxmltree = dependency('roxmltree',
131    version : '>= 0.20.roxmltree',
132    fallback : ['roxmltree', 'dep_roxmltree'],
133    required : true,
134  )
135
136  dep_syn = dependency('syn',
137    version : '>= 2.0.15',
138    fallback : ['syn', 'dep_syn'],
139    required : true,
140  )
141
142  dep_pest_generator = dependency('pest_generator',
143    version: '>= 2.7.6',
144    fallback: ['pest_generator', 'dep_pest_generator'],
145    required: true,
146  )
147
148  dep_pest = dependency('pest',
149    version: '>= 2.7.6',
150    fallback: ['pest', 'dep_pest'],
151    required: true,
152  )
153
154  _libetnaviv_isa_proc_rs = rust.proc_macro(
155    'etnaviv_isa_proc',
156    files('isa_proc.rs', 'isa.rs'),
157    dependencies : [dep_indexmap, dep_roxmltree, dep_syn, dep_pest_generator],
158  )
159
160  if with_tests
161    # triggers a bug in meson
162    # rust.test('isa', _libetnaviv_isa_proc_rs, suite : ['etnaviv'])
163  endif
164
165  libetnaviv_isa_rs = static_library(
166    'etnaviv_isa_rs',
167    files('lib.rs'),
168    gnu_symbol_visibility : 'hidden',
169    rust_abi : 'c',
170    dependencies: [dep_indexmap, dep_roxmltree, dep_pest],
171    link_with: [_libetnaviv_isa_bindings_gen, _libetnaviv_isa_proc_rs],
172  )
173
174  etnaviv_assembler = executable(
175    'etnaviv-assembler',
176    ['assembler.c'],
177    gnu_symbol_visibility: 'hidden',
178    dependencies: [ idep_libetnaviv_decode ],
179    link_with: [libetnaviv_encode, libetnaviv_isa_rs],
180  )
181else
182  pre_args += '-DHAVE_ETNAVIV_NO_PEST'
183
184  # dummy library
185  libetnaviv_isa_rs = static_library(
186    'etnaviv_isa_rs',
187    sources: [],
188  )
189endif
190
191subdir('tests')
192