etnaviv: isa: Generate c header containing enums

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28183>
This commit is contained in:
Christian Gmeiner 2024-02-26 10:02:55 +01:00 committed by Marge Bot
parent 9cc8b12e8c
commit a0635f8f52
2 changed files with 67 additions and 0 deletions

View file

@ -0,0 +1,58 @@
#!/usr/bin/env python3
#
# Copyright © 2024 Igalia S.L.
# SPDX-License-Identifier: MIT
template = """/*
* Copyright © 2024 Igalia S.L.
* SPDX-License-Identifier: MIT
*/
#pragma once
#include "util/macros.h"
#ifdef __cplusplus
extern "C" {
#endif
% for name, enum in enums.items():
enum PACKED ${prefix}_${name} {
% for k, v in enum.items():
${k} = ${v},
% endfor
};
% endfor
#ifdef __cplusplus
} /* extern C */
#endif
"""
import sys, os
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../compiler/isaspec")
from mako.template import Template
from isa import ISA
def main():
isa = ISA(sys.argv[1])
prefix = 'isa'
enums = {}
for name, enum in isa.enums.items():
name = name.replace('#', '')
e = {}
for k, v in enum.values.items():
v = v.get_name().replace('.', '').replace('[', '').replace(']', '').upper()
item = prefix.upper() + '_' + name.upper() + '_' + v
e[item] = k
enums[name] = e
print(Template(template).render(prefix=prefix, enums=enums))
if __name__ == '__main__':
main()

View file

@ -47,6 +47,15 @@ idep_libetnaviv_decode = declare_dependency(
sources : [etnaviv_isa],
)
enums_h = custom_target(
'enums.h',
input: ['enums.h.py', 'etnaviv.xml'],
output: 'enums.h',
command: [prog_python, '@INPUT@'],
capture: true,
depend_files: isa_depend_files,
)
disasm = executable(
'etnaviv-disasm',
['disasm.c'],