Skip to content
Snippets Groups Projects
Commit e02732bf authored by Frederik Hennig's avatar Frederik Hennig
Browse files

added prelude and definitions

parent 833d1f29
Branches
Tags
No related merge requests found
Pipeline #57744 passed
...@@ -12,6 +12,12 @@ sfg_config = SfgConfiguration( ...@@ -12,6 +12,12 @@ sfg_config = SfgConfiguration(
) )
with SourceFileGenerator(sfg_config) as sfg: with SourceFileGenerator(sfg_config) as sfg:
sfg.prelude("""Generated by the pystencils Source File Generator.
Author: Frederik Hennig <frederik.hennig@fau.de>""")
sfg.define("using namespace std;")
sfg.namespace("jacobi") sfg.namespace("jacobi")
u_src, u_dst, f = fields("u_src, u_dst, f(1) : double[2D]", layout="fzyx") u_src, u_dst, f = fields("u_src, u_dst, f(1) : double[2D]", layout="fzyx")
......
...@@ -24,7 +24,17 @@ class SfgComposer: ...@@ -24,7 +24,17 @@ class SfgComposer:
@property @property
def context(self): def context(self):
return self._ctx return self._ctx
def prelude(self, content: str):
"""Add a string to the code file's prelude.
Do not wrap the given string in comment syntax."""
self._ctx.append_to_prelude(content)
def define(self, definition: str):
"""Add a custom definition to the generated header file."""
self._ctx.add_definition(definition)
def namespace(self, namespace: str): def namespace(self, namespace: str):
"""Set the inner code namespace. Throws an exception if a namespace was already set.""" """Set the inner code namespace. Throws an exception if a namespace was already set."""
self._ctx.set_namespace(namespace) self._ctx.set_namespace(namespace)
......
...@@ -12,7 +12,7 @@ class SfgContext: ...@@ -12,7 +12,7 @@ class SfgContext:
self._config = config self._config = config
self._default_kernel_namespace = SfgKernelNamespace(self, "kernels") self._default_kernel_namespace = SfgKernelNamespace(self, "kernels")
self._code_namespace = None self._code_namespace: str | None = None
# Source Components # Source Components
self._prelude: list[str] = [] self._prelude: list[str] = []
...@@ -58,10 +58,10 @@ class SfgContext: ...@@ -58,10 +58,10 @@ class SfgContext:
# Prelude, Includes, Definitions, Namespace # Prelude, Includes, Definitions, Namespace
# ---------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------
def prelude_comments(self) -> Generator[str, None, None]: def prelude(self) -> Generator[str, None, None]:
"""The prelude is a comment block printed at the top of both generated files.""" """The prelude is a comment block printed at the top of both generated files."""
yield from self._prelude yield from self._prelude
def append_to_prelude(self, code_str: str): def append_to_prelude(self, code_str: str):
self._prelude.append(code_str) self._prelude.append(code_str)
...@@ -83,7 +83,7 @@ class SfgContext: ...@@ -83,7 +83,7 @@ class SfgContext:
def set_namespace(self, namespace: str): def set_namespace(self, namespace: str):
if self._code_namespace is not None: if self._code_namespace is not None:
raise SfgException("The code namespace was already set.") raise SfgException("The code namespace was already set.")
self._code_namespace = namespace self._code_namespace = namespace
# ---------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------
......
...@@ -29,6 +29,8 @@ class BasicCpuEmitter: ...@@ -29,6 +29,8 @@ class BasicCpuEmitter:
'header_filename': self._header_filename, 'header_filename': self._header_filename,
'source_filename': self._source_filename, 'source_filename': self._source_filename,
'basename': self._basename, 'basename': self._basename,
'prelude': get_prelude_comment(ctx),
'definitions': list(ctx.definitions()),
'fq_namespace': fq_namespace, 'fq_namespace': fq_namespace,
'public_includes': list(incl.get_code() for incl in ctx.includes() if not incl.private), 'public_includes': list(incl.get_code() for incl in ctx.includes() if not incl.private),
'private_includes': list(incl.get_code() for incl in ctx.includes() if incl.private), 'private_includes': list(incl.get_code() for incl in ctx.includes() if incl.private),
...@@ -54,3 +56,16 @@ class BasicCpuEmitter: ...@@ -54,3 +56,16 @@ class BasicCpuEmitter:
with open(path.join(self._output_directory, self._source_filename), 'w') as cppfile: with open(path.join(self._output_directory, self._source_filename), 'w') as cppfile:
cppfile.write(source) cppfile.write(source)
def get_prelude_comment(ctx: SfgContext):
prelude_lines = []
for p in ctx.prelude():
prelude_lines += p.splitlines()
prelude_lines += [""] # empty line in-between
prelude_lines = prelude_lines[:-1]
if not prelude_lines:
return ""
return "\n".join(["/**"] + [f"* {line}" for line in prelude_lines] + ["*/"])
{{ prelude }}
#include "{{header_filename}}" #include "{{header_filename}}"
{% for incl in private_includes %} {% for incl in private_includes %}
......
{{ prelude }}
#pragma once #pragma once
#include <cstdint> #include <cstdint>
...@@ -6,6 +8,10 @@ ...@@ -6,6 +8,10 @@
{{incl}} {{incl}}
{% endfor %} {% endfor %}
{% for definition in definitions %}
{{ definition }}
{% endfor %}
#define RESTRICT __restrict__ #define RESTRICT __restrict__
{% if fq_namespace is not none %} {% if fq_namespace is not none %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment