class CField(Field):
- def __init__(
- self,
- field_name,
- field_type,
- array_len=None,
- nelem_field=None):
- super(CField, self).__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(CStruct, self).__init__(name, fields)
-
def duplicate_barrier(func):
def func_wrapper(self):
name = self.get_c_name()
'i64': 'be64toh', 'u64': 'be64toh',
}
- def __init__(self, name):
- super(CSimpleType, self).__init__(name)
-
def get_c_name(self):
return self.name
class CStructType (StructType, CStruct):
- def __init__(self, definition, typedict, field_class):
- super(CStructType, self).__init__(definition, typedict, field_class)
-
def get_c_name(self):
return "vapi_type_%s" % self.name
' 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 ' INVALID_MSG_ID,',
+ if self.has_payload() else ' VAPI_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(),
- ' INVALID_MSG_ID,',
+ ' VAPI_INVALID_MSG_ID,',
' };',
'',
' %s = vapi_register_msg(&%s);' %
def gen_json_unified_header(parser, logger, j, io, name):
+ d, f = os.path.split(j)
logger.info("Generating header `%s'" % name)
orig_stdout = sys.stdout
sys.stdout = io
print("extern vapi_msg_id_t %s;" % m.get_msg_id_name())
print("")
print("#define DEFINE_VAPI_MSG_IDS_%s\\" %
- j.replace(".", "_").replace("/", "_").replace("-", "_").upper())
+ f.replace(".", "_").replace("/", "_").replace("-", "_").upper())
print("\\\n".join([
" vapi_msg_id_t %s;" % m.get_msg_id_name()
for m in parser.messages_by_json[j].values()
]))
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()))
raise Exception("Unexpected json name `%s'!" % json_name)
-def gen_c_unified_headers(parser, logger, prefix):
+def gen_c_unified_headers(parser, logger, prefix, remove_path):
if prefix == "" or prefix is None:
prefix = ""
else:
prefix = "%s/" % prefix
for j in parser.json_files:
- with open('%s%s' % (prefix, json_to_c_header_name(j)), "w") as io:
+ if remove_path:
+ d, f = os.path.split(j)
+ else:
+ f = j
+ with open('%s%s' % (prefix, json_to_c_header_name(f)), "w") as io:
gen_json_unified_header(
- parser, logger, j, io, json_to_c_header_name(j))
+ parser, logger, j, io, json_to_c_header_name(f))
if __name__ == '__main__':
'(may be specified multiple times)')
argparser.add_argument('--prefix', action='store', default=None,
help='path prefix')
+ argparser.add_argument('--remove-path', action='store_true',
+ help='remove path from filename')
args = argparser.parse_args()
jsonparser = JsonParser(logger, args.files,
# Damjan), to avoid symbol version issues in .so
# gen_c_headers_and_code(jsonparser, logger, args.prefix)
- gen_c_unified_headers(jsonparser, logger, args.prefix)
+ gen_c_unified_headers(jsonparser, logger, args.prefix, args.remove_path)
for e in jsonparser.exceptions:
- logger.error(e)
+ logger.warning(e)