From 55661c7f04d608a6e9b2a5d4ec99e8e9e7deecba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Tue, 18 Feb 2025 19:31:45 +0100
Subject: [PATCH 1/9] fix(BSS2): build %gcc@13.3

---
 packages/build-brainscales/package.py     | 8 ++++++++
 packages/hxtorch/package.py               | 3 +++
 packages/oppulance/package.py             | 7 +++++++
 packages/pynn-brainscales/package.py      | 3 +++
 packages/wf-brainscales2-demos/package.py | 1 +
 spack.yaml                                | 8 ++++----
 6 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/packages/build-brainscales/package.py b/packages/build-brainscales/package.py
index 6ea4a370..cec40a9c 100644
--- a/packages/build-brainscales/package.py
+++ b/packages/build-brainscales/package.py
@@ -15,6 +15,13 @@ import spack.build_environment
 class BuildBrainscales(WafPackage):
     """Common stuff for BrainScaleS packages..."""
 
+    version(
+        "9.0-a9",
+        git="https://github.com/electronicvisions/releases-ebrains",
+        tag="ebrains-9.0-a9",
+        commit="5951428b7598ff9478fa834d7e991e3ff94709ee",
+        submodules=True,
+    )
     version(
         "9.0-a8",
         git="https://github.com/electronicvisions/releases-ebrains",
@@ -52,6 +59,7 @@ class BuildBrainscales(WafPackage):
     )
 
     # common dependencies of BuildBrainscales-derived packages
+    depends_on('oppulance@9.0-a9', when='@9.0-a9', type=('build', 'link', 'run', 'test'))
     depends_on('oppulance@9.0-a8', when='@9.0-a8', type=('build', 'link', 'run', 'test'))
     depends_on('oppulance@9.0-a7', when='@9.0-a7', type=('build', 'link', 'run', 'test'))
     depends_on('oppulance@9.0-a6', when='@9.0-a6', type=('build', 'link', 'run', 'test'))
diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py
index 437a6886..ef237ceb 100644
--- a/packages/hxtorch/package.py
+++ b/packages/hxtorch/package.py
@@ -90,6 +90,9 @@ class Hxtorch(build_brainscales.BuildBrainscales):
 
     extends('python')
 
+    # some versions of dependencies are broken
+    conflicts("boost@1.86.0") # sha1 digest changed length, but boost::compute didn't adapt
+
     patch("include-SparseTensorUtils.patch", when="@:8.0-a5")
 
     def install_test(self):
diff --git a/packages/oppulance/package.py b/packages/oppulance/package.py
index 2249a8b4..55d6b04e 100644
--- a/packages/oppulance/package.py
+++ b/packages/oppulance/package.py
@@ -21,6 +21,13 @@ class Oppulance(Package):
     depends_on('wget')
     depends_on('gmp')
 
