layers: update codegen to split struct_size_helper into .h and .c files.
* Also added a copyright notice to all the generated files.
* Splitting the definition from the declaration was needed to better utilize these helpers in glave.
diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt
index 19b13e2..4ac923c 100644
--- a/layers/CMakeLists.txt
+++ b/layers/CMakeLists.txt
@@ -66,6 +66,7 @@
xgl_struct_string_helper_no_addr.h
xgl_struct_string_helper_no_addr_cpp.h
xgl_struct_size_helper.h
+ xgl_struct_size_helper.c
xgl_struct_wrappers.h
xgl_struct_wrappers.cpp
)
@@ -80,7 +81,8 @@
xgl_struct_string_helper_cpp.h
xgl_struct_string_helper_no_addr_cpp.h
xgl_struct_size_helper.h
- xgl_struct_wrappers.h
+ xgl_struct_size_helper.c
+ xgl_struct_wrappers.h
xgl_struct_wrappers.cpp
xgl_struct_graphviz_helper.h
)
diff --git a/xgl_helper.py b/xgl_helper.py
index 9443c0f..14f1902 100755
--- a/xgl_helper.py
+++ b/xgl_helper.py
@@ -356,7 +356,9 @@
self.shcppg = CommonFileGen(self.string_helper_cpp_filename)
self.vhg = CommonFileGen(self.validate_helper_filename)
self.size_helper_filename = os.path.join(out_dir, self.api+"_struct_size_helper.h")
+ self.size_helper_c_filename = os.path.join(out_dir, self.api+"_struct_size_helper.c")
self.size_helper_gen = CommonFileGen(self.size_helper_filename)
+ self.size_helper_c_gen = CommonFileGen(self.size_helper_c_filename)
#print(self.header_filename)
self.header_txt = ""
self.definition_txt = ""
@@ -428,8 +430,42 @@
self.size_helper_gen.setBody(self._generateSizeHelperFunctions())
self.size_helper_gen.generate()
+ def generateSizeHelperC(self):
+ print("Generating struct size helper c")
+ self.size_helper_c_gen.setCopyright(self._generateCopyright())
+ self.size_helper_c_gen.setHeader(self._generateSizeHelperHeaderC())
+ self.size_helper_c_gen.setBody(self._generateSizeHelperFunctionsC())
+ self.size_helper_c_gen.generate()
+
def _generateCopyright(self):
- return "//This is the copyright\n"
+ copyright = []
+ copyright.append('/* THIS FILE IS GENERATED. DO NOT EDIT. */');
+ copyright.append('');
+ copyright.append('/*');
+ copyright.append(' * XGL');
+ copyright.append(' *');
+ copyright.append(' * Copyright (C) 2014 LunarG, Inc.');
+ copyright.append(' *');
+ copyright.append(' * Permission is hereby granted, free of charge, to any person obtaining a');
+ copyright.append(' * copy of this software and associated documentation files (the "Software"),');
+ copyright.append(' * to deal in the Software without restriction, including without limitation');
+ copyright.append(' * the rights to use, copy, modify, merge, publish, distribute, sublicense,');
+ copyright.append(' * and/or sell copies of the Software, and to permit persons to whom the');
+ copyright.append(' * Software is furnished to do so, subject to the following conditions:');
+ copyright.append(' *');
+ copyright.append(' * The above copyright notice and this permission notice shall be included');
+ copyright.append(' * in all copies or substantial portions of the Software.');
+ copyright.append(' *');
+ copyright.append(' * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR');
+ copyright.append(' * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,');
+ copyright.append(' * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL');
+ copyright.append(' * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER');
+ copyright.append(' * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING');
+ copyright.append(' * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER');
+ copyright.append(' * DEALINGS IN THE SOFTWARE.');
+ copyright.append(' */');
+ copyright.append('');
+ return "\n".join(copyright)
def _generateCppHeader(self):
header = []
@@ -978,12 +1014,17 @@
def _generateSizeHelperFunctions(self):
sh_funcs = []
- # We do two passes, first pass just generates prototypes for all the functsions
+ # just generates prototypes for all the functions
for s in sorted(self.struct_dict):
sh_funcs.append('size_t %s(const %s* pStruct);' % (self._get_size_helper_func_name(s), typedef_fwd_dict[s]))
- sh_funcs.append('\n')
+ return "\n".join(sh_funcs)
+
+
+ def _generateSizeHelperFunctionsC(self):
+ sh_funcs = []
+ # generate function definitions
for s in sorted(self.struct_dict):
- skip_list = [] # Used when struct elements need to be skipped b/c size already accounted for
+ skip_list = [] # Used when struct elements need to be skipped b/c size already accounted for
sh_funcs.append('size_t %s(const %s* pStruct)\n{' % (self._get_size_helper_func_name(s), typedef_fwd_dict[s]))
indent = ' '
sh_funcs.append('%ssize_t structSize = 0;' % (indent))
@@ -1089,6 +1130,15 @@
header.append("size_t get_dynamic_struct_size(const void* pStruct);\n")
return "".join(header)
+ def _generateSizeHelperHeaderC(self):
+ header = []
+ header.append('#include "xgl_struct_size_helper.h"')
+ header.append('#include <string.h>')
+ header.append('#include <assert.h>')
+ header.append('\n// Function definitions\n')
+ return "\n".join(header)
+
+
def _generateHeader(self):
header = []
header.append("//#includes, #defines, globals and such...\n")
@@ -1547,8 +1597,9 @@
sw.generateStringHelperCpp()
sw.set_no_addr(False)
sw.generateStringHelperCpp()
- sw.set_include_headers(["stdio.h", "stdlib.h"])
+ sw.set_include_headers(["stdio.h", "stdlib.h", "xgl.h"])
sw.generateSizeHelper()
+ sw.generateSizeHelperC()
if opts.gen_cmake:
cmg = CMakeGen(sw, os.path.dirname(enum_sh_filename))
cmg.generate()