Skip to content
Snippets Groups Projects
Commit 943bfbf9 authored by TSC21's avatar TSC21 Committed by Beat Küng
Browse files

generalize scripts for usage outside the PX4 Firmware dir and with other templates/packages

parent 7f016b5f
No related branches found
No related tags found
No related merge requests found
......@@ -57,13 +57,21 @@ def get_absolute_path(arg_parse_dir):
default_client_out = get_absolute_path("src/modules/micrortps_bridge/micrortps_client")
default_agent_out = get_absolute_path("src/modules/micrortps_bridge/micrortps_agent")
default_uorb_templates_dir = "/templates/uorb_microcdr"
default_urtps_templates_dir = "/templates/urtps"
default_package_name = px_generate_uorb_topic_files.PACKAGE
parser = argparse.ArgumentParser()
parser.add_argument("-s", "--send", dest='send', metavar='*.msg', type=str, nargs='+', help="Topics to be sended")
parser.add_argument("-r", "--receive", dest='receive', metavar='*.msg', type=str, nargs='+', help="Topics to be received")
parser.add_argument("-a", "--agent", dest='agent', action="store_true", help="Flag for generate the agent, by default is true if -c is not specified")
parser.add_argument("-c", "--client", dest='client', action="store_true", help="Flag for generate the client, by default is true if -a is not specified")
parser.add_argument("-i", "--no-idl", dest='idl', action="store_false", help="Flag for generate idl files for each msg, by default is true if -i is not specified")
parser.add_argument("-t", "--topic-msg-dir", dest='msgdir', type=str, nargs=1, help="Topics message dir, by default msg/", default="msg")
parser.add_argument("-b", "--uorb-templates-dir", dest='uorb_templates', type=str, nargs=1, help="uORB templates dir, by default msg_dir/templates/uorb_microcdr", default=default_uorb_templates_dir)
parser.add_argument("-q", "--urtps-templates-dir", dest='urtps_templates', type=str, nargs=1, help="uRTPS templates dir, by default msg_dir/templates/urtps", default=default_urtps_templates_dir)
parser.add_argument("-p", "--package", dest='package', type=str, nargs=1, help="Msg package naming, by default px4", default=default_package_name)
parser.add_argument("-o", "--agent-outdir", dest='agentdir', type=str, nargs=1, help="Agent output dir, by default src/modules/micrortps_bridge/micrortps_agent", default=default_agent_out)
parser.add_argument("-u", "--client-outdir", dest='clientdir', type=str, nargs=1, help="Client output dir, by default src/modules/micrortps_bridge/micrortps_client", default=default_client_out)
parser.add_argument("-f", "--fastrtpsgen-dir", dest='fastrtpsgen', type=str, nargs='?', help="fastrtpsgen installation dir, only needed if fastrtpsgen is not in PATH, by default empty", default="")
......@@ -77,18 +85,26 @@ if len(sys.argv) <= 1:
args = parser.parse_args()
msg_folder = get_absolute_path(args.msgdir)
msg_files_send = []
msg_files_receive = []
if args.send:
msg_files_send = [get_absolute_path(msg) for msg in args.send]
else:
msg_files_send = []
if args.receive:
msg_files_receive = [get_absolute_path(msg) for msg in args.receive]
if args.package[0] != px_generate_uorb_topic_files.PACKAGE:
package = args.package[0]
else:
msg_files_receive = []
package = px_generate_uorb_topic_files.PACKAGE
agent = args.agent
client = args.client
# If not specified, auto generate the idl filename_send_msgs
if args.idl is None or args.idl == "":
idl = True
else:
idl = args.idl
del_tree = args.del_tree
px_generate_uorb_topic_files.append_to_include_path({msg_folder}, px_generate_uorb_topic_files.INCL_DEFAULT)
px_generate_uorb_topic_files.append_to_include_path({msg_folder}, px_generate_uorb_topic_files.INCL_DEFAULT, package)
agent_out_dir = get_absolute_path(args.agentdir)
client_out_dir = get_absolute_path(args.clientdir)
......@@ -126,8 +142,8 @@ if del_tree:
if agent and os.path.isdir(agent_out_dir + "/idl"):
shutil.rmtree(agent_out_dir + "/idl")
uorb_templates_dir = msg_folder + "/templates/uorb_microcdr"
urtps_templates_dir = msg_folder + "/templates/urtps"
uorb_templates_dir = msg_folder + get_absolute_path(args.uorb_templates)
urtps_templates_dir = msg_folder + get_absolute_path(args.urtps_templates)
uRTPS_CLIENT_TEMPL_FILE = 'microRTPS_client.cpp.template'
uRTPS_AGENT_TOPICS_H_TEMPL_FILE = 'RtpsTopics.h.template'
......@@ -143,30 +159,32 @@ def generate_agent(out_dir):
if msg_files_send:
for msg_file in msg_files_send:
px_generate_uorb_topic_files.generate_idl_file(msg_file, out_dir + "/idl", urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT)
if idl:
px_generate_uorb_topic_files.generate_idl_file(msg_file, out_dir + "/idl", urtps_templates_dir,
package, px_generate_uorb_topic_files.INCL_DEFAULT)
px_generate_uorb_topic_files.generate_topic_file(msg_file, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_PUBLISHER_SRC_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_PUBLISHER_SRC_TEMPL_FILE)
px_generate_uorb_topic_files.generate_topic_file(msg_file, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_PUBLISHER_H_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_PUBLISHER_H_TEMPL_FILE)
if msg_files_receive:
for msg_file in msg_files_receive:
px_generate_uorb_topic_files.generate_idl_file(msg_file, out_dir + "/idl", urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT)
if idl:
px_generate_uorb_topic_files.generate_idl_file(msg_file, out_dir + "/idl", urtps_templates_dir,
package, px_generate_uorb_topic_files.INCL_DEFAULT)
px_generate_uorb_topic_files.generate_topic_file(msg_file, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_SUBSCRIBER_SRC_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_SUBSCRIBER_SRC_TEMPL_FILE)
px_generate_uorb_topic_files.generate_topic_file(msg_file, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_SUBSCRIBER_H_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_SUBSCRIBER_H_TEMPL_FILE)
px_generate_uorb_topic_files.generate_uRTPS_general(msg_files_send, msg_files_receive, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_TEMPL_FILE)
px_generate_uorb_topic_files.generate_uRTPS_general(msg_files_send, msg_files_receive, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_TOPICS_H_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_TOPICS_H_TEMPL_FILE)
px_generate_uorb_topic_files.generate_uRTPS_general(msg_files_send, msg_files_receive, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_TOPICS_SRC_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_TOPICS_SRC_TEMPL_FILE)
px_generate_uorb_topic_files.generate_uRTPS_general(msg_files_send, msg_files_receive, out_dir, urtps_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_CMAKELIST_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_AGENT_CMAKELIST_TEMPL_FILE)
# Final steps to install agent
mkdir_p(agent_out_dir + "/fastrtpsgen")
......@@ -221,7 +239,7 @@ def generate_client(out_dir):
os.rename(def_file, def_file.replace(".h", ".h_"))
px_generate_uorb_topic_files.generate_uRTPS_general(msg_files_send, msg_files_receive, out_dir, uorb_templates_dir,
px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_CLIENT_TEMPL_FILE)
package, px_generate_uorb_topic_files.INCL_DEFAULT, uRTPS_CLIENT_TEMPL_FILE)
# Final steps to install client
cp_wildcard(urtps_templates_dir + "/microRTPS_transport.*", out_dir)
......
......@@ -111,12 +111,12 @@ def get_msgs_list(msgdir):
return [fn for fn in os.listdir(msgdir) if fn.endswith(".msg")]
def generate_output_from_file(format_idx, filename, outputdir, templatedir, includepath):
def generate_output_from_file(format_idx, filename, outputdir, package, templatedir, includepath):
"""
Converts a single .msg file to an uorb header/source file
"""
msg_context = genmsg.msg_loader.MsgContext.create_default()
full_type_name = genmsg.gentools.compute_full_type_name(PACKAGE, os.path.basename(filename))
full_type_name = genmsg.gentools.compute_full_type_name(package, os.path.basename(filename))
spec = genmsg.msg_loader.load_msg_from_file(msg_context, filename, full_type_name)
field_name_and_type = {}
for field in spec.parsed_fields():
......@@ -161,11 +161,11 @@ def generate_output_from_file(format_idx, filename, outputdir, templatedir, incl
return generate_by_template(output_file, template_file, em_globals)
def generate_idl_file(filename_msg, outputdir, templatedir, includepath):
def generate_idl_file(filename_msg, outputdir, templatedir, package, includepath):
"""
Generates an .idl from .msg file
"""
em_globals = get_em_globals(filename_msg, includepath, MsgScope.NONE)
em_globals = get_em_globals(filename_msg, package, includepath, MsgScope.NONE)
spec_short_name = em_globals["spec"].short_name
# Make sure output directory exists:
......@@ -178,16 +178,16 @@ def generate_idl_file(filename_msg, outputdir, templatedir, includepath):
return generate_by_template(output_file, template_file, em_globals)
def generate_uRTPS_general(filename_send_msgs, filename_received_msgs,
outputdir, templatedir, includepath, template_name):
outputdir, templatedir, package, includepath, template_name):
"""
Generates source file by msg content
"""
em_globals_list = []
if filename_send_msgs:
em_globals_list.extend([get_em_globals(f, includepath, MsgScope.SEND) for f in filename_send_msgs])
em_globals_list.extend([get_em_globals(f, package, includepath, MsgScope.SEND) for f in filename_send_msgs])
if filename_received_msgs:
em_globals_list.extend([get_em_globals(f, includepath, MsgScope.RECEIVE) for f in filename_received_msgs])
em_globals_list.extend([get_em_globals(f, package, includepath, MsgScope.RECEIVE) for f in filename_received_msgs])
merged_em_globals = merge_em_globals_list(em_globals_list)
# Make sure output directory exists:
......@@ -199,11 +199,11 @@ def generate_uRTPS_general(filename_send_msgs, filename_received_msgs,
return generate_by_template(output_file, template_file, merged_em_globals)
def generate_topic_file(filename_msg, outputdir, templatedir, includepath, template_name):
def generate_topic_file(filename_msg, outputdir, templatedir, package, includepath, template_name):
"""
Generates an .idl from .msg file
"""
em_globals = get_em_globals(filename_msg, includepath, MsgScope.NONE)
em_globals = get_em_globals(filename_msg, package, includepath, MsgScope.NONE)
spec_short_name = em_globals["spec"].short_name
# Make sure output directory exists:
......@@ -215,12 +215,12 @@ def generate_topic_file(filename_msg, outputdir, templatedir, includepath, templ
return generate_by_template(output_file, template_file, em_globals)
def get_em_globals(filename_msg, includepath, scope):
def get_em_globals(filename_msg, package, includepath, scope):
"""
Generates em globals dictionary
"""
msg_context = genmsg.msg_loader.MsgContext.create_default()
full_type_name = genmsg.gentools.compute_full_type_name(PACKAGE, os.path.basename(filename_msg))
full_type_name = genmsg.gentools.compute_full_type_name(package, os.path.basename(filename_msg))
spec = genmsg.msg_loader.load_msg_from_file(msg_context, filename_msg, full_type_name)
topics = get_multi_topics(filename_msg)
if includepath:
......@@ -281,7 +281,7 @@ def generate_by_template(output_file, template_file, em_globals):
return True
def convert_dir(format_idx, inputdir, outputdir, templatedir):
def convert_dir(format_idx, inputdir, outputdir, package, templatedir):
"""
Converts all .msg files in inputdir to uORB header/source files
"""
......@@ -309,7 +309,7 @@ def convert_dir(format_idx, inputdir, outputdir, templatedir):
if (maxinputtime != 0 and maxouttime != 0 and maxinputtime < maxouttime):
return False
includepath = INCL_DEFAULT + [':'.join([PACKAGE, inputdir])]
includepath = INCL_DEFAULT + [':'.join([package, inputdir])]
for f in os.listdir(inputdir):
# Ignore hidden files
if f.startswith("."):
......@@ -323,7 +323,7 @@ def convert_dir(format_idx, inputdir, outputdir, templatedir):
if fn[-4:].lower() != '.msg':
continue
generate_output_from_file(format_idx, fn, outputdir, templatedir, includepath)
generate_output_from_file(format_idx, fn, outputdir, package, templatedir, includepath)
return True
......@@ -361,13 +361,13 @@ def copy_changed(inputdir, outputdir, prefix='', quiet=False):
print("{0}: unchanged".format(input_file))
def convert_dir_save(format_idx, inputdir, outputdir, templatedir, temporarydir, prefix, quiet=False):
def convert_dir_save(format_idx, inputdir, outputdir, package, templatedir, temporarydir, prefix, quiet=False):
"""
Converts all .msg files in inputdir to uORB header files
Unchanged existing files are not overwritten.
"""
# Create new headers in temporary output directory
convert_dir(format_idx, inputdir, temporarydir, templatedir)
convert_dir(format_idx, inputdir, temporarydir, package, templatedir)
if generate_idx == 1:
generate_topics_list_file(inputdir, temporarydir, templatedir)
# Copy changed headers from temporary dir to output dir
......@@ -396,9 +396,9 @@ def generate_topics_list_file_from_files(files, outputdir, templatedir):
tl_out_file = os.path.join(outputdir, TOPICS_LIST_TEMPLATE_FILE.replace(".template", ""))
generate_by_template(tl_out_file, tl_template_file, tl_globals)
def append_to_include_path(path_to_append, curr_include):
def append_to_include_path(path_to_append, curr_include, package):
for p in path_to_append:
curr_include.append("%s:%s" % (PACKAGE, p))
curr_include.append('%s:%s' % (package, p))
if __name__ == "__main__":
parser = argparse.ArgumentParser(
......@@ -416,6 +416,8 @@ if __name__ == "__main__":
default=None)
parser.add_argument('-e', dest='templatedir',
help='directory with template files',)
parser.add_argument('-k', dest='package', default=PACKAGE,
help='package name')
parser.add_argument('-o', dest='outputdir',
help='output directory for header files')
parser.add_argument('-t', dest='temporarydir',
......@@ -429,7 +431,7 @@ if __name__ == "__main__":
args = parser.parse_args()
if args.include_paths:
append_to_include_path(args.include_paths, INCL_DEFAULT)
append_to_include_path(args.include_paths, INCL_DEFAULT, args.package)
if args.headers:
generate_idx = 0
......@@ -440,7 +442,7 @@ if __name__ == "__main__":
exit(-1)
if args.file is not None:
for f in args.file:
generate_output_from_file(generate_idx, f, args.temporarydir, args.templatedir, INCL_DEFAULT)
generate_output_from_file(generate_idx, f, args.temporarydir, args.package, args.templatedir, INCL_DEFAULT)
if generate_idx == 1:
generate_topics_list_file_from_files(args.file, args.outputdir, args.templatedir)
copy_changed(args.temporarydir, args.outputdir, args.prefix, args.quiet)
......@@ -449,6 +451,7 @@ if __name__ == "__main__":
generate_idx,
args.dir,
args.outputdir,
args.package,
args.templatedir,
args.temporarydir,
args.prefix,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment