From d91ddf3b976142251b22233d5a57adc67f17df0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Fri, 15 Sep 2023 09:12:59 +0200
Subject: [PATCH] fix(BSS2): provide include dirs for runtime ppu build flow

---
 packages/hxtorch/package.py          | 21 +++++++++++++++++++--
 packages/pynn-brainscales/package.py | 21 +++++++++++++++++++--
 2 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py
index 0077e4ed..a470f65b 100644
--- a/packages/hxtorch/package.py
+++ b/packages/hxtorch/package.py
@@ -129,11 +129,28 @@ class Hxtorch(WafPackage):
         env.set('WAF_CONFIGURE_LD_LIBRARY_PATH', ':'.join(library))
         env.prepend_path('PATH', ':'.join(path))
 
-    def setup_dependent_build_environment(self, env, dependent_spec):
+    def _setup_common_env(self, env):
+        # TODO: use standard install layout for Python modules and extensions'
+        # shared objects => remove then
         env.prepend_path('PYTHONPATH', self.prefix.lib)
 
+        # grenade needs to find some libraries for the JIT-compilation of
+        # programs for BrainScaleS-2's embedded processor.
+        ppu_include_dirs = []
+        ppu_dep_names = ['bitsery', 'boost']
+        for ppu_dep_name in ppu_dep_names:
+            dep = self.spec[ppu_dep_name]
+            dep_include_dirs = set(dep.headers.directories)
+            print('ppu includes (', dep.name, '):', dep_include_dirs, "\n")
+            ppu_include_dirs.extend(list(dep_include_dirs))
+        env.set('C_INCLUDE_PATH', ':'.join(ppu_include_dirs))
+        env.set('CPLUS_INCLUDE_PATH', ':'.join(ppu_include_dirs))
+
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        self._setup_common_env(env)
+
     def setup_run_environment(self, env):
-        env.prepend_path('PYTHONPATH', self.prefix.lib)
+        self._setup_common_env(env)
 
     # override configure step as we perform a project setup first
     def configure(self, spec, prefix):
diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py
index a6e58127..ac532a84 100644
--- a/packages/pynn-brainscales/package.py
+++ b/packages/pynn-brainscales/package.py
@@ -106,11 +106,28 @@ class PynnBrainscales(WafPackage):
         env.set('WAF_CONFIGURE_LD_LIBRARY_PATH', ':'.join(library))
         env.prepend_path('PATH', ':'.join(path))
 
-    def setup_dependent_build_environment(self, env, dependent_spec):
+    def _setup_common_env(self, env):
+        # TODO: use standard install layout for Python modules and extensions'
+        # shared objects => remove then
         env.prepend_path('PYTHONPATH', self.prefix.lib)
 
+        # grenade needs to find some libraries for the JIT-compilation of
+        # programs for BrainScaleS-2's embedded processor.
+        ppu_include_dirs = []
+        ppu_dep_names = ['bitsery', 'boost']
+        for ppu_dep_name in ppu_dep_names:
+            dep = self.spec[ppu_dep_name]
+            dep_include_dirs = set(dep.headers.directories)
+            print('ppu includes (', dep.name, '):', dep_include_dirs, "\n")
+            ppu_include_dirs.extend(list(dep_include_dirs))
+        env.set('C_INCLUDE_PATH', ':'.join(ppu_include_dirs))
+        env.set('CPLUS_INCLUDE_PATH', ':'.join(ppu_include_dirs))
+
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        self._setup_common_env(env)
+
     def setup_run_environment(self, env):
-        env.prepend_path('PYTHONPATH', self.prefix.lib)
+        self._setup_common_env(env)
 
     # override configure step as we perform a project setup first
     def configure(self, spec, prefix):
-- 
GitLab