anv: anv_entrypoints_gen.py: directly write files instead of piping
authorDylan Baker <dylan@pnwbakers.com>
Sat, 18 Feb 2017 00:59:42 +0000 (16:59 -0800)
committerDylan Baker <dylan@pnwbakers.com>
Wed, 22 Mar 2017 23:22:00 +0000 (16:22 -0700)
This changes the output to be written as a file rather than being piped.
This had one critical advantage, it encapsulates the encoding. This
prevents bugs where a symbol (generally unicode like © [copyright]) is
printed and the system being built on doesn't have a unicode locale.

v2: - Update Android.mk
v3: - Don't generate both files at once
    - Fix Android.mk
    - drop --outdir, since the filename is passed in as an argument

Signed-off-by: Dylan Baker <dylanx.c.baker@intel.com>
src/intel/Android.vulkan.mk
src/intel/Makefile.vulkan.am
src/intel/vulkan/anv_entrypoints_gen.py

index 0b6462e322eb102d99c316da5ffb4289768a41b0..bcf145554f83667703996bf23dc15c4fe5c139a1 100644 (file)
@@ -59,7 +59,8 @@ $(intermediates)/vulkan/dummy.c:
        $(hide) touch $@
 
 $(intermediates)/vulkan/anv_entrypoints.h:
-       $(VK_ENTRYPOINTS_SCRIPT) header --xml $(MESA_TOP)/src/vulkan/registry/vk.xml > $@
+       $(VK_ENTRYPOINTS_SCRIPT) header $@ --xml $(MESA_TOP)/src/vulkan/registry/vk.xml
+
 
 LOCAL_EXPORT_C_INCLUDE_DIRS := \
         $(intermediates)
@@ -179,7 +180,7 @@ LOCAL_WHOLE_STATIC_LIBRARIES := \
 LOCAL_GENERATED_SOURCES += $(intermediates)/vulkan/anv_entrypoints.c
 
 $(intermediates)/vulkan/anv_entrypoints.c:
-       $(VK_ENTRYPOINTS_SCRIPT) code --xml $(MESA_TOP)/src/vulkan/registry/vk.xml > $@
+       $(VK_ENTRYPOINTS_SCRIPT) code $@ --xml $(MESA_TOP)/src/vulkan/registry/vk.xml
 
 LOCAL_SHARED_LIBRARIES := libdrm_intel
 
index bf6b25b4580272464db727e1745292f88548ba43..96962861d8f5aae4ea42fce98dce60b8ecd0200b 100644 (file)
 vulkan_api_xml = $(top_srcdir)/src/vulkan/registry/vk.xml
 
 vulkan/anv_entrypoints.h : vulkan/anv_entrypoints_gen.py $(vulkan_api_xml)
-       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_entrypoints_gen.py header --xml $(vulkan_api_xml) > $@
+       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_entrypoints_gen.py header $@ --xml $(vulkan_api_xml)
 
 vulkan/anv_entrypoints.c : vulkan/anv_entrypoints_gen.py $(vulkan_api_xml)
-       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_entrypoints_gen.py code --xml $(vulkan_api_xml) > $@
+       $(AM_V_GEN)$(PYTHON2) $(srcdir)/vulkan/anv_entrypoints_gen.py code $@ --xml $(vulkan_api_xml)
 
 BUILT_SOURCES += $(VULKAN_GENERATED_FILES)
 CLEANFILES += \
index bf6b20951ff593ee92c0ac57738abdd0b010e95d..47dc44b55ddcc7672e39f4735ce5e6c49d92cc9d 100644 (file)
@@ -86,7 +86,7 @@ TEMPLATE_H = Template(textwrap.dedent("""\
     #endif // ${guard}
       % endif
     % endfor
-    """))
+    """), output_encoding='utf-8')
 
 TEMPLATE_C = Template(textwrap.dedent(u"""\
     /*
@@ -340,22 +340,23 @@ def gen_code(entrypoints):
             collisions[level] += 1
         mapping[h & HASH_MASK] = num
 
-    print TEMPLATE_C.render(entrypoints=entrypoints,
-                            offsets=offsets,
-                            collisions=collisions,
-                            mapping=mapping,
-                            hash_mask=HASH_MASK,
-                            prime_step=PRIME_STEP,
-                            prime_factor=PRIME_FACTOR,
-                            none=NONE,
-                            hash_size=HASH_SIZE,
-                            filename=os.path.basename(__file__))
+    return TEMPLATE_C.render(entrypoints=entrypoints,
+                             offsets=offsets,
+                             collisions=collisions,
+                             mapping=mapping,
+                             hash_mask=HASH_MASK,
+                             prime_step=PRIME_STEP,
+                             prime_factor=PRIME_FACTOR,
+                             none=NONE,
+                             hash_size=HASH_SIZE,
+                             filename=os.path.basename(__file__))
 
 
 def main():
     parser = argparse.ArgumentParser()
     parser.add_argument('target', choices=['header', 'code'],
                         help='Which file to generate.')
+    parser.add_argument('file', help='Where to write the file.')
     parser.add_argument('--xml', help='Vulkan API XML file.')
     args = parser.parse_args()
 
@@ -375,10 +376,12 @@ def main():
     # For outputting entrypoints.h we generate a anv_EntryPoint() prototype
     # per entry point.
     if args.target == 'header':
-        print TEMPLATE_H.render(entrypoints=entrypoints,
-                                filename=os.path.basename(__file__))
+        with open(args.file, 'wb') as f:
+            f.write(TEMPLATE_H.render(entrypoints=entrypoints,
+                                      filename=os.path.basename(__file__)))
     else:
-        gen_code(entrypoints)
+        with open(args.file, 'wb') as f:
+            f.write(gen_code(entrypoints))
 
 
 if __name__ == '__main__':