summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDylan Baker <[email protected]>2017-02-17 16:59:42 -0800
committerDylan Baker <[email protected]>2017-03-22 16:22:00 -0700
commit383032c70068938575f609fef0d442ba3e4d7c68 (patch)
tree0d344e9dc184439d5d9ce1f6c58674abd37659a7
parenta2a2bad2e263a927ceb22b5b84cf00b15cb504db (diff)
anv: anv_entrypoints_gen.py: directly write files instead of piping
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 <[email protected]>
-rw-r--r--src/intel/Android.vulkan.mk5
-rw-r--r--src/intel/Makefile.vulkan.am4
-rw-r--r--src/intel/vulkan/anv_entrypoints_gen.py31
3 files changed, 22 insertions, 18 deletions
diff --git a/src/intel/Android.vulkan.mk b/src/intel/Android.vulkan.mk
index 0b6462e322e..bcf145554f8 100644
--- a/src/intel/Android.vulkan.mk
+++ b/src/intel/Android.vulkan.mk
@@ -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
diff --git a/src/intel/Makefile.vulkan.am b/src/intel/Makefile.vulkan.am
index bf6b25b4580..96962861d8f 100644
--- a/src/intel/Makefile.vulkan.am
+++ b/src/intel/Makefile.vulkan.am
@@ -25,10 +25,10 @@
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 += \
diff --git a/src/intel/vulkan/anv_entrypoints_gen.py b/src/intel/vulkan/anv_entrypoints_gen.py
index bf6b20951ff..47dc44b55dd 100644
--- a/src/intel/vulkan/anv_entrypoints_gen.py
+++ b/src/intel/vulkan/anv_entrypoints_gen.py
@@ -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__':