diff --git a/packages/genpybind/package.py b/packages/genpybind/package.py index b33268c5cf400f5cf0cf203c93cca07bfd3a10fe..b2a639b8c0605f322bed8d3e3b0fa4ba9dda03cd 100644 --- a/packages/genpybind/package.py +++ b/packages/genpybind/package.py @@ -40,6 +40,7 @@ class Genpybind(WafPackage): version('develop', branch='develop') version('visions', branch='master', git='https://github.com/electronicvisions/genpybind') + version('ebrains', tag='ebrains_release-1-rc1', git='https://github.com/electronicvisions/genpybind') depends_on( 'llvm+clang+python+visionary@5.0.0:', @@ -52,7 +53,7 @@ class Genpybind(WafPackage): def configure_args(self): args = super(Genpybind, self).configure_args() - if self.spec.satisfies("@visions"): + if self.spec.satisfies("@visions") or self.spec.satisfies("@ebrains"): # currently only our HEAD supports the rename # TODO: adapt once the change is upstream args.append("--genpybind-disable-tests") diff --git a/packages/meta-brainscales/package.py b/packages/meta-brainscales/package.py index 4f1f7d72240c07c483cb8be6bac61f2a2fd22027..383159fe5c20cdfc8c067d71d4e2d65458d50a3d 100644 --- a/packages/meta-brainscales/package.py +++ b/packages/meta-brainscales/package.py @@ -35,7 +35,7 @@ class MetaBrainscales(Package): depends_on('cereal') depends_on('cppcheck') depends_on('doxygen+graphviz') - depends_on('genpybind@visions') + depends_on('genpybind@ebrains') depends_on('gflags') depends_on('googletest+gmock') depends_on('intel-tbb') # ppu gdbserver diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py new file mode 100644 index 0000000000000000000000000000000000000000..470a2e5a6fd564b7c81c33715571a685448de0b3 --- /dev/null +++ b/packages/pynn-brainscales/package.py @@ -0,0 +1,76 @@ +# Copyright 2013-2021 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) +from spack import * + + +class PynnBrainscales(WafPackage): + """PyNN toplevel for the BrainScaleS-2 neuromorphic hardware systems""" + + homepage = "https://github.com/electronicvisions/pynn-brainscales" + #url = "https://github.com/electronicvisions/pynn-brainscales/archive/v0.1.0.tar.gz" + git = "https://github.com/electronicvisions/pynn-brainscales.git" + + version('waf', branch='waf') + depends_on('meta-brainscales', type=('build', 'link', 'run')) + extends('python') + + def setup_build_environment(self, env): + """waf needs to find headers and libraries by itself (mostly `boost` + tool, but also `gtest`); it also needs to run executables during + configuration.""" + + include = [] + for dep in self.spec.traverse(deptype='build'): + query = self.spec[dep.name] + try: + include.extend(query.headers.directories) + except: + pass + + library = [] + for dep in self.spec.traverse(deptype=('link', 'run')): + query = self.spec[dep.name] + try: + print("\nQUERY", query) + library.extend(query.libs.directories) + print(query.libs.directories, "\n") + except: + pass + + path = [] + for dep in self.spec.traverse(deptype=('build', 'link', 'run')): + query = self.spec[dep.name] + try: + path.append(query.prefix.bin) + except: + pass + + # llvm might be built with ~shared_libs but still builds shared libs + if not any('llvm' in lib for lib in library): + library.append(self.spec['llvm'].prefix.lib) + + env.set('CPATH', ':'.join(include)) + env.set('C_INCLUDE_PATH', ':'.join(include)) + env.set('CPLUS_INCLUDE_PATH', ':'.join(include)) + env.set('LIBRARY_PATH', ':'.join(library)) + env.set('LD_LIBRARY_PATH', ':'.join(library)) + env.prepend_path('PATH', ':'.join(path)) + + # override configure step as we perform a project setup first + def configure(self, spec, prefix): + """Setup and configure the project.""" + + self.waf('setup', '--project=pynn-brainscales', '--without-grenade-ppu-support', '--without-munge', + '--project=grenade@ebrains_release-1-rc1', + '--project=hate@ebrains_release-1-rc1', + '--project=hxcomm@ebrains_release-1-rc1', + '--project=lib-rcf@ebrains_release-1-rc1', + '--project=visions-slurm@ebrains_release-1-rc1' + ) + + args = ['--prefix={0}'.format(self.prefix)] + args += self.configure_args() + + self.waf('configure', *args) diff --git a/spack.yaml b/spack.yaml index a2aab4b9d366a646671b0df32ba00b2eb72f043b..a8f3e18f090aad71d3b94a0ff14e660caa2a475a 100644 --- a/spack.yaml +++ b/spack.yaml @@ -22,3 +22,4 @@ spack: - tvb-storage ^binutils+ld+gold %gcc@10.3.0 - tvb-framework ^binutils+ld+gold %gcc@10.3.0 - meta-brainscales %gcc@10.3.0 + - pynn-brainscales %gcc@10.3.0