| # Copyright © 2023 Igalia S.L. |
| # SPDX-License-Identifier: MIT |
| |
| isa_depend_files = [ |
| 'etnaviv.xml', |
| isaspec_py_deps, |
| ] |
| |
| etnaviv_isa = custom_target( |
| 'etnaviv-isa', |
| input: ['etnaviv.xml'], |
| output: ['etnaviv-isa.c', 'etnaviv-isa.h'], |
| command: [ |
| prog_isaspec_decode, '--xml', '@INPUT@', |
| '--out-c', '@OUTPUT0@', '--out-h', '@OUTPUT1@', |
| ], |
| depend_files: isa_depend_files, |
| ) |
| |
| decode_files = [ |
| etnaviv_isa, |
| 'isa.h', |
| ] |
| |
| _libetnaviv_decode = static_library( |
| 'etnaviv_decode', |
| decode_files, |
| dependencies: [idep_mesautil, idep_isaspec_decode], |
| link_with: [libisaspec], |
| include_directories: [ |
| inc_include, |
| inc_src, |
| ], |
| gnu_symbol_visibility: 'hidden', |
| ) |
| |
| idep_libetnaviv_decode = declare_dependency( |
| include_directories : [ |
| include_directories('.'), |
| inc_include, |
| inc_src |
| ], |
| link_with : _libetnaviv_decode, |
| dependencies: [idep_isaspec_decode], |
| sources : [etnaviv_isa], |
| ) |
| |
| prog_enums_h = files('enums.h.py') |
| etnaviv_enums_h = custom_target( |
| 'enums.h', |
| input: 'etnaviv.xml', |
| output: 'enums.h', |
| command: [prog_python, prog_enums_h, '--xml', '@INPUT@', '--output', '@OUTPUT@'], |
| depend_files: [isa_depend_files, prog_enums_h], |
| ) |
| |
| idep_etnaviv_enums_h = declare_dependency( |
| sources : [etnaviv_enums_h], |
| include_directories : include_directories('.'), |
| ) |
| |
| encode_h = custom_target( |
| 'encode.h', |
| input: ['etnaviv.xml'], |
| output: 'encode.h', |
| command: [ |
| prog_isaspec_encode, '--xml', '@INPUT@', '--out-h', '@OUTPUT@' |
| ], |
| depend_files: isa_depend_files, |
| ) |
| |
| encode_files = [ |
| etnaviv_enums_h, |
| encode_h, |
| 'encode.c', |
| ] |
| |
| libetnaviv_encode = static_library( |
| 'etnaviv_encode', |
| encode_files, |
| gnu_symbol_visibility: 'hidden', |
| include_directories: [ |
| inc_src, |
| ], |
| ) |
| |
| disasm = executable( |
| 'etnaviv-disasm', |
| ['disasm.c'], |
| dependencies: idep_libetnaviv_decode, |
| build_by_default: with_tools.contains('etnaviv'), |
| include_directories: [ |
| inc_src, |
| ], |
| install: false, |
| ) |
| |
| if with_tools.contains('etnaviv') |
| isa_bindings_rs = rust.bindgen( |
| input : 'bindings.h', |
| output : 'isa_bindings.rs', |
| include_directories : [inc_src], |
| args : [ |
| '--disable-header-comment', |
| '--ignore-functions', |
| '--allowlist-type', 'etna_asm_result', |
| '--allowlist-type', 'etna_inst', |
| '--allowlist-type', 'isa_swiz', |
| '--default-enum-style', 'rust', |
| '--with-derive-default', |
| ], |
| ) |
| |
| _libetnaviv_isa_bindings_gen = static_library( |
| 'isa_bindings', |
| isa_bindings_rs, |
| gnu_symbol_visibility : 'hidden', |
| rust_abi : 'rust', |
| rust_args: [ |
| '-Anon_camel_case_types', |
| ], |
| ) |
| |
| dep_indexmap = dependency('indexmap', |
| version : '>= 2.2.6', |
| fallback : ['indexmap', 'dep_indexmap'], |
| required : true, |
| ) |
| |
| dep_roxmltree = dependency('roxmltree', |
| version : '>= 0.20.roxmltree', |
| fallback : ['roxmltree', 'dep_roxmltree'], |
| required : true, |
| ) |
| |
| dep_syn = dependency('syn', |
| version : '>= 2.0.15', |
| fallback : ['syn', 'dep_syn'], |
| required : true, |
| ) |
| |
| dep_pest_generator = dependency('pest_generator', |
| version: '>= 2.7.6', |
| fallback: ['pest_generator', 'dep_pest_generator'], |
| required: true, |
| ) |
| |
| dep_pest = dependency('pest', |
| version: '>= 2.7.6', |
| fallback: ['pest', 'dep_pest'], |
| required: true, |
| ) |
| |
| _libetnaviv_isa_proc_rs = rust.proc_macro( |
| 'etnaviv_isa_proc', |
| files('isa_proc.rs', 'isa.rs'), |
| dependencies : [dep_indexmap, dep_roxmltree, dep_syn, dep_pest_generator], |
| ) |
| |
| if with_tests |
| # triggers a bug in meson |
| # rust.test('isa', _libetnaviv_isa_proc_rs, suite : ['etnaviv']) |
| endif |
| |
| libetnaviv_isa_rs = static_library( |
| 'etnaviv_isa_rs', |
| files('lib.rs'), |
| gnu_symbol_visibility : 'hidden', |
| rust_abi : 'c', |
| dependencies: [dep_indexmap, dep_roxmltree, dep_pest], |
| link_with: [_libetnaviv_isa_bindings_gen, _libetnaviv_isa_proc_rs], |
| ) |
| |
| etnaviv_assembler = executable( |
| 'etnaviv-assembler', |
| ['assembler.c'], |
| gnu_symbol_visibility: 'hidden', |
| dependencies: [ idep_libetnaviv_decode ], |
| link_with: [libetnaviv_encode, libetnaviv_isa_rs], |
| ) |
| else |
| pre_args += '-DHAVE_ETNAVIV_NO_PEST' |
| |
| # dummy library |
| libetnaviv_isa_rs = static_library( |
| 'etnaviv_isa_rs', |
| sources: [], |
| ) |
| endif |
| |
| subdir('tests') |