diff --git a/packages/quiggeldy/package.py b/packages/quiggeldy/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..999644d90430957e4ab8e8e40f05c2dd5322fbcf
--- /dev/null
+++ b/packages/quiggeldy/package.py
@@ -0,0 +1,62 @@
+# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+import os
+import unittest.mock
+import xml.etree.ElementTree as ET
+
+from spack import *
+from spack.util.environment import EnvironmentModifications
+import spack.build_environment
+
+import importlib
+build_brainscales = importlib.import_module("spack.pkg.ebrains-spack-builds.build_brainscales")
+
+
+class Quiggeldy(build_brainscales.BuildBrainscales):
+ """quiggeldy --- the low-latency/high-throughput BSS-2 nmhw resource scheduler"""
+
+ homepage = "https://github.com/electronicvisions/hxcomm"
+ git = "https://github.com/electronicvisions/hxcomm"
+
+ maintainers = ["emuller", "muffgaga"]
+
+ # host software dependencies
+ depends_on('bitsery', type=('build', 'link', 'run', 'test'))
+ depends_on('binutils+gold+ld+plugins', type=('build', 'link', 'run')) # specialize
+ 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('gflags', type=('build', 'link', 'run'))
+ depends_on('googletest@1.11.0:+gmock', type=('build', 'link', 'run')) # variadic templates needed
+ depends_on('liblockfile', type=('build', 'link', 'run'))
+ depends_on('log4cxx@0.12.1:1.0', when="@:8.0-a3", type=('build', 'link', 'run'))
+ depends_on('log4cxx@1.1: +events_at_exit', when="@8.0-a4:", type=('build', 'link', 'run'))
+ depends_on('pkgconfig', type=('build', 'link', 'run'))
+ depends_on('psmisc', type=('run', 'test'))
+ depends_on('util-linux', type=('build', 'link', 'run'))
+ depends_on('yaml-cpp+shared', type=('build', 'link', 'run'))
+
+ # override configure step as we only want to build quiggeldy from hxcomm
+ def configure(self, spec, prefix):
+ args = ['--prefix={0}'.format(self.prefix)]
+ args += self.configure_args()
+
+ if spec.version >= Version("9"):
+ self.waf('setup', '--directory=hxcomm', '--repo-db-url=https://github.com/electronicvisions/projects')
+ self.waf('configure', '--build-profile=release', '--disable-doxygen', *args)
+
+ def build_args(self):
+ args = super(BuildBrainscales, self).build_args()
+ args.append("--targets=quiggeldy")
+ return args
+
+ def install_test(self):
+ with working_dir('spack-test', create=True):
+ old_pythonpath = os.environ.get('PYTHONPATH', '')
+ os.environ['PYTHONPATH'] = ':'.join([str(self.prefix.lib), old_pythonpath])
+ bash = which("bash")
+ # ignore segfaults for now (exit code 139)
+ bash('-c', '(python -c "import hxtorch; print(hxtorch.__file__)" || ( test $? -eq 139 && echo "segfault")) || exit $?')
diff --git a/spack.yaml b/spack.yaml
index 6f22736623fcaff27f40367b43460cf56c03b6ad..aa0442180233cd4474a72f934ecb24948979b5a8 100644
--- a/spack.yaml
+++ b/spack.yaml
@@ -70,5 +70,7 @@ spack:
#- py-cerebstats
#- py-cerebunit
#- py-morphounit@1.0.4
+ # Services
+ - quiggeldy@9.0-a4
concretizer:
unify: true