#!/usr/bin/env python3 COPYRIGHT = """\ /* * Copyright 2024 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ """ import argparse import os import sys from mako.template import Template from mako import exceptions sys.path.append(f"{os.path.dirname(sys.argv[0])}/../dev") import intel_device_info template = COPYRIGHT + """ /* DO NOT EDIT - This file generated automatically by intel_device_serialize_c.py script */ #include "dev/intel_device_info.h" #include "brw_compiler.h" #define SHA_UPDATE_FIELD(field) _mesa_sha1_update(ctx, &devinfo->field, sizeof(devinfo->field)) void brw_device_sha1_update(struct mesa_sha1 *ctx, const struct intel_device_info *devinfo) { % for member in compiler_fields: % if member.ray_tracing_field: if (devinfo->has_ray_tracing) SHA_UPDATE_FIELD(${member.name}); % else: SHA_UPDATE_FIELD(${member.name}); % endif % endfor } #undef SHA_UPDATE_FIELD """ def main(): """print intel_device_serialize.c at the specified path""" parser = argparse.ArgumentParser() parser.add_argument('--outdir', required=True, help='Directory to put the generated files in') args = parser.parse_args() path = os.path.join(args.outdir, 'brw_device_sha1_gen.c') device_members = intel_device_info.TYPES_BY_NAME["intel_device_info"].members compiler_fields = [field for field in device_members if field.compiler_field] with open(path, 'w', encoding='utf-8') as f: try: f.write(Template(template).render(compiler_fields=compiler_fields)) except: print(exceptions.text_error_template().render(compiler_fields=compiler_fields)) if __name__ == "__main__": main()