From: Emil Velikov <emil.veli...@collabora.com>

Rather than parsing through the same files (public headers) twice, tweak
the python script to create both files at the same time.

Chances are that if the public headers change, both files will need to
be regenerated.

Note to the python masters: this patch aims to be the least evasive
change. Feel free to change/rewrite things to your liking.

Signed-off-by: Emil Velikov <emil.veli...@collabora.com>
---
 src/intel/vulkan/Makefile.am            |  8 +++----
 src/intel/vulkan/anv_entrypoints_gen.py | 41 ++++++++++++++++++++++++---------
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/src/intel/vulkan/Makefile.am b/src/intel/vulkan/Makefile.am
index 360e97f..110961e 100644
--- a/src/intel/vulkan/Makefile.am
+++ b/src/intel/vulkan/Makefile.am
@@ -126,11 +126,9 @@ VULKAN_LIB_DEPS += \
 
 libvulkan_intel_la_SOURCES = $(VULKAN_GEM_FILES)
 
-anv_entrypoints.h : anv_entrypoints_gen.py $(vulkan_include_HEADERS)
-       $(AM_V_GEN) cat $(vulkan_include_HEADERS) | $(CPP) $(AM_CPPFLAGS) - | 
$(PYTHON2) $< header > $@
-
-anv_entrypoints.c : anv_entrypoints_gen.py $(vulkan_include_HEADERS)
-       $(AM_V_GEN) cat $(vulkan_include_HEADERS) | $(CPP) $(AM_CPPFLAGS) - | 
$(PYTHON2) $< code > $@
+anv_entrypoints.c anv_entrypoints.h : anv_entrypoints_gen.py 
$(vulkan_include_HEADERS)
+       $(AM_V_GEN) cat $(vulkan_include_HEADERS) | $(CPP) $(AM_CPPFLAGS) - | \
+       $(PYTHON2) $(srcdir)/anv_entrypoints_gen.py $(builddir)
 
 CLEANFILES = $(BUILT_SOURCES)
 
diff --git a/src/intel/vulkan/anv_entrypoints_gen.py 
b/src/intel/vulkan/anv_entrypoints_gen.py
index cedecfe..19bfb93 100644
--- a/src/intel/vulkan/anv_entrypoints_gen.py
+++ b/src/intel/vulkan/anv_entrypoints_gen.py
@@ -22,7 +22,7 @@
 # IN THE SOFTWARE.
 #
 
-import fileinput, re, sys
+import fileinput, re, sys, os
 
 # Each function typedef in the vulkan.h header is all on one line and matches
 # this regepx. We hope that won't change.
@@ -51,15 +51,21 @@ def hash(name):
 
     return h
 
-opt_header = False
-opt_code = False
+if len(sys.argv[1:]) != 1:
+    print "Usage: %s <output_directory>" % sys.argv[0]
+    exit(1)
+
+output_dir = sys.argv[1]
+if not os.path.isdir(output_dir):
+    if os.path.exists(output_dir):
+        print "ERROR: Invalid output directory: %s" % output_dir
+        exit(1)
+
+sys.argv.pop()
+# Output path exists, now just run the template
+output_file = os.sep.join([output_dir, 'anv_entrypoints.c'])
+output_header = os.sep.join([output_dir, 'anv_entrypoints.h'])
 
-if (sys.argv[1] == "header"):
-    opt_header = True
-    sys.argv.pop()
-elif (sys.argv[1] == "code"):
-    opt_code = True
-    sys.argv.pop()
 
 # Parse the entry points in the header
 
@@ -77,7 +83,11 @@ for line in fileinput.input():
 # For outputting entrypoints.h we generate a anv_EntryPoint() prototype
 # per entry point.
 
-if opt_header:
+def generate_header(output_header):
+    orig_stdout = sys.stdout
+    hdr = file(output_header, 'w')
+    sys.stdout = hdr
+
     print "/* This file generated from vk_gen.py, don't edit directly. */\n"
 
     print "struct anv_dispatch_table {"
@@ -100,9 +110,15 @@ if opt_header:
         print "%s gen8_%s%s;" % (type, name, args)
         print "%s gen9_%s%s;" % (type, name, args)
         print "%s anv_validate_%s%s;" % (type, name, args)
-    exit()
 
+    sys.stdout = orig_stdout
+    hdr.close()
 
+generate_header(output_header)
+
+orig_stdout = sys.stdout
+src = file(output_file, 'w')
+sys.stdout = src
 
 print """/*
  * Copyright © 2015 Intel Corporation
@@ -321,3 +337,6 @@ anv_lookup_entrypoint(const char *name)
    return anv_resolve_entrypoint(i);
 }
 """ % (prime_factor, prime_step, hash_mask)
+
+sys.stdout = orig_stdout
+src.close()
-- 
2.8.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to