blob: 1a687e005d134434abd3848e0a347423c2c1f25a [file] [log] [blame]
# 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')