From a0635f8f5287ac3ffc6e093860b21bb16adf089b Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Mon, 26 Feb 2024 10:02:55 +0100 Subject: [PATCH] etnaviv: isa: Generate c header containing enums Signed-off-by: Christian Gmeiner Part-of: --- src/etnaviv/isa/enums.h.py | 58 +++++++++++++++++++++++++++++++++++++ src/etnaviv/isa/meson.build | 9 ++++++ 2 files changed, 67 insertions(+) create mode 100644 src/etnaviv/isa/enums.h.py diff --git a/src/etnaviv/isa/enums.h.py b/src/etnaviv/isa/enums.h.py new file mode 100644 index 00000000000..55558f128f7 --- /dev/null +++ b/src/etnaviv/isa/enums.h.py @@ -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() diff --git a/src/etnaviv/isa/meson.build b/src/etnaviv/isa/meson.build index b6a3d0c9578..559b01cf56c 100644 --- a/src/etnaviv/isa/meson.build +++ b/src/etnaviv/isa/meson.build @@ -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'],