From fe6cfbfe3adb6cf039d3217b760a5c6fe228f76b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Kosi=C5=84ski?= Date: Wed, 14 Dec 2022 09:19:46 +0000 Subject: Port gen_entries.py script to Python 3. Bug: 203436762 Test: presubmit Change-Id: I0217b1cf95194bd1d5900ce7d73c517d15a3a821 --- host/libs/virglrenderer/Android.bp | 16 ++-- host/libs/virglrenderer/gen_entries.py | 138 +++++++++++++++++---------------- 2 files changed, 78 insertions(+), 76 deletions(-) diff --git a/host/libs/virglrenderer/Android.bp b/host/libs/virglrenderer/Android.bp index c05b1e5cf..4c7de86fe 100644 --- a/host/libs/virglrenderer/Android.bp +++ b/host/libs/virglrenderer/Android.bp @@ -102,7 +102,7 @@ genrule { genrule { name: "gles1_core_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/gles1_core.entries"], out: ["gles1_core_functions.h"], } @@ -110,7 +110,7 @@ genrule { genrule { name: "gles1_extensions_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/gles1_extensions.entries"], out: ["gles1_extensions_functions.h"], } @@ -118,7 +118,7 @@ genrule { genrule { name: "egl_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/egl.entries"], out: ["egl_functions.h"], } @@ -126,7 +126,7 @@ genrule { genrule { name: "gles3_only_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/gles3_only.entries"], out: ["gles3_only_functions.h"], } @@ -134,7 +134,7 @@ genrule { genrule { name: "gles31_only_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/gles31_only.entries"], out: ["gles31_only_functions.h"], } @@ -142,7 +142,7 @@ genrule { genrule { name: "gles2_extensions_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/gles2_extensions.entries"], out: ["gles2_extensions_functions.h"], } @@ -150,7 +150,7 @@ genrule { genrule { name: "egl_extensions_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/egl_extensions.entries"], out: ["egl_extensions_functions.h"], } @@ -158,7 +158,7 @@ genrule { genrule { name: "gles2_core_functions_hdr", tool_files: ["gen_entries.py"], - cmd: "python $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", + cmd: "python3 $(location gen_entries.py) --mode=funcargs $(in) --output $(out)", srcs: ["OpenGLESDispatch/gles2_core.entries"], out: ["gles2_core_functions.h"], } diff --git a/host/libs/virglrenderer/gen_entries.py b/host/libs/virglrenderer/gen_entries.py index fbfdb4daf..f0959c46b 100755 --- a/host/libs/virglrenderer/gen_entries.py +++ b/host/libs/virglrenderer/gen_entries.py @@ -25,15 +25,17 @@ # # Anything else is an error. +import argparse import re import sys -import argparse re_func = re.compile(r"""^(.*[\* ])([A-Za-z_][A-Za-z0-9_]*)\((.*)\);$""") re_param = re.compile(r"""^(.*[\* ])([A-Za-z_][A-Za-z0-9_]*)$""") + class Entry: """Small class used to model a single DLL entry point.""" + def __init__(self, func_name, return_type, parameters): """Initialize Entry instance. |func_name| is the function name, |return_type| its return type, and |parameters| is a list of @@ -53,6 +55,7 @@ class Entry: self.call += "%s%s" % (comma, param[1]) comma = ", " + def banner_command(argv): """Return sanitized command-line description. |argv| must be a list of command-line parameters, e.g. sys.argv. @@ -62,7 +65,8 @@ def banner_command(argv): # Remove path from first parameter argv = argv[:] argv[0] = "host/commands/gen-entries.py" - return ' '.join(argv) + return " ".join(argv) + def parse_entries_file(lines): """Parse an .entries file and return a tuple of: @@ -81,12 +85,12 @@ def parse_entries_file(lines): line = line.strip() if len(line) == 0: # Ignore empty lines continue - if line[0] == '#': # Ignore comments + if line[0] == "#": # Ignore comments continue - if line[0] == '!': # Prefix name + if line[0] == "!": # Prefix name prefix_name = line[1:] continue - if line[0] == '%': # Verbatim line copy + if line[0] == "%": # Verbatim line copy verbatim.append(line[1:]) continue # Must be a function signature. @@ -128,28 +132,28 @@ def gen_functions_header(entries, prefix_name, verbatim, filename, with_args): """ prefix_name = prefix_name.upper() - print "// Auto-generated with: %s" % banner_command(sys.argv) - print "// DO NOT EDIT THIS FILE" - print "" - print "#ifndef %s_FUNCTIONS_H" % prefix_name - print "#define %s_FUNCTIONS_H" % prefix_name - print "" + print("// Auto-generated with: " + banner_command(sys.argv)) + print("// DO NOT EDIT THIS FILE") + print("") + print(f"#ifndef {prefix_name}_FUNCTIONS_H") + print(f"#define {prefix_name}_FUNCTIONS_H") + print("") for line in verbatim: - print line + print(line) - print "#define LIST_%s_FUNCTIONS(X) \\" % prefix_name + print(f"#define LIST_{prefix_name}_FUNCTIONS(X) \\") for entry in entries: if with_args: - print " X(%s, %s, (%s), (%s)) \\" % \ - (entry.return_type, entry.func_name, entry.parameters, - entry.call) + print(f" X({entry.return_type}, {entry.func_name}, " + f"({entry.parameters}), ({entry.call})) \\") else: - print " X(%s, %s, (%s)) \\" % \ - (entry.return_type, entry.func_name, entry.parameters) + print(f" X({entry.return_type}, {entry.func_name}, " + f"({entry.parameters})) \\") + + print("") + print("") + print(f"#endif // {prefix_name}_FUNCTIONS_H") - print "" - print "" - print "#endif // %s_FUNCTIONS_H" % prefix_name def gen_dll_wrapper(entries, prefix_name, verbatim, filename): """Generate a C source file that contains functions that act as wrappers @@ -163,77 +167,74 @@ def gen_dll_wrapper(entries, prefix_name, verbatim, filename): ENTRY_PREFIX = "__dll_" - print "// Auto-generated with: %s" % banner_command(sys.argv) - print "// DO NOT EDIT THIS FILE" - print "" - print "#include " + print("// Auto-generated with: " + banner_command(sys.argv)) + print("// DO NOT EDIT THIS FILE") + print("") + print("#include ") for line in verbatim: - print line + print(line) - print "" - print "///" - print "/// W R A P P E R P O I N T E R S" - print "///" - print "" + print("") + print("///") + print("/// W R A P P E R P O I N T E R S") + print("///") + print("") for entry in entries: ptr_name = ENTRY_PREFIX + entry.func_name - print "static %s (*%s)(%s) = 0;" % \ - (entry.return_type, ptr_name, entry.parameters) + print(f"static {entry.return_type} " + f"(*{ptr_name})({entry.parameters}) = 0;") - print "" - print "///" - print "/// W R A P P E R F U N C T I O N S" - print "///" - print "" + print("") + print("///") + print("/// W R A P P E R F U N C T I O N S") + print("///") + print("") for entry in entries: - print "%s %s(%s) {" % \ - (entry.return_type, entry.func_name, entry.parameters) + print(f"{entry.return_type} {entry.func_name}({entry.parameters}) {{") ptr_name = ENTRY_PREFIX + entry.func_name if entry.return_type != "void": - print " return %s(%s);" % (ptr_name, entry.call) + print(f" return {ptr_name}({entry.call});") else: - print " %s(%s);" % (ptr_name, entry.call) - print "}\n" + print(" {ptr_name}({entry.call});") + print("}\n") - print "" - print "///" - print "/// I N I T I A L I Z A T I O N F U N C T I O N" - print "///" - print "" + print("") + print("///") + print("/// I N I T I A L I Z A T I O N F U N C T I O N") + print("///") + print("") - print "int %s_dynlink_init(void* lib) {" % prefix_name + print(f"int {prefix_name}_dynlink_init(void* lib) {{") for entry in entries: ptr_name = ENTRY_PREFIX + entry.func_name - print " %s = (%s(*)(%s))dlsym(lib, \"%s\");" % \ - (ptr_name, - entry.return_type, - entry.parameters, - entry.func_name) - print " if (!%s) return -1;" % ptr_name - print " return 0;" - print "}" + print(f" {ptr_name} = ({entry.return_type}(*)({entry.parameters})) " + f"dlsym(lib, \"{entry.func_name}\");") + print(f" if (!{ptr_name}) return -1;") + print(" return 0;") + print("}") def gen_windows_def_file(entries): """Generate a windows DLL .def file. |entries| is a list of Entry instances. """ - print "EXPORTS" + print("EXPORTS") for entry in entries: - print " %s" % entry.func_name + print(" " + entry.func_name) def gen_unix_sym_file(entries): """Generate an ELF linker version file. |entries| is a list of Entry instances. """ - print "VERSION {" - print "\tglobal:" + print("VERSION {") + print("\tglobal:") for entry in entries: - print "\t\t%s;" % entry.func_name - print "\tlocal:" - print "\t\t*;" - print "};" + print(f"\t\t{entry.func_name};") + print("\tlocal:") + print("\t\t*;") + print("};") + def gen_symbols(entries, underscore): """Generate a list of symbols from |entries|, a list of Entry instances. @@ -244,7 +245,8 @@ def gen_symbols(entries, underscore): if underscore: prefix = "_" for entry in entries: - print "%s%s" % (prefix, entry.func_name) + print(prefix + entry.func_name) + def parse_file(filename, lines, mode): """Generate one of possible outputs from |filename|. |lines| must be a list @@ -254,7 +256,7 @@ def parse_file(filename, lines, mode): entries, prefix_name, verbatim, errors = parse_entries_file(lines) if errors: for error in errors: - print >> sys.stderr, "ERROR: %s:%s" % (filename, error) + print(f"ERROR: {filename}:{error}", file=sys.stderr) sys.exit(1) if not prefix_name: @@ -305,7 +307,7 @@ parser.add_argument("file", help=".entries file path") args = parser.parse_args() if not args.mode: - print >> sys.stderr, "ERROR: Please use --mode=, see --help." + print("ERROR: Please use --mode=, see --help.", file=sys.stderr) sys.exit(1) if args.output: -- cgit v1.2.3