aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-12-27 11:11:54 -0700
committerMark Lobodzinski <mark@lunarg.com>2016-12-28 07:43:53 -0700
commita81b6e3926c19aae4daa36ce1e765a0eed9796a1 (patch)
tree0029d5989dbd34e239a3de598b8bc909fb73acaa /scripts
parent6e992361f8e540e1ea0e62301e34d4c346e84ed3 (diff)
downloadusermoji-a81b6e3926c19aae4daa36ce1e765a0eed9796a1.tar.xz
scripts: Add helper file generator
This vk.xml generator will create the enum_string_helper header file, as well as the other vk_helper.py-generated files in the future. Change-Id: Ia19a2c6fd23c1df2af3ded66e2e80b88159a7d85
Diffstat (limited to 'scripts')
-rw-r--r--scripts/helper_file_generator.py172
1 files changed, 172 insertions, 0 deletions
diff --git a/scripts/helper_file_generator.py b/scripts/helper_file_generator.py
new file mode 100644
index 00000000..707e3d0c
--- /dev/null
+++ b/scripts/helper_file_generator.py
@@ -0,0 +1,172 @@
+#!/usr/bin/python3 -i
+#
+# Copyright (c) 2015-2016 The Khronos Group Inc.
+# Copyright (c) 2015-2016 Valve Corporation
+# Copyright (c) 2015-2016 LunarG, Inc.
+# Copyright (c) 2015-2016 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Author: Mark Lobodzinski <mark@lunarg.com>
+
+import os,re,sys
+import xml.etree.ElementTree as etree
+from generator import *
+from collections import namedtuple
+
+#
+# HelperFileOutputGeneratorOptions - subclass of GeneratorOptions.
+class HelperFileOutputGeneratorOptions(GeneratorOptions):
+ def __init__(self,
+ filename = None,
+ directory = '.',
+ apiname = None,
+ profile = None,
+ versions = '.*',
+ emitversions = '.*',
+ defaultExtensions = None,
+ addExtensions = None,
+ removeExtensions = None,
+ sortProcedure = regSortFeatures,
+ prefixText = "",
+ genFuncPointers = True,
+ protectFile = True,
+ protectFeature = True,
+ protectProto = None,
+ protectProtoStr = None,
+ apicall = '',
+ apientry = '',
+ apientryp = '',
+ alignFuncParam = 0,
+ library_name = '',
+ helper_file_type = ''):
+ GeneratorOptions.__init__(self, filename, directory, apiname, profile,
+ versions, emitversions, defaultExtensions,
+ addExtensions, removeExtensions, sortProcedure)
+ self.prefixText = prefixText
+ self.genFuncPointers = genFuncPointers
+ self.prefixText = None
+ self.protectFile = protectFile
+ self.protectFeature = protectFeature
+ self.protectProto = protectProto
+ self.protectProtoStr = protectProtoStr
+ self.apicall = apicall
+ self.apientry = apientry
+ self.apientryp = apientryp
+ self.alignFuncParam = alignFuncParam
+ self.library_name = library_name
+ self.helper_file_type = helper_file_type
+#
+# HelperFileOutputGenerator - subclass of OutputGenerator.
+# Outputs Vulkan helper files
+class HelperFileOutputGenerator(OutputGenerator):
+ """Generate Windows def file based on XML element attributes"""
+ def __init__(self,
+ errFile = sys.stderr,
+ warnFile = sys.stderr,
+ diagFile = sys.stdout):
+ OutputGenerator.__init__(self, errFile, warnFile, diagFile)
+ # Internal state - accumulators for different inner block text
+ self.enum_output = '' # string built up of enum string routines
+ self.enum_list = ()
+ #
+ # Called once at the beginning of each run
+ def beginFile(self, genOpts):
+ OutputGenerator.beginFile(self, genOpts)
+ # User-supplied prefix text, if any (list of strings)
+ if (genOpts.prefixText):
+ for s in genOpts.prefixText:
+ write(s, file=self.outFile)
+ self.helper_file_type = genOpts.helper_file_type
+ self.library_name = genOpts.library_name
+ # File Comment
+ file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
+ file_comment += '// See helper_file_generator.py for modifications\n'
+ write(file_comment, file=self.outFile)
+ # Copyright Notice
+ copyright = ''
+ copyright += '\n'
+ copyright += '/***************************************************************************\n'
+ copyright += ' *\n'
+ copyright += ' * Copyright (c) 2015-2016 The Khronos Group Inc.\n'
+ copyright += ' * Copyright (c) 2015-2016 Valve Corporation\n'
+ copyright += ' * Copyright (c) 2015-2016 LunarG, Inc.\n'
+ copyright += ' * Copyright (c) 2015-2016 Google Inc.\n'
+ copyright += ' *\n'
+ copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
+ copyright += ' * you may not use this file except in compliance with the License.\n'
+ copyright += ' * You may obtain a copy of the License at\n'
+ copyright += ' *\n'
+ copyright += ' * http://www.apache.org/licenses/LICENSE-2.0\n'
+ copyright += ' *\n'
+ copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
+ copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
+ copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
+ copyright += ' * See the License for the specific language governing permissions and\n'
+ copyright += ' * limitations under the License.\n'
+ copyright += ' *\n'
+ copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
+ copyright += ' * Author: Courtney Goeltzenleuchter <courtney@google.com>\n'
+ copyright += ' * Author: Tobin Ehlis <tobin@google.com>\n'
+ copyright += ' *\n'
+ copyright += ' ****************************************************************************/\n'
+ write(copyright, file=self.outFile)
+ #
+ # Write generate and write def file content to output file
+ def endFile(self):
+ dest_file = ''
+ dest_file += self.OutputDestFile()
+ write(dest_file, file=self.outFile);
+ # Finish processing in superclass
+ OutputGenerator.endFile(self)
+ #
+ # Grab group (e.g. C "enum" type) info to output for enum-string conversion helper
+ def genGroup(self, groupinfo, groupName):
+ OutputGenerator.genGroup(self, groupinfo, groupName)
+ groupElem = groupinfo.elem
+ value_list = []
+ for elem in groupElem.findall('enum'):
+ #indent = elem.get('name')
+ value_list.append(elem.get('name'))
+ if value_list is not None:
+ self.enum_output += self.GenerateEnumStringConversion(groupName, value_list)
+ #
+ # Create a routine to convert an enumerated value into a string
+ def GenerateEnumStringConversion(self, groupName, value_list):
+ outstring = '\n'
+ outstring += 'static inline const char* string_%s(%s input_value)\n' % (groupName, groupName)
+ outstring += '{\n'
+ outstring += ' switch ((%s)input_value)\n' % groupName
+ outstring += ' {\n'
+
+ for item in value_list:
+ outstring += ' case %s:\n' % item
+ outstring += ' return "%s";\n' % item
+ outstring += ' default:\n'
+ outstring += ' return "Unhandled %s";\n' % groupName
+ outstring += ' }\n'
+ outstring += '}\n'
+ return outstring
+ #
+ # Create a helper file and return it as a string
+ def OutputDestFile(self):
+ out_file_entries = '\n'
+ out_file_entries += '#pragma once\n'
+ out_file_entries += '#ifdef _WIN32\n'
+ out_file_entries += '#pragma warning( disable : 4065 )\n'
+ out_file_entries += '#endif\n'
+ out_file_entries += '\n'
+ out_file_entries += '#include <vulkan/vulkan.h>\n'
+ out_file_entries += '\n'
+ out_file_entries += self.enum_output
+ return out_file_entries