Skip to content
Snippets Groups Projects
Select Git revision
  • c8dbf8cb8e2ba440dfb64e7a27ba53a27ce6ee08
  • master default protected
  • v2.0-dev protected
  • zikeliml/Task-96-dotExporterForAST
  • zikeliml/124-rework-tutorials
  • fma
  • fhennig/v2.0-deprecations
  • holzer-master-patch-46757
  • 66-absolute-access-is-probably-not-copied-correctly-after-_eval_subs
  • gpu_bufferfield_fix
  • hyteg
  • vectorization_sqrt_fix
  • target_dh_refactoring
  • const_fix
  • improved_comm
  • gpu_liveness_opts
  • release/1.3.7 protected
  • release/1.3.6 protected
  • release/2.0.dev0 protected
  • release/1.3.5 protected
  • release/1.3.4 protected
  • release/1.3.3 protected
  • release/1.3.2 protected
  • release/1.3.1 protected
  • release/1.3 protected
  • release/1.2 protected
  • release/1.1.1 protected
  • release/1.1 protected
  • release/1.0.1 protected
  • release/1.0 protected
  • release/0.4.4 protected
  • last/Kerncraft
  • last/OpenCL
  • last/LLVM
  • release/0.4.3 protected
  • release/0.4.2 protected
36 results

test_stencils.py

Blame
  • header_source_pair.py 2.47 KiB
    from jinja2 import Environment, PackageLoader, StrictUndefined
    
    from os import path, makedirs
    
    from ..configuration import SfgOutputSpec
    from ..context import SfgContext
    
    from .clang_format import invoke_clang_format
    
    
    class HeaderSourcePairEmitter:
        def __init__(self, output_spec: SfgOutputSpec):
            self._basename = output_spec.basename
            self._output_directory = output_spec.output_directory
            self._header_filename = output_spec.get_header_filename()
            self._impl_filename = output_spec.get_impl_filename()
    
            self._ospec = output_spec
    
        @property
        def output_files(self) -> tuple[str, str]:
            return (
                path.join(self._output_directory, self._header_filename),
                path.join(self._output_directory, self._impl_filename)
            )
    
        def write_files(self, ctx: SfgContext):
            fq_namespace = ctx.fully_qualified_namespace
    
            jinja_context = {
                'ctx': ctx,
                'header_filename': self._header_filename,
                'source_filename': self._impl_filename,
                'basename': self._basename,
                'prelude_comment': ctx.prelude_comment,
                'definitions': tuple(ctx.definitions()),
                'fq_namespace': fq_namespace,
                'public_includes': tuple(incl.get_code() for incl in ctx.includes() if not incl.private),
                'private_includes': tuple(incl.get_code() for incl in ctx.includes() if incl.private),
                'kernel_namespaces': tuple(ctx.kernel_namespaces()),
                'functions': tuple(ctx.functions()),
                'classes': tuple(ctx.classes())
            }
    
            template_name = "HeaderSourcePair"
    
            env = Environment(loader=PackageLoader('pystencilssfg.emitters'),
                              undefined=StrictUndefined,
                              trim_blocks=True,
                              lstrip_blocks=True)
    
            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)
    
            header = invoke_clang_format(header, ctx.codestyle)
            source = invoke_clang_format(source, ctx.codestyle)
    
            makedirs(self._output_directory, exist_ok=True)
    
            with open(self._ospec.get_header_filepath(), 'w') as headerfile:
                headerfile.write(header)
    
            with open(self._ospec.get_impl_filepath(), 'w') as cppfile:
                cppfile.write(source)