import os
from multigen.jinja import JinjaTask, JinjaGenerator
from riaps.gen.target.cpp import ccfilters
[docs]class CompHppBaseTask(JinjaTask):
template_name = 'comp.base.h.tpl'
def __init__(self, part):
super(CompHppBaseTask, self).__init__()
self.part = part
[docs] def filtered_elements(self, model):
return model['cpp']
[docs] def relative_path_for_element(self, element):
output_file = os.path.join("include/base/", f'{element["name"]}Base.h')
return output_file
[docs]class CompCppBaseTask(JinjaTask):
template_name = 'comp.base.cc.tpl'
def __init__(self, part):
super(CompCppBaseTask, self).__init__()
self.part = part
[docs] def filtered_elements(self, model):
return model['cpp']
[docs] def relative_path_for_element(self, element):
output_file = os.path.join("src/base/", f'{element["name"]}Base.cc')
return output_file
[docs]class CompHppTask(JinjaTask):
template_name = 'comp.h.tpl'
def __init__(self, part):
super(CompHppTask, self).__init__()
self.part = part
[docs] def filtered_elements(self, model):
return model['cpp']
[docs] def relative_path_for_element(self, element):
output_file = os.path.join("include", f'{element["name"]}.h')
return output_file
[docs]class CompCppTask(JinjaTask):
template_name = 'comp.cc.tpl'
def __init__(self, part):
super(CompCppTask, self).__init__()
self.part = part
[docs] def filtered_elements(self, model):
return model['cpp']
[docs] def relative_path_for_element(self, element):
output_file = os.path.join("src", f'{element["name"]}.cc')
return output_file
[docs]class CmakeTask(JinjaTask):
template_name = 'cmake.tpl'
[docs] def filtered_elements(self, model):
return [{
'model' : model['cpp'],
'appname' : model['appname']
}]
[docs] def relative_path_for_element(self, element):
output_file = os.path.join('CMakeLists.txt')
return output_file
[docs]class CompGenerator(JinjaGenerator):
templates_path = os.path.join(
os.path.abspath(os.path.dirname(__file__)),
'tpl'
)
tasks = [
CompHppBaseTask('components'),
CompCppBaseTask('components'),
CompHppTask('components'),
CompCppTask('components'),
CompHppBaseTask('devices'),
CompCppBaseTask('devices'),
CompHppTask('devices'),
CompCppTask('devices'),
CmakeTask(),
]
[docs] def create_environment(self, **kwargs):
environment = super().create_environment(**kwargs)
environment.trim_blocks = True
environment.filters['handlername' ] = ccfilters.handler_name
environment.filters['sendername' ] = ccfilters.sender_name
environment.filters['recvreturntype' ] = ccfilters.recv_return_type
environment.filters['portmacro' ] = ccfilters.port_macro
environment.filters['recvmessagetype' ] = ccfilters.recv_message_type
environment.filters['sendermessagetype' ] = ccfilters.sender_message_type
environment.filters['cppporttype' ] = ccfilters.cpp_port_type
return environment