X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fvapi%2Fvapi_cpp_gen.py;h=6b62bc4da223d0ad8c3bbb2f031cdfa4ed24e9c2;hb=2108c0c6daeb39a0619ace66189cc20e049a3c79;hp=3010f3e1919daa264d4adc77486602df7d4c415c;hpb=958b750ceaf6c20466bc4e5605da39b4490847d9;p=vpp.git diff --git a/src/vpp-api/vapi/vapi_cpp_gen.py b/src/vpp-api/vapi/vapi_cpp_gen.py index 3010f3e1919..6b62bc4da22 100755 --- a/src/vpp-api/vapi/vapi_cpp_gen.py +++ b/src/vpp-api/vapi/vapi_cpp_gen.py @@ -4,44 +4,32 @@ import argparse import os import sys import logging -from vapi_c_gen import CField, CStruct, CSimpleType, CStructType, CMessage, \ - json_to_c_header_name +from vapi_c_gen import CField, CEnum, CStruct, CSimpleType, CStructType,\ + CMessage, json_to_c_header_name from vapi_json_parser import JsonParser class CppField(CField): - def __init__( - self, - field_name, - field_type, - array_len=None, - nelem_field=None): - super(CppField, self).__init__( - field_name, field_type, array_len, nelem_field) + pass class CppStruct(CStruct): - def __init__(self, name, fields): - super(CppStruct, self).__init__(name, fields) + pass + + +class CppEnum(CEnum): + pass class CppSimpleType (CSimpleType): - def __init__(self, name): - super(CppSimpleType, self).__init__(name) + pass class CppStructType (CStructType, CppStruct): - def __init__(self, definition, typedict, field_class): - super(CppStructType, self).__init__(definition, typedict, field_class) + pass class CppMessage (CMessage): - def __init__(self, logger, definition, typedict, - struct_type_class, simple_type_class, field_class): - super(CppMessage, self).__init__( - logger, definition, typedict, struct_type_class, - simple_type_class, field_class) - def get_swap_to_be_template_instantiation(self): return "\n".join([ "template <> inline void vapi_swap_to_be<%s>(%s *msg)" % @@ -85,7 +73,7 @@ class CppMessage (CMessage): return "%s%s" % (self.name[0].upper(), self.name[1:]) def get_req_template_name(self): - if self.is_dump(): + if self.reply_is_stream: template = "Dump" else: template = "Request" @@ -145,13 +133,14 @@ def gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments): logger.info("Generating header `%s'" % io.name) orig_stdout = sys.stdout sys.stdout = io + d, f = os.path.split(j) include_guard = "__included_hpp_%s" % ( - j.replace(".", "_").replace("/", "_").replace("-", "_")) + f.replace(".", "_").replace("/", "_").replace("-", "_")) print("#ifndef %s" % include_guard) print("#define %s" % include_guard) print("") print("#include ") - print("#include <%s%s>" % (gen_h_prefix, json_to_c_header_name(j))) + print("#include <%s%s>" % (gen_h_prefix, json_to_c_header_name(f))) print("") print("namespace vapi {") print("") @@ -174,7 +163,7 @@ def gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments): print("/* m.get_cpp_constructor() */") print("%s" % m.get_cpp_constructor()) print("") - if not m.is_reply(): + if not m.is_reply and not m.is_event: if add_debug_comments: print("/* m.get_alloc_template_instantiation() */") print("%s" % m.get_alloc_template_instantiation()) @@ -183,7 +172,7 @@ def gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments): print("/* m.get_msg_class_instantiation() */") print("%s" % m.get_msg_class_instantiation()) print("") - if m.is_reply(): + if m.is_reply or m.is_event: if add_debug_comments: print("/* m.get_reply_type_alias() */") print("%s" % m.get_reply_type_alias()) @@ -208,7 +197,7 @@ def json_to_cpp_header_name(json_name): raise Exception("Unexpected json name `%s'!" % json_name) -def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, +def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, remove_path, add_debug_comments=False): if prefix == "" or prefix is None: prefix = "" @@ -219,7 +208,11 @@ def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, else: gen_h_prefix = "%s/" % gen_h_prefix for j in parser.json_files: - with open('%s%s' % (prefix, json_to_cpp_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_cpp_header_name(f)), "w") as io: gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments) @@ -249,15 +242,19 @@ if __name__ == '__main__': help='path prefix') argparser.add_argument('--gen-h-prefix', action='store', default=None, help='generated C header prefix') + argparser.add_argument('--remove-path', action='store_true', + help='remove path from filename') args = argparser.parse_args() jsonparser = JsonParser(logger, args.files, simple_type_class=CppSimpleType, struct_type_class=CppStructType, field_class=CppField, + enum_class=CppEnum, message_class=CppMessage) - gen_cpp_headers(jsonparser, logger, args.prefix, args.gen_h_prefix) + gen_cpp_headers(jsonparser, logger, args.prefix, args.gen_h_prefix, + args.remove_path) for e in jsonparser.exceptions: - logger.error(e) + logger.warning(e)