+    version(
+        "9.0-a9",
+        git="https://github.com/electronicvisions/releases-ebrains",
+        tag="ebrains-9.0-a9",
+        commit="5951428b7598ff9478fa834d7e991e3ff94709ee",
+        submodules=True,
+    )
     version(
         "9.0-a8",
         git="https://github.com/electronicvisions/releases-ebrains",
diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py
index 13d850f7..3e68558d 100644
--- a/packages/pynn-brainscales/package.py
+++ b/packages/pynn-brainscales/package.py
@@ -82,6 +82,9 @@ class PynnBrainscales(build_brainscales.BuildBrainscales):
     depends_on('yaml-cpp+shared', type=('build', 'link', 'run'))
     extends('python')
 
+    # some versions of dependencies are broken
+    conflicts("boost@1.86.0") # sha1 digest changed length, but boost::compute didn't adapt
+
     def install_test(self):
         with working_dir('spack-test', create=True):
             old_pythonpath = os.environ.get('PYTHONPATH', '')
diff --git a/packages/wf-brainscales2-demos/package.py b/packages/wf-brainscales2-demos/package.py
index 9226c76a..1dc5b24b 100644
--- a/packages/wf-brainscales2-demos/package.py
+++ b/packages/wf-brainscales2-demos/package.py
@@ -16,6 +16,7 @@ class WfBrainscales2Demos(Package):
     maintainers = ["emuller", "muffgaga"]
 
     # ECM: we probably should build the ipynb file in this package
+    version("9.0-a9", tag="jupyter-notebooks-9.0-a9")
     version("9.0-a8", tag="jupyter-notebooks-9.0-a8")
     version("9.0-a7", tag="jupyter-notebooks-9.0-a7")
     version("9.0-a6", tag="jupyter-notebooks-9.0-a6")
diff --git a/spack.yaml b/spack.yaml
index e278c469..f4bdea9a 100644
--- a/spack.yaml
+++ b/spack.yaml
@@ -12,10 +12,10 @@ spack:
     - py-biobb-model@4.1.0
     - py-biobb-structure-checking@3.13.4
     - py-biobb-structure-utils@4.1.0
-    - hxtorch@9.0-a8
+    - hxtorch@9.0-a9
     - nest@3.8 +sonata
     - neuron@8.2.3 +mpi
-    - jaxsnn@9.0-a8
+    - jaxsnn@9.0-a9
     - py-bluepyefe@2.3.6
     - py-bluepymm@0.8.7
     - py-bluepyopt@1.14.11
@@ -62,14 +62,14 @@ spack:
     - py-tvb-ext-xircuits@1.1.0
     - py-viziphant@0.4.0
     - py-vbi
-    - pynn-brainscales@9.0-a8
+    - pynn-brainscales@9.0-a9
     - r-rgsl@0.1.1
     - r-sbtabvfgen@0.1
     - r-uqsa@2.2
 #    - sda@7.3.3d
     # Workflows (meta-packages)
     - wf-biobb
-    - wf-brainscales2-demos@9.0-a8
+    - wf-brainscales2-demos@9.0-a9
     - wf-bsb@4.4 +nest +neuron
 #    - wf-protein-association-rates@0.1
     - wf-multi-area-model@1.2.0
-- 
GitLab


From d2129836d24d47a0ce37c7aec3bac5624149c250 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Wed, 26 Feb 2025 13:14:55 +0100
Subject: [PATCH 2/9] fix(genpybind): build on llvm@15

---
 packages/genpybind/package.py        | 1 +
 packages/hxtorch/package.py          | 2 +-
 packages/pynn-brainscales/package.py | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/genpybind/package.py b/packages/genpybind/package.py
index f5398139..012d2e5b 100644
--- a/packages/genpybind/package.py
+++ b/packages/genpybind/package.py
@@ -21,6 +21,7 @@ class Genpybind(WafPackage):
     version('develop', branch='develop')
 
     version('visions', branch='master', git='https://github.com/electronicvisions/genpybind')
+    version('ebrains-llvm15', tag='ebrains-9.0-a9', git='https://github.com/electronicvisions/genpybind')
     version('ebrains', tag='ebrains_release-1-rc1', git='https://github.com/electronicvisions/genpybind')
 
     depends_on(
diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py
index ef237ceb..d4a5ea66 100644
--- a/packages/hxtorch/package.py
+++ b/packages/hxtorch/package.py
@@ -53,7 +53,7 @@ class Hxtorch(build_brainscales.BuildBrainscales):
         ('boost@1.69.0: +graph+icu+mpi+numpy+coroutine+context+filesystem+python+serialization+system+thread+program_options cxxstd=17', { "type": ('build', 'link', 'run', 'test') } ),
         ('cereal', { "type": ('build', 'link', 'run', 'test') } ),
         ('cppcheck', { "type": ('build', 'link', 'run') } ),
-        ('genpybind@ebrains', { "type": ('build', 'link') } ),
+        ('genpybind@ebrains-llvm15', { "type": ('build', 'link') } ),
         ('gflags', { "type": ('build', 'link', 'run') } ),
         ('googletest@1.11.0:+gmock', { "type": ('build', 'link', 'run') } ), # variadic templates needed
         ('inja', { "type": ('build', 'link', 'run', 'test')  } ),# template engine for PPU source jit generation
diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py
index 3e68558d..e0836671 100644
--- a/packages/pynn-brainscales/package.py
+++ b/packages/pynn-brainscales/package.py
@@ -51,7 +51,7 @@ class PynnBrainscales(build_brainscales.BuildBrainscales):
     depends_on('boost@1.69.0: +graph+icu+mpi+numpy+coroutine+context+filesystem+python+serialization+system+thread+program_options cxxstd=17', type=('build', 'link', 'run', 'test'))
     depends_on('cereal', type=('build', 'link', 'run', 'test'))
     depends_on('cppcheck', type=('build', 'link', 'run'))
-    depends_on('genpybind@ebrains', type=('build', 'link'))
+    depends_on('genpybind@ebrains-llvm15', type=('build', 'link'))
     depends_on('gflags', type=('build', 'link', 'run'))
     depends_on('googletest@1.11.0:+gmock', type=('build', 'link', 'run')) # variadic templates needed
     depends_on('inja', type=('build', 'link', 'run', 'test')) # template engine for PPU source jit generation
-- 
GitLab


From 3a26e468e91b27775d425a5388c7e0920a6475ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Wed, 26 Feb 2025 17:43:37 +0100
Subject: [PATCH 3/9] fix(BSS2): build of python wrapper w/ llvm@15

---
 packages/build-brainscales/package.py | 2 +-
 packages/oppulance/package.py         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/build-brainscales/package.py b/packages/build-brainscales/package.py
index cec40a9c..d1ab34f9 100644
--- a/packages/build-brainscales/package.py
+++ b/packages/build-brainscales/package.py
@@ -19,7 +19,7 @@ class BuildBrainscales(WafPackage):
         "9.0-a9",
         git="https://github.com/electronicvisions/releases-ebrains",
         tag="ebrains-9.0-a9",
-        commit="5951428b7598ff9478fa834d7e991e3ff94709ee",
+        commit="41d2597bd6c1c20aee4d538c42c248195a133680",
         submodules=True,
     )
     version(
diff --git a/packages/oppulance/package.py b/packages/oppulance/package.py
index 55d6b04e..7df3c70f 100644
--- a/packages/oppulance/package.py
+++ b/packages/oppulance/package.py
@@ -25,7 +25,7 @@ class Oppulance(Package):
         "9.0-a9",
         git="https://github.com/electronicvisions/releases-ebrains",
         tag="ebrains-9.0-a9",
-        commit="5951428b7598ff9478fa834d7e991e3ff94709ee",
+        commit="41d2597bd6c1c20aee4d538c42c248195a133680",
         submodules=True,
     )
     version(
-- 
GitLab


From 71f1b7a3638e83419d3e01fd51fb6c841a1ae3dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Thu, 27 Feb 2025 15:01:49 +0100
Subject: [PATCH 4/9] fix(llvm): backport patches for clang's Python bindings

---
 .../llvm15-clang-python-missing-kinds.patch   | 238 ++++++++++++++++++
 packages/llvm/package.py                      |  16 ++
 2 files changed, 254 insertions(+)
 create mode 100644 packages/llvm/llvm15-clang-python-missing-kinds.patch

diff --git a/packages/llvm/llvm15-clang-python-missing-kinds.patch b/packages/llvm/llvm15-clang-python-missing-kinds.patch
new file mode 100644
index 00000000..d45dc630
--- /dev/null
+++ b/packages/llvm/llvm15-clang-python-missing-kinds.patch
@@ -0,0 +1,238 @@
+From eb264d825beb048c6e673ddaf5aca069511fcfb3 Mon Sep 17 00:00:00 2001
+From: ykiko <ykikoykikoykiko@gmail.com>
+Date: Mon, 18 Mar 2024 22:13:10 +0800
+Subject: [PATCH] Add some missing Kinds to libclang python bindings (#85571)
+
+Add some Kinds existing in Index.h but missing in cindex.py.
+---
+ clang/bindings/python/clang/cindex.py | 173 +++++++++++++++++++++++++-
+ clang/docs/ReleaseNotes.rst           |   2 +
+ clang/include/clang-c/Index.h         |   2 +-
+ 3 files changed, 175 insertions(+), 2 deletions(-)
+
+diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
+index 44a34ca196274..302d99dccd77b 100644
+--- a/clang/bindings/python/clang/cindex.py
++++ b/clang/bindings/python/clang/cindex.py
+@@ -1091,6 +1091,29 @@ def __repr__(self):
+ # Represents an @available(...) check.
+ CursorKind.OBJC_AVAILABILITY_CHECK_EXPR = CursorKind(148)
+ 
++# Fixed point literal.
++CursorKind.FIXED_POINT_LITERAL = CursorKind(149)
++
++# OpenMP 5.0 [2.1.4, Array Shaping].
++CursorKind.OMP_ARRAY_SHAPING_EXPR = CursorKind(150)
++
++# OpenMP 5.0 [2.1.6 Iterators].
++CursorKind.OMP_ITERATOR_EXPR = CursorKind(151)
++
++# OpenCL's addrspace_cast<> expression.
++CursorKind.CXX_ADDRSPACE_CAST_EXPR = CursorKind(152)
++
++# Expression that references a C++20 concept.
++CursorKind.CONCEPT_SPECIALIZATION_EXPR = CursorKind(153)
++
++# Expression that references a C++20 requires expression.
++CursorKind.REQUIRES_EXPR = CursorKind(154)
++
++# Expression that references a C++20 parenthesized list aggregate initializer.
++CursorKind.CXX_PAREN_LIST_INIT_EXPR = CursorKind(155)
++
++# Represents a C++26 pack indexing expression.
++CursorKind.PACK_INDEXING_EXPR = CursorKind(156)
+ 
+ # A statement whose specific kind is not exposed via this interface.
+ #
+@@ -1312,6 +1335,114 @@ def __repr__(self):
+ # OpenMP teams distribute directive.
+ CursorKind.OMP_TEAMS_DISTRIBUTE_DIRECTIVE = CursorKind(271)
+ 
++# OpenMP teams distribute simd directive.
++CursorKind.OMP_TEAMS_DISTRIBUTE_DIRECTIVE = CursorKind(272)
++
++# OpenMP teams distribute parallel for simd directive.
++CursorKind.OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE = CursorKind(273)
++
++# OpenMP teams distribute parallel for directive.
++CursorKind.OMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE = CursorKind(274)
++
++# OpenMP target teams directive.
++CursorKind.OMP_TARGET_TEAMS_DIRECTIVE = CursorKind(275)
++
++# OpenMP target teams distribute directive.
++CursorKind.OMP_TARGET_TEAMS_DISTRIBUTE_DIRECTIVE = CursorKind(276)
++
++# OpenMP target teams distribute parallel for directive.
++CursorKind.OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_DIRECTIVE = CursorKind(277)
++
++# OpenMP target teams distribute parallel for simd directive.
++CursorKind.OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_DIRECTIVE = CursorKind(278)
++
++# OpenMP target teams distribute simd directive.
++CursorKind.OMP_TARGET_TEAMS_DISTRIBUTE_SIMD_DIRECTIVE = CursorKind(279)
++
++# C++2a std::bit_cast expression.
++CursorKind.BUILTIN_BIT_CAST_EXPR = CursorKind(280)
++
++# OpenMP master taskloop directive.
++CursorKind.OMP_MASTER_TASK_LOOP_DIRECTIVE = CursorKind(281)
++
++# OpenMP parallel master taskloop directive.
++CursorKind.OMP_PARALLEL_MASTER_TASK_LOOP_DIRECTIVE = CursorKind(282)
++
++# OpenMP master taskloop simd directive.
++CursorKind.OMP_MASTER_TASK_LOOP_SIMD_DIRECTIVE = CursorKind(283)
++
++# OpenMP parallel master taskloop simd directive.
++CursorKind.OMP_PARALLEL_MASTER_TASK_LOOP_SIMD_DIRECTIVE = CursorKind(284)
++
++# OpenMP parallel master directive.
++CursorKind.OMP_PARALLEL_MASTER_DIRECTIVE = CursorKind(285)
++
++# OpenMP depobj directive.
++CursorKind.OMP_DEPOBJ_DIRECTIVE = CursorKind(286)
++
++# OpenMP scan directive.
++CursorKind.OMP_SCAN_DIRECTIVE = CursorKind(287)
++
++# OpenMP tile directive.
++CursorKind.OMP_TILE_DIRECTIVE = CursorKind(288)
++
++# OpenMP canonical loop.
++CursorKind.OMP_CANONICAL_LOOP = CursorKind(289)
++
++# OpenMP interop directive.
++CursorKind.OMP_INTEROP_DIRECTIVE = CursorKind(290)
++
++# OpenMP dispatch directive.
++CursorKind.OMP_DISPATCH_DIRECTIVE = CursorKind(291)
++
++# OpenMP masked directive.
++CursorKind.OMP_MASKED_DIRECTIVE = CursorKind(292)
++
++# OpenMP unroll directive.
++CursorKind.OMP_UNROLL_DIRECTIVE = CursorKind(293)
++
++# OpenMP metadirective directive.
++CursorKind.OMP_META_DIRECTIVE = CursorKind(294)
++
++# OpenMP loop directive.
++CursorKind.OMP_GENERIC_LOOP_DIRECTIVE = CursorKind(295)
++
++# OpenMP teams loop directive.
++CursorKind.OMP_TEAMS_GENERIC_LOOP_DIRECTIVE = CursorKind(296)
++
++# OpenMP target teams loop directive.
++CursorKind.OMP_TARGET_TEAMS_GENERIC_LOOP_DIRECTIVE = CursorKind(297)
++
++# OpenMP parallel loop directive.
++CursorKind.OMP_PARALLEL_GENERIC_LOOP_DIRECTIVE = CursorKind(298)
++
++# OpenMP target parallel loop directive.
++CursorKind.OMP_TARGET_PARALLEL_GENERIC_LOOP_DIRECTIVE = CursorKind(299)
++
++# OpenMP parallel masked directive.
++CursorKind.OMP_PARALLEL_MASKED_DIRECTIVE = CursorKind(300)
++
++# OpenMP masked taskloop directive.
++CursorKind.OMP_MASKED_TASK_LOOP_DIRECTIVE = CursorKind(301)
++
++# OpenMP masked taskloop simd directive.
++CursorKind.OMP_MASKED_TASK_LOOP_SIMD_DIRECTIVE = CursorKind(302)
++
++# OpenMP parallel masked taskloop directive.
++CursorKind.OMP_PARALLEL_MASKED_TASK_LOOP_DIRECTIVE = CursorKind(303)
++
++# OpenMP parallel masked taskloop simd directive.
++CursorKind.OMP_PARALLEL_MASKED_TASK_LOOP_SIMD_DIRECTIVE = CursorKind(304)
++
++# OpenMP error directive.
++CursorKind.OMP_ERROR_DIRECTIVE = CursorKind(305)
++
++# OpenMP scope directive.
++CursorKind.OMP_SCOPE_DIRECTIVE = CursorKind(306)
++
++# OpenACC Compute Construct.
++CursorKind.OPEN_ACC_COMPUTE_DIRECTIVE = CursorKind(320)
++
+ ###
+ # Other Kinds
+ 
+@@ -1349,6 +1480,24 @@ def __repr__(self):
+ 
+ CursorKind.DLLEXPORT_ATTR = CursorKind(418)
+ CursorKind.DLLIMPORT_ATTR = CursorKind(419)
++CursorKind.NS_RETURNS_RETAINED = CursorKind(420)
++CursorKind.NS_RETURNS_NOT_RETAINED = CursorKind(421)
++CursorKind.NS_RETURNS_AUTORELEASED = CursorKind(422)
++CursorKind.NS_CONSUMES_SELF = CursorKind(423)
++CursorKind.NS_CONSUMED = CursorKind(424)
++CursorKind.OBJC_EXCEPTION = CursorKind(425)
++CursorKind.OBJC_NSOBJECT = CursorKind(426)
++CursorKind.OBJC_INDEPENDENT_CLASS = CursorKind(427)
++CursorKind.OBJC_PRECISE_LIFETIME = CursorKind(428)
++CursorKind.OBJC_RETURNS_INNER_POINTER = CursorKind(429)
++CursorKind.OBJC_REQUIRES_SUPER = CursorKind(430)
++CursorKind.OBJC_ROOT_CLASS = CursorKind(431)
++CursorKind.OBJC_SUBCLASSING_RESTRICTED = CursorKind(432)
++CursorKind.OBJC_EXPLICIT_PROTOCOL_IMPL = CursorKind(433)
++CursorKind.OBJC_DESIGNATED_INITIALIZER = CursorKind(434)
++CursorKind.OBJC_RUNTIME_VISIBLE = CursorKind(435)
++CursorKind.OBJC_BOXABLE = CursorKind(436)
++CursorKind.FLAG_ENUM = CursorKind(437)
+ CursorKind.CONVERGENT_ATTR = CursorKind(438)
+ CursorKind.WARN_UNUSED_ATTR = CursorKind(439)
+ CursorKind.WARN_UNUSED_RESULT_ATTR = CursorKind(440)
+@@ -1395,6 +1544,11 @@ class TemplateArgumentKind(BaseEnumeration):
+ TemplateArgumentKind.DECLARATION = TemplateArgumentKind(2)
+ TemplateArgumentKind.NULLPTR = TemplateArgumentKind(3)
+ TemplateArgumentKind.INTEGRAL = TemplateArgumentKind(4)
++TemplateArgumentKind.TEMPLATE = TemplateArgumentKind(5)
++TemplateArgumentKind.TEMPLATE_EXPANSION = TemplateArgumentKind(6)
++TemplateArgumentKind.EXPRESSION = TemplateArgumentKind(7)
++TemplateArgumentKind.PACK = TemplateArgumentKind(8)
++TemplateArgumentKind.INVALID = TemplateArgumentKind(9)
+ 
+ ### Exception Specification Kinds ###
+ class ExceptionSpecificationKind(BaseEnumeration):
+@@ -2240,8 +2394,26 @@ def __repr__(self):
+ TypeKind.OCLQUEUE = TypeKind(159)
+ TypeKind.OCLRESERVEID = TypeKind(160)
+ 
++TypeKind.OBJCOBJECT = TypeKind(161)
++TypeKind.OBJCCLASS = TypeKind(162)
++TypeKind.ATTRIBUTED = TypeKind(163)
++
++TypeKind.OCLINTELSUBGROUPAVCMCEPAYLOAD = TypeKind(164)
++TypeKind.OCLINTELSUBGROUPAVCIMEPAYLOAD = TypeKind(165)
++TypeKind.OCLINTELSUBGROUPAVCREFPAYLOAD = TypeKind(166)
++TypeKind.OCLINTELSUBGROUPAVCSICPAYLOAD = TypeKind(167)
++TypeKind.OCLINTELSUBGROUPAVCMCERESULT = TypeKind(168)
++TypeKind.OCLINTELSUBGROUPAVCIMERESULT = TypeKind(169)
++TypeKind.OCLINTELSUBGROUPAVCREFRESULT = TypeKind(170)
++TypeKind.OCLINTELSUBGROUPAVCSICRESULT = TypeKind(171)
++TypeKind.OCLINTELSUBGROUPAVCIMERESULTSINGLEREFERENCESTREAMOUT = TypeKind(172)
++TypeKind.OCLINTELSUBGROUPAVCIMERESULTSDUALREFERENCESTREAMOUT = TypeKind(173)
++TypeKind.OCLINTELSUBGROUPAVCIMERESULTSSINGLEREFERENCESTREAMIN = TypeKind(174)
++TypeKind.OCLINTELSUBGROUPAVCIMEDUALREFERENCESTREAMIN = TypeKind(175)
++
+ TypeKind.EXTVECTOR = TypeKind(176)
+ TypeKind.ATOMIC = TypeKind(177)
++TypeKind.BTFTAGATTRIBUTED = TypeKind(178)
+ 
+ class RefQualifierKind(BaseEnumeration):
+     """Describes a specific ref-qualifier of a type."""
+diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h
+index 3f3620609b6dd..60db3cf0966c0 100644
+--- a/clang/include/clang-c/Index.h
++++ b/clang/include/clang-c/Index.h
+@@ -1675,7 +1675,7 @@ enum CXCursorKind {
+   CXCursor_ConceptSpecializationExpr = 153,
+ 
+   /**
+-   * Expression that references a C++20 concept.
++   * Expression that references a C++20 requires expression.
+    */
+   CXCursor_RequiresExpr = 154,
+ 
diff --git a/packages/llvm/package.py b/packages/llvm/package.py
index b437b0ee..a0b9bd0e 100644
--- a/packages/llvm/package.py
+++ b/packages/llvm/package.py
@@ -548,6 +548,22 @@ class Llvm(CMakePackage, CudaPackage, LlvmDetection, CompilerPackage):
         sha256="c6ca6b925f150e8644ce756023797b7f94c9619c62507231f979edab1c09af78",
         when="@6:13",
     )
+
+    # begin EBRAINS
+    # add missing concept declaration CursorKind to clang's Python bindings
+    patch(
+        "https://github.com/llvm/llvm-project/commit/8b322895207c34b434698954dc67404e0bbf8d8e.patch?full_index=1",
+        sha256="173050a7f08c01bbc18d1145f455cac827754d0436befc2afd1add86e884fac0",
+        when="@15:16",
+    )
+    # Add some Kinds existing in Index.h but missing in cindex.py (dropped release note changes)
+    patch(
+        # based on https://github.com/llvm/llvm-project/commit/eb264d825beb048c6e673ddaf5aca069511fcfb3.patch?full_index=1
+        "llvm15-clang-python-missing-kinds.patch",
+        when="@15:18",
+    )
+    # end EBRAINS
+
     # fix building of older versions of llvm with newer versions of glibc
     for compiler_rt_as in ["project", "runtime"]:
         with when("compiler-rt={0}".format(compiler_rt_as)):
-- 
GitLab


From 9e9b0ce3e635aded0b796fa59df6d9f069d9808d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Thu, 6 Mar 2025 09:01:28 +0100
Subject: [PATCH 5/9] fix: small bug in install script

---
 install_spack_env.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install_spack_env.sh b/install_spack_env.sh
index a0bd61a9..f7429916 100644
--- a/install_spack_env.sh
+++ b/install_spack_env.sh
@@ -130,7 +130,7 @@ spack-python -c "exit(not len(spack.environment.active_environment().uninstalled
     else
         echo "Updating of the source cache disabled."
     fi
-    if [ $ret -ne 0 ]; then
+    if [ "$ret" -ne 0 ]; then
         (exit $ret)
     fi
 )
-- 
GitLab


From 9744c28a3debc620b88f50844f58302797213998 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Thu, 6 Mar 2025 09:01:40 +0100
Subject: [PATCH 6/9] fix(BSS2): cache content when downloading oppulance first

---
 packages/oppulance/package.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/packages/oppulance/package.py b/packages/oppulance/package.py
index 7df3c70f..7e0d22b6 100644
--- a/packages/oppulance/package.py
+++ b/packages/oppulance/package.py
@@ -4,6 +4,7 @@
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
 from spack import *
+import unittest.mock
 
 
 class Oppulance(Package):
@@ -137,6 +138,15 @@ class Oppulance(Package):
              expand=False,
              )
 
+    # see build-brainscales package for a description; we need to duplicate
+    # here, as the cache content is shared between the two repositories
+    @when("@9:")
+    def do_fetch(self, mirror_only=False):
+        # in the configure step, we need access to all archived .git folders
+        def custom_archive(self, destination):
+            super(spack.fetch_strategy.GitFetchStrategy, self).archive(destination)
+        with unittest.mock.patch('spack.fetch_strategy.GitFetchStrategy.archive', new=custom_archive):
+            super().do_fetch(mirror_only)
 
     def install(self, spec, prefix):
         ln = which('ln')
-- 
GitLab


From 1c6ea7d1c13f699cb65560bc59f958d41e4f86f0 Mon Sep 17 00:00:00 2001
From: Eleni Mathioulaki <emathioulaki@athenarc.gr>
Date: Sun, 23 Feb 2025 03:40:50 +0000
Subject: [PATCH 7/9] DO-NOT-MERGE: don't skip bss packages

---
 install_spack_env.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/install_spack_env.sh b/install_spack_env.sh
index f7429916..f0fa3f59 100644
--- a/install_spack_env.sh
+++ b/install_spack_env.sh
@@ -141,7 +141,7 @@ if [ -n "${OCI_CACHE_PREFIX}" ]; then
 fi
 
 # temporarily skip packages that fail
-spack rm hxtorch jaxsnn pynn-brainscales wf-brainscales2-demos py-snudda r-sbtabvfgen
+spack rm py-snudda r-sbtabvfgen
 
 # install the environment, use 2 jobs to reduce the amount of required RAM
 # delay exit code until we have updated the cache below
-- 
GitLab


From 7b56e50d1b86b6b30e9dcc15f4e1d22a4a07f6cb Mon Sep 17 00:00:00 2001
From: Eleni Mathioulaki <emathioulaki@athenarc.gr>
Date: Sun, 23 Feb 2025 05:27:29 +0000
Subject: [PATCH 8/9] DO-NOT-MERGE: temporarily skip wf-brainscales2-demos

---
 spack.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/spack.yaml b/spack.yaml
index f4bdea9a..01d94e20 100644
--- a/spack.yaml
+++ b/spack.yaml
@@ -69,7 +69,7 @@ spack:
 #    - sda@7.3.3d
     # Workflows (meta-packages)
     - wf-biobb
-    - wf-brainscales2-demos@9.0-a9
+#    - wf-brainscales2-demos@9.0-a9
     - wf-bsb@4.4 +nest +neuron
 #    - wf-protein-association-rates@0.1
     - wf-multi-area-model@1.2.0
-- 
GitLab


From ae69d1e030695dd910ef2c2d0c0d924e8df50c39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de>
Date: Sat, 8 Mar 2025 10:08:31 +0100
Subject: [PATCH 9/9] fix(BSS2): ignore test fails because of missing catchsegv

---
 packages/build-brainscales/package.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/build-brainscales/package.py b/packages/build-brainscales/package.py
index d1ab34f9..2419107c 100644
--- a/packages/build-brainscales/package.py
+++ b/packages/build-brainscales/package.py
@@ -208,6 +208,7 @@ class BuildBrainscales(WafPackage):
                     if (elem.tag == 'failure') and not (
                             elem.get('message').startswith("pylint:") or
                             elem.get('message').startswith("pycodestyle:") or
+                            "catchsegv: not found" in elem.get('message') or
                             ("OK" in elem.get('message') and "Segmentation fault" in elem.get('message'))):
                         raise RuntimeError("Failed test found: {}".format(testcase.get('name')))
 
-- 
GitLab