diff options
| author | Tobin Ehlis <tobin@lunarg.com> | 2015-03-12 14:50:40 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobin@lunarg.com> | 2015-03-13 12:44:33 -0600 |
| commit | dfdd145d292073f5876570acabd7623b50b9c02b (patch) | |
| tree | 87179c0af73daf6998f2168b119dfd0489d0dd15 | |
| parent | 3e6580e96b6b52eccdd1c927506d8a53f59ab7a6 (diff) | |
| download | usermoji-dfdd145d292073f5876570acabd7623b50b9c02b.tar.xz | |
glave: Add codgen helper for struct size calculation and use for trace packet creation
| -rwxr-xr-x | glave-generate.py | 169 | ||||
| -rw-r--r-- | layers/CMakeLists.txt | 1 | ||||
| -rwxr-xr-x | xgl_helper.py | 105 |
3 files changed, 114 insertions, 161 deletions
diff --git a/glave-generate.py b/glave-generate.py index 64e5310c..876c4c28 100755 --- a/glave-generate.py +++ b/glave-generate.py @@ -416,14 +416,14 @@ class Subcommand(object): ps = [] skip_list = [] # store params that are already accounted for so we don't count them twice # Dict of specific params with unique custom sizes - custom_size_dict = {'xgl_shader_create_info': '((pCreateInfo != NULL) ? pCreateInfo->codeSize : 0) + sizeof(XGL_SHADER_CREATE_INFO)', - 'xgl_graphics_pipeline_create_info': '(calculate_pipeline_state_size(pCreateInfo->pNext)) + sizeof(XGL_GRAPHICS_PIPELINE_CREATE_INFO)', - 'pUpdateChain': 'sizeof(XGL_DESCRIPTOR_SET) + (calculate_update_descriptors_size(pUpdateChain))', + custom_size_dict = {'xgl_shader_create_info': 'get_struct_chain_size((void*)pCreateInfo)', + 'xgl_graphics_pipeline_create_info': 'get_struct_chain_size((void*)pCreateInfo)', + 'pUpdateChain': 'get_struct_chain_size(pUpdateChain)', 'pSetBindPoints': '(XGL_SHADER_STAGE_COMPUTE * sizeof(uint32_t))', # Accounting for largest possible array - 'xgl_descriptor_set_layout_create_info': '(calculate_create_ds_layout_size(pSetLayoutInfoList))', - 'xgl_cmd_buffer_begin_info': 'sizeof(XGL_CMD_BUFFER_BEGIN_INFO) + (calculate_begin_cmdbuf_size(pBeginInfo->pNext))', - 'xgl_memory_alloc_info': 'sizeof(XGL_MEMORY_ALLOC_INFO) + calculate_alloc_memory_size(pAllocInfo->pNext)', - 'xgl_compute_pipeline_create_info': 'sizeof(XGL_COMPUTE_PIPELINE_CREATE_INFO) + calculate_pipeline_state_size(pCreateInfo->pNext)'} + 'xgl_descriptor_set_layout_create_info': 'get_struct_chain_size((void*)pSetLayoutInfoList)', + 'xgl_cmd_buffer_begin_info': 'get_struct_chain_size((void*)pBeginInfo)', + 'xgl_memory_alloc_info': 'get_struct_chain_size((void*)pAllocInfo)', + 'xgl_compute_pipeline_create_info': 'get_struct_chain_size((void*)pCreateInfo)'} for p in params: #First handle custom cases if p.ty.strip('*').replace('const ', '').lower() in custom_size_dict: @@ -950,27 +950,6 @@ class Subcommand(object): hf_body.append(' return;') hf_body.append('}') hf_body.append('') - hf_body.append('static size_t calculate_begin_cmdbuf_size(const XGL_CMD_BUFFER_BEGIN_INFO* pNext)') - hf_body.append('{') - hf_body.append(' size_t siz = 0;') - hf_body.append(' while (pNext != NULL)') - hf_body.append(' {') - hf_body.append(' switch (pNext->sType)') - hf_body.append(' {') - hf_body.append(' case XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO:') - hf_body.append(' {') - hf_body.append(' siz += sizeof(XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO);') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' default:') - hf_body.append(' glv_LogError("calculate_begin_cmdbuf_size() bad internal state sType\\n");') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' pNext = (XGL_CMD_BUFFER_BEGIN_INFO*)pNext->pNext;') - hf_body.append(' }') - hf_body.append(' return siz;') - hf_body.append('}') - hf_body.append('') hf_body.append('static void add_alloc_memory_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)') hf_body.append('{') hf_body.append(' const XGL_MEMORY_ALLOC_INFO* pInNow = pIn;') @@ -1004,32 +983,6 @@ class Subcommand(object): hf_body.append(' return;') hf_body.append('}') hf_body.append('') - hf_body.append('static size_t calculate_alloc_memory_size(const XGL_MEMORY_ALLOC_INFO* pNext)') - hf_body.append('{') - hf_body.append(' size_t siz = 0;') - hf_body.append(' while (pNext != NULL)') - hf_body.append(' {') - hf_body.append(' switch (pNext->sType)') - hf_body.append(' {') - hf_body.append(' case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO:') - hf_body.append(' {') - hf_body.append(' siz += sizeof(XGL_MEMORY_ALLOC_BUFFER_INFO);') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' case XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO:') - hf_body.append(' {') - hf_body.append(' siz += sizeof(XGL_MEMORY_ALLOC_IMAGE_INFO);') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' default:') - hf_body.append(' glv_LogError("calculate_alloc_memory_size() bad internal state sType\\n");') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' pNext = (XGL_MEMORY_ALLOC_INFO*)pNext->pNext;') - hf_body.append(' }') - hf_body.append(' return siz;') - hf_body.append('}') - hf_body.append('') hf_body.append('static size_t calculate_memory_barrier_size(uint32_t mbCount, const void** ppMemBarriers)') hf_body.append('{') hf_body.append(' uint32_t i, siz=0;') @@ -1052,22 +1005,6 @@ class Subcommand(object): hf_body.append(' }') hf_body.append(' return siz;') hf_body.append('}') - hf_body.append('static size_t calculate_pipeline_shader_size(const XGL_PIPELINE_SHADER* shader)') - hf_body.append('{') - hf_body.append(' size_t size = 0;') - hf_body.append(' size += sizeof(XGL_PIPELINE_SHADER);') - hf_body.append(' // constant buffers') - hf_body.append(' if (shader->linkConstBufferCount > 0 && shader->pLinkConstBufferInfo != NULL)') - hf_body.append(' {') - hf_body.append(' uint32_t i;') - hf_body.append(' for (i = 0; i < shader->linkConstBufferCount; i++)') - hf_body.append(' {') - hf_body.append(' size += sizeof(XGL_LINK_CONST_BUFFER);') - hf_body.append(' size += shader->pLinkConstBufferInfo[i].bufferSize;') - hf_body.append(' }') - hf_body.append(' }') - hf_body.append(' return size;') - hf_body.append('}') hf_body.append('') hf_body.append('static void add_pipeline_shader_to_trace_packet(glv_trace_packet_header* pHeader, XGL_PIPELINE_SHADER* packetShader, const XGL_PIPELINE_SHADER* paramShader)') hf_body.append('{') @@ -1097,18 +1034,6 @@ class Subcommand(object): hf_body.append(' }') hf_body.append('}') hf_body.append('') - hf_body.append('static size_t calculate_create_ds_layout_size(const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo)') - hf_body.append('{') - hf_body.append(' size_t update_size = 0;') - hf_body.append(' XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pTrav = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pCreateInfo;') - hf_body.append(' while (pTrav)') - hf_body.append(' {') - hf_body.append(' update_size += sizeof(XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO);') - hf_body.append(' pTrav = (XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*)pTrav->pNext;') - hf_body.append(' }') - hf_body.append(' return update_size;') - hf_body.append('}') - hf_body.append('') hf_body.append('static void add_create_ds_layout_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)') hf_body.append('{') hf_body.append(' const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pInNow = pIn;') @@ -1125,47 +1050,6 @@ class Subcommand(object): hf_body.append(' return;') hf_body.append('}') hf_body.append('') - hf_body.append('static size_t calculate_update_descriptors_size(const void* pUpdateChain)') - hf_body.append('{') - hf_body.append(' const XGL_UPDATE_SAMPLERS* pNext = pUpdateChain;') - hf_body.append(' size_t totalUpdateSize = 0;') - hf_body.append(' while (pNext)') - hf_body.append(' {') - hf_body.append(' switch (pNext->sType)') - hf_body.append(' {') - hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_SAMPLERS:') - hf_body.append(' {') - hf_body.append(' totalUpdateSize += sizeof(XGL_UPDATE_SAMPLERS) + ((XGL_UPDATE_SAMPLERS*)pNext)->count * sizeof(XGL_SAMPLER);') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES:') - hf_body.append(' {') - hf_body.append(' totalUpdateSize += sizeof(XGL_UPDATE_SAMPLER_TEXTURES) + ((XGL_UPDATE_SAMPLER_TEXTURES*)pNext)->count * (sizeof(XGL_SAMPLER_IMAGE_VIEW_INFO) + sizeof(XGL_IMAGE_VIEW_ATTACH_INFO));') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_IMAGES:') - hf_body.append(' {') - hf_body.append(' totalUpdateSize += sizeof(XGL_UPDATE_IMAGES) + (((XGL_UPDATE_IMAGES*)pNext)->count * (sizeof(XGL_IMAGE_VIEW_ATTACH_INFO) + sizeof(XGL_IMAGE_VIEW_ATTACH_INFO*)));') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_BUFFERS:') - hf_body.append(' {') - hf_body.append(' totalUpdateSize += sizeof(XGL_UPDATE_BUFFERS) + (((XGL_UPDATE_BUFFERS*)pNext)->count * (sizeof(XGL_BUFFER_VIEW_ATTACH_INFO) + sizeof(XGL_BUFFER_VIEW_ATTACH_INFO*)));') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' case XGL_STRUCTURE_TYPE_UPDATE_AS_COPY:') - hf_body.append(' {') - hf_body.append(' totalUpdateSize += sizeof(XGL_UPDATE_AS_COPY);') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' default:') - hf_body.append(' assert(0);') - hf_body.append(' }') - hf_body.append(' pNext = (XGL_UPDATE_SAMPLERS*)pNext->pNext;') - hf_body.append(' }') - hf_body.append(' return totalUpdateSize;') - hf_body.append('}') - hf_body.append('') hf_body.append('static void add_update_descriptors_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)') hf_body.append('{') hf_body.append(' const XGL_UPDATE_SAMPLERS* pInNow = pIn;') @@ -1248,14 +1132,6 @@ class Subcommand(object): hf_body.append(' return;') hf_body.append('}') hf_body.append('') - hf_body.append('static size_t calculate_pipeline_state_size(const void* pState)') - hf_body.append('{') - hf_body.append(' const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pNext = pState;') - hf_body.append(' size_t totalStateSize = 0;') - hf_body.append(' while (pNext)') - hf_body.append(' {') - hf_body.append(' switch (pNext->sType)') - hf_body.append(' {') pipe_state_list = ['IA_STATE_CREATE_INFO', 'TESS_STATE_CREATE_INFO', 'RS_STATE_CREATE_INFO', @@ -1263,36 +1139,6 @@ class Subcommand(object): 'VP_STATE_CREATE_INFO', 'MS_STATE_CREATE_INFO' ] - for pipe_state in pipe_state_list: - hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_%s:' % pipe_state) - hf_body.append(' totalStateSize += sizeof(XGL_PIPELINE_%s);' % pipe_state) - hf_body.append(' break;') - hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO:') - hf_body.append(' {') - hf_body.append(' totalStateSize += (sizeof(XGL_PIPELINE_CB_STATE_CREATE_INFO) + ((XGL_PIPELINE_CB_STATE_CREATE_INFO *) pNext)->attachmentCount * sizeof(XGL_PIPELINE_CB_ATTACHMENT_STATE));') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:') - hf_body.append(' {') - hf_body.append(' const XGL_PIPELINE_SHADER_STAGE_CREATE_INFO* pShaderStage = (const XGL_PIPELINE_SHADER_STAGE_CREATE_INFO*)pNext;') - hf_body.append(' totalStateSize += (sizeof(XGL_PIPELINE_SHADER_STAGE_CREATE_INFO) + calculate_pipeline_shader_size(&pShaderStage->shader));') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' case XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO:') - hf_body.append(' {') - hf_body.append(' const XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO* pVi = (const XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO*)pNext;') - hf_body.append(' totalStateSize += sizeof(XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO) + pVi->bindingCount * sizeof(XGL_VERTEX_INPUT_BINDING_DESCRIPTION)') - hf_body.append(' + pVi->attributeCount * sizeof(XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION);') - hf_body.append(' break;') - hf_body.append(' }') - hf_body.append(' default:') - hf_body.append(' assert(0);') - hf_body.append(' }') - hf_body.append(' pNext = (XGL_GRAPHICS_PIPELINE_CREATE_INFO*)pNext->pNext;') - hf_body.append(' }') - hf_body.append(' return totalStateSize;') - hf_body.append('}') - hf_body.append('') hf_body.append('static void add_pipeline_state_to_trace_packet(glv_trace_packet_header* pHeader, void** ppOut, const void* pIn)') hf_body.append('{') hf_body.append(' const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pInNow = pIn;') @@ -3551,6 +3397,7 @@ class GlaveTraceC(Subcommand): header_txt.append('#include "glvtrace_xgl_xglwsix11ext.h"') header_txt.append('#include "glv_interconnect.h"') header_txt.append('#include "glv_filelike.h"') + header_txt.append('#include "xgl_struct_size_helper.h"') header_txt.append('#ifdef WIN32') header_txt.append('#include "mhook/mhook-lib/mhook.h"') header_txt.append('#endif') diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt index 774574c1..c8c6ca72 100644 --- a/layers/CMakeLists.txt +++ b/layers/CMakeLists.txt @@ -65,6 +65,7 @@ run_xgl_helper(gen_struct_wrappers xgl_struct_string_helper_cpp.h xgl_struct_string_helper_no_addr.h xgl_struct_string_helper_no_addr_cpp.h + xgl_struct_size_helper.h xgl_struct_wrappers.h xgl_struct_wrappers.cpp ) diff --git a/xgl_helper.py b/xgl_helper.py index 3258cea8..56ce09b3 100755 --- a/xgl_helper.py +++ b/xgl_helper.py @@ -354,6 +354,8 @@ class StructWrapperGen: self.shg = CommonFileGen(self.string_helper_filename) 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_gen = CommonFileGen(self.size_helper_filename) #print(self.header_filename) self.header_txt = "" self.definition_txt = "" @@ -418,6 +420,13 @@ class StructWrapperGen: self.vhg.setBody(self._generateValidateHelperFunctions()) self.vhg.generate() + def generateSizeHelper(self): + print("Generating struct size helper") + self.size_helper_gen.setCopyright(self._generateCopyright()) + self.size_helper_gen.setHeader(self._generateSizeHelperHeader()) + self.size_helper_gen.setBody(self._generateSizeHelperFunctions()) + self.size_helper_gen.generate() + def _generateCopyright(self): return "//This is the copyright\n" @@ -481,6 +490,9 @@ class StructWrapperGen: def _get_vh_func_name(self, struct): return self._get_func_name(struct, 'validate') + def _get_size_helper_func_name(self, struct): + return self._get_func_name(struct, 'size') + # Return elements to create formatted string for given struct member def _get_struct_print_formatted(self, struct_member, pre_var_name="prefix", postfix = "\\n", struct_var_name="pStruct", struct_ptr=True, print_array=False): struct_op = "->" @@ -963,6 +975,97 @@ class StructWrapperGen: #header.append("char* dynamic_display(const void* pStruct, const char* prefix);\n") return "".join(header) + def _generateSizeHelperFunctions(self): + sh_funcs = [] + # We do two passes, first pass just generates prototypes for all the functsions + for s in 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') + for s in self.struct_dict: + 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)) + sh_funcs.append('%sif (pStruct) {' % (indent)) + indent = ' ' + sh_funcs.append('%sstructSize = sizeof(%s);' % (indent, typedef_fwd_dict[s])) + i_decl = False + for m in sorted(self.struct_dict[s]): + if m in skip_list: + continue + if self.struct_dict[s][m]['dyn_array']: + if self.struct_dict[s][m]['full_type'].count('*') > 1: + if not is_type(self.struct_dict[s][m]['type'], 'struct') and not 'char' in self.struct_dict[s][m]['type'].lower(): + sh_funcs.append('%sstructSize += pStruct->%s*(sizeof(%s*) + sizeof(%s));' % (indent, self.struct_dict[s][m]['array_size'], self.struct_dict[s][m]['type'], self.struct_dict[s][m]['type'])) + else: # This is an array of char* or array of struct ptrs + if not i_decl: + sh_funcs.append('%suint32_t i = 0;' % (indent)) + i_decl = True + sh_funcs.append('%sfor (i = 0; i < pStruct->%s; i++) {' % (indent, self.struct_dict[s][m]['array_size'])) + indent = ' ' + if is_type(self.struct_dict[s][m]['type'], 'struct'): + sh_funcs.append('%sstructSize += (sizeof(%s*) + %s(pStruct->%s[i]));' % (indent, self.struct_dict[s][m]['type'], self._get_size_helper_func_name(self.struct_dict[s][m]['type']), self.struct_dict[s][m]['name'])) + else: + sh_funcs.append('%sstructSize += (sizeof(char) * strlen(pStruct->%s[i]));' % (indent, self.struct_dict[s][m]['name'])) + indent = ' ' + sh_funcs.append('%s}' % (indent)) + else: + if is_type(self.struct_dict[s][m]['type'], 'struct'): + if not i_decl: + sh_funcs.append('%suint32_t i = 0;' % (indent)) + i_decl = True + sh_funcs.append('%sfor (i = 0; i < pStruct->%s; i++) {' % (indent, self.struct_dict[s][m]['array_size'])) + indent = ' ' + sh_funcs.append('%sstructSize += %s(&pStruct->%s[i]);' % (indent, self._get_size_helper_func_name(self.struct_dict[s][m]['type']), self.struct_dict[s][m]['name'])) + indent = ' ' + sh_funcs.append('%s}' % (indent)) + else: + sh_funcs.append('%sstructSize += pStruct->%s*sizeof(%s);' % (indent, self.struct_dict[s][m]['array_size'], self.struct_dict[s][m]['type'])) + elif self.struct_dict[s][m]['ptr'] and 'pNext' != self.struct_dict[s][m]['name']: + if 'char' in self.struct_dict[s][m]['type'].lower(): + sh_funcs.append('%sstructSize += sizeof(%s)*strlen(pStruct->%s);' % (indent, self.struct_dict[s][m]['type'], self.struct_dict[s][m]['name'])) + elif is_type(self.struct_dict[s][m]['type'], 'struct'): + sh_funcs.append('%sstructSize += %s(pStruct->%s);' % (indent, self._get_size_helper_func_name(self.struct_dict[s][m]['type']), self.struct_dict[s][m]['name'])) + else: + sh_funcs.append('%sstructSize += sizeof(%s);' % (indent, self.struct_dict[s][m]['type'])) + elif 'size_t' == self.struct_dict[s][m]['type'].lower(): + sh_funcs.append('%sstructSize += pStruct->%s;' % (indent, self.struct_dict[s][m]['name'])) + skip_list.append(m+1) + indent = ' ' + sh_funcs.append('%s}' % (indent)) + sh_funcs.append("%sreturn structSize;\n}" % (indent)) + # Now generate generic function to loop over struct chain (or handle generic structs) + sh_funcs.append('size_t get_struct_chain_size(const void* pStruct)\n{') + sh_funcs.append(' // Just use XGL_APPLICATION_INFO as struct until actual type is resolved') + sh_funcs.append(' XGL_APPLICATION_INFO* pNext = (XGL_APPLICATION_INFO*)pStruct;') + sh_funcs.append(' size_t structSize = 0;') + sh_funcs.append(' while (pNext) {') + sh_funcs.append(' switch (pNext->sType) {') + for e in enum_type_dict: + if '_STRUCTURE_TYPE' in e: + for v in sorted(enum_type_dict[e]): + struct_name = v.replace("_STRUCTURE_TYPE", "") + sh_funcs.append(' case %s:\n {' % (v)) + sh_funcs.append(' structSize += %s((%s*)pNext);' % (self._get_size_helper_func_name(struct_name), struct_name)) + sh_funcs.append(' break;') + sh_funcs.append(' }') + sh_funcs.append(" default:") + sh_funcs.append(" structSize += 0;") + sh_funcs.append(' }') + sh_funcs.append(' pNext = (XGL_APPLICATION_INFO*)pNext->pNext;') + sh_funcs.append(' }') + sh_funcs.append(' return structSize;\n}') + return "\n".join(sh_funcs) + + def _generateSizeHelperHeader(self): + header = [] + header.append("//#includes, #defines, globals and such...\n") + for f in self.include_headers: + header.append("#include <%s>\n" % f) + header.append('\n// Function Prototypes\n') + header.append("size_t get_struct_chain_size(const void* pStruct);\n") + return "".join(header) + def _generateHeader(self): header = [] header.append("//#includes, #defines, globals and such...\n") @@ -1421,6 +1524,8 @@ def main(argv=None): sw.generateStringHelperCpp() sw.set_no_addr(False) sw.generateStringHelperCpp() + sw.set_include_headers(["stdio.h", "stdlib.h"]) + sw.generateSizeHelper() if opts.gen_cmake: cmg = CMakeGen(sw, os.path.dirname(enum_sh_filename)) cmg.generate() |
