Skip to content
Snippets Groups Projects
basic_cpu.py 1.16 KiB
Newer Older
from jinja2 import Environment, PackageLoader, StrictUndefined

from ...context import SfgContext

class BasicCpuEmitter:
    def __init__(self, ctx: SfgContext, basename: str):
        self._ctx = ctx
        self._basename = basename
        self._header_filename = basename + ".h"
        self._cpp_filename = basename + ".cpp"

    def write_files(self):
        jinja_context = {
            'ctx': self._ctx,
            'basename': self._basename,
            'root_namespace': self._ctx.root_namespace,
            'kernel_namespaces': list(self._ctx.kernel_namespaces)
        }

        template_name = "BasicCpu"

        env = Environment(loader=PackageLoader('pystencils_sfg.emitters.cpu'), undefined=StrictUndefined)

        from .jinja_filters import add_filters_to_jinja
        add_filters_to_jinja(env)

        header = env.get_template(f"{template_name}.tmpl.h").render(**jinja_context)
        source = env.get_template(f"{template_name}.tmpl.cpp").render(**jinja_context)

        with open(self._header_filename, 'w') as headerfile:
            headerfile.write(header)

        with open(self._cpp_filename, 'w') as cppfile:
            cppfile.write(source)