X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fvapi%2Fvapi_c_gen.py;h=b85f1e9d248d918c154dad049247dade677e35c9;hb=8b6b5ab7dba7cb5fe738c887e27c65bee6a2f600;hp=ef6e2663cf4061f30fa528185e461b89b434e522;hpb=dc15be2ca7c51772b00e4c5548934a35aa7e4add;p=vpp.git diff --git a/src/vpp-api/vapi/vapi_c_gen.py b/src/vpp-api/vapi/vapi_c_gen.py index ef6e2663cf4..b85f1e9d248 100755 --- a/src/vpp-api/vapi/vapi_c_gen.py +++ b/src/vpp-api/vapi/vapi_c_gen.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python2 import argparse import os @@ -9,14 +9,6 @@ from vapi_json_parser import Field, Struct, Message, JsonParser,\ class CField(Field): - def __init__( - self, - field_name, - field_type, - array_len=None, - nelem_field=None): - super().__init__(field_name, field_type, array_len, nelem_field) - def get_c_def(self): if self.len is not None: return "%s %s[%d]" % (self.type.get_c_name(), self.name, self.len) @@ -66,9 +58,13 @@ class CField(Field): class CStruct(Struct): - def __init__(self, name, fields): - super().__init__(name, fields) + def duplicate_barrier(func): + def func_wrapper(self): + name = self.get_c_name() + return "#ifndef defined_{}\n#define defined_{}\n{}\n#endif".format(name, name, func(self)) + return func_wrapper + @duplicate_barrier def get_c_def(self): return "\n".join([ "typedef struct __attribute__((__packed__)) {", @@ -91,9 +87,6 @@ class CSimpleType (SimpleType): 'i64': 'be64toh', 'u64': 'be64toh', } - def __init__(self, name): - super().__init__(name) - def get_c_name(self): return self.name @@ -121,9 +114,6 @@ class CSimpleType (SimpleType): class CStructType (StructType, CStruct): - def __init__(self, definition, typedict, field_class): - super().__init__(definition, typedict, field_class) - def get_c_name(self): return "vapi_type_%s" % self.name @@ -173,8 +163,9 @@ class CStructType (StructType, CStruct): class CMessage (Message): def __init__(self, logger, definition, typedict, struct_type_class, simple_type_class, field_class): - super().__init__(logger, definition, typedict, struct_type_class, - simple_type_class, field_class) + super(CMessage, self).__init__(logger, definition, typedict, + struct_type_class, simple_type_class, + field_class) self.payload_members = [ " %s" % p.get_c_def() for p in self.fields @@ -269,6 +260,13 @@ class CMessage (Message): "}", ]) + def duplicate_barrier(func): + def func_wrapper(self): + name = self.get_payload_struct_name() + return "#ifndef defined_{}\n#define defined_{}\n{}\n#endif".format(name, name, func(self)) + return func_wrapper + + @duplicate_barrier def get_c_def(self): if self.has_payload(): return "\n".join([ @@ -502,11 +500,11 @@ class CMessage (Message): ' offsetof(%s, context),' % self.header.get_c_name() if has_context else ' 0,', (' offsetof(%s, payload),' % self.get_c_name()) - if self.has_payload() else ' ~0,', + if self.has_payload() else ' INVALID_MSG_ID,', ' sizeof(%s),' % self.get_c_name(), ' (generic_swap_fn_t)%s,' % self.get_swap_to_be_func_name(), ' (generic_swap_fn_t)%s,' % self.get_swap_to_host_func_name(), - ' ~0,', + ' INVALID_MSG_ID,', ' };', '', ' %s = vapi_register_msg(&%s);' % @@ -570,7 +568,7 @@ def gen_json_unified_header(parser, logger, j, io, name): ])) print("") print("") - for t in parser.types_by_json[j].values(): + for t in parser.types_by_json[j]: try: print("%s" % t.get_c_def()) print("") @@ -582,10 +580,13 @@ def gen_json_unified_header(parser, logger, j, io, name): print("") function_attrs = "static inline " - for t in parser.types_by_json[j].values(): + for t in parser.types_by_json[j]: + print("#ifndef defined_inline_%s" % t.get_c_name()) + print("#define defined_inline_%s" % t.get_c_name()) print("%s%s" % (function_attrs, t.get_swap_to_be_func_def())) print("") print("%s%s" % (function_attrs, t.get_swap_to_host_func_def())) + print("#endif") print("") for m in parser.messages_by_json[j].values(): if m.has_payload():