aboutsummaryrefslogtreecommitdiffstats
path: root/vpp-api/java/jvpp/gen
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2016-11-25 08:38:29 +0100
committerOle Trøan <otroan@employees.org>2016-11-30 18:24:38 +0000
commit2fee4c8fadd31979bd3e72c51d276773d17798d1 (patch)
treeeae9f319e5b4de6e81c1384b5e4d9b7a75d0d7b3 /vpp-api/java/jvpp/gen
parentc5b136004543b9861a203af335d1ce61a976382d (diff)
VPP-530: adapt jvpp generation for VPP API splitting
Now jvpp uses *.json instead of *.py api representation. Multiple *.json files are supported. Change-Id: I89fa556c7d2a35d42833f2faaa28398ebd2ed012 Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Diffstat (limited to 'vpp-api/java/jvpp/gen')
-rwxr-xr-xvpp-api/java/jvpp/gen/jvpp_gen.py71
1 files changed, 46 insertions, 25 deletions
diff --git a/vpp-api/java/jvpp/gen/jvpp_gen.py b/vpp-api/java/jvpp/gen/jvpp_gen.py
index 1b9ceff8078..b1cd84c4ad1 100755
--- a/vpp-api/java/jvpp/gen/jvpp_gen.py
+++ b/vpp-api/java/jvpp/gen/jvpp_gen.py
@@ -18,6 +18,7 @@ import argparse
import importlib
import sys
import os
+import json
from jvppgen import types_gen
from jvppgen import callback_gen
@@ -40,22 +41,30 @@ from jvppgen import util
# defs_api_vpp_papi.py - vpe.api in python format (generated by vppapigen)
parser = argparse.ArgumentParser(description='VPP Java API generator')
-parser.add_argument('-i', action="store", dest="inputfile")
+parser.add_argument('-i', action="store", dest="inputfiles", nargs='+')
parser.add_argument('--plugin_name', action="store", dest="plugin_name")
args = parser.parse_args()
sys.path.append(".")
-print "Generating Java API for %s" % args.inputfile
-importdir = os.path.dirname(args.inputfile)
-print "importdir %s" % importdir
-inputfile = os.path.basename(args.inputfile)
-inputfile = inputfile.replace('.py', '')
-print "inputfile %s" % inputfile
+print "Generating Java API for %s" % args.inputfiles
+print "inputfiles %s" % args.inputfiles
plugin_name = args.plugin_name
print "plugin_name %s" % plugin_name
-sys.path.append(importdir)
-cfg = importlib.import_module(inputfile, package=None)
+
+cfg = {}
+
+for inputfile in args.inputfiles:
+ _cfg = json.load(open(inputfile, 'r'))
+ if 'types' in cfg:
+ cfg['types'].extend(_cfg['types'])
+ else:
+ cfg['types'] = _cfg['types']
+ if 'messages' in cfg:
+ cfg['messages'].extend(_cfg['messages'])
+ else:
+ cfg['messages'] = _cfg['messages']
+
def is_request_field(field_name):
return field_name not in {'_vl_msg_id', 'client_index', 'context'}
@@ -68,6 +77,8 @@ def is_response_field(field_name):
def get_args(t, filter):
arg_list = []
for i in t:
+ if is_crc(i):
+ continue
if not filter(i[1]):
continue
arg_list.append(i[1])
@@ -77,7 +88,11 @@ def get_args(t, filter):
def get_types(t, filter):
types_list = []
lengths_list = []
+ crc = None
for i in t:
+ if is_crc(i):
+ crc = ('crc', i['crc'][2:])
+ continue
if not filter(i[1]):
continue
if len(i) is 3: # array type
@@ -89,7 +104,12 @@ def get_types(t, filter):
else: # primitive type
types_list.append(i[0])
lengths_list.append((0, False))
- return types_list, lengths_list
+ return types_list, lengths_list, crc
+
+
+def is_crc(arg):
+ """ Check whether the argument inside message definition is just crc """
+ return 'crc' in arg
def get_definitions(defs):
@@ -101,18 +121,18 @@ def get_definitions(defs):
# For replies include all the arguments except message_id
if util.is_reply(java_name):
- types, lengths = get_types(a[1:], is_response_field)
+ types, lengths, crc = get_types(a[1:], is_response_field)
func_name[a[0]] = dict(
[('name', a[0]), ('java_name', java_name),
('args', get_args(a[1:], is_response_field)), ('full_args', get_args(a[1:], lambda x: True)),
- ('types', types), ('lengths', lengths)])
+ ('types', types), ('lengths', lengths), crc])
# For requests skip message_id, client_id and context
else:
- types, lengths = get_types(a[1:], is_request_field)
+ types, lengths, crc = get_types(a[1:], is_request_field)
func_name[a[0]] = dict(
[('name', a[0]), ('java_name', java_name),
('args', get_args(a[1:], is_request_field)), ('full_args', get_args(a[1:], lambda x: True)),
- ('types', types), ('lengths', lengths)])
+ ('types', types), ('lengths', lengths), crc])
# Indexed by name
func_list.append(func_name[a[0]])
@@ -129,17 +149,18 @@ future_package = 'future'
# TODO find better package name
callback_facade_package = 'callfacade'
-types_list, types_name = get_definitions(cfg.types)
+types_list, types_name = get_definitions(cfg['types'])
+
+types_gen.generate_types(types_list, plugin_package, types_package, args.inputfiles)
-types_gen.generate_types(types_list, plugin_package, types_package, inputfile)
+func_list, func_name = get_definitions(cfg['messages'])
-func_list, func_name = get_definitions(cfg.messages)
-dto_gen.generate_dtos(func_list, base_package, plugin_package, plugin_name.title(), dto_package, args.inputfile)
-jvpp_impl_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name, dto_package, args.inputfile)
-callback_gen.generate_callbacks(func_list, base_package, plugin_package, plugin_name.title(), callback_package, dto_package, args.inputfile)
-notification_gen.generate_notification_registry(func_list, base_package, plugin_package, plugin_name.title(), notification_package, callback_package, dto_package, args.inputfile)
-jvpp_c_gen.generate_jvpp(func_list, plugin_name, args.inputfile)
-jvpp_future_facade_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name.title(), dto_package, callback_package, notification_package, future_package, args.inputfile)
-jvpp_callback_facade_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name.title(), dto_package, callback_package, notification_package, callback_facade_package, args.inputfile)
+dto_gen.generate_dtos(func_list, base_package, plugin_package, plugin_name.title(), dto_package, args.inputfiles)
+jvpp_impl_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name, dto_package, args.inputfiles)
+callback_gen.generate_callbacks(func_list, base_package, plugin_package, plugin_name.title(), callback_package, dto_package, args.inputfiles)
+notification_gen.generate_notification_registry(func_list, base_package, plugin_package, plugin_name.title(), notification_package, callback_package, dto_package, args.inputfiles)
+jvpp_c_gen.generate_jvpp(func_list, plugin_name, args.inputfiles)
+jvpp_future_facade_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name.title(), dto_package, callback_package, notification_package, future_package, args.inputfiles)
+jvpp_callback_facade_gen.generate_jvpp(func_list, base_package, plugin_package, plugin_name.title(), dto_package, callback_package, notification_package, callback_facade_package, args.inputfiles)
-print "Java API for %s generated successfully" % args.inputfile
+print "Java API for %s generated successfully" % args.inputfiles