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