-#!/usr/bin/env python3
+#!/usr/bin/env python2
import argparse
import os
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)
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__)) {",
'i64': 'be64toh', 'u64': 'be64toh',
}
- def __init__(self, name):
- super().__init__(name)
-
def get_c_name(self):
return self.name
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
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
"}",
])
+ 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([
' 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);' %
]))
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("")
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():