diff --git a/packages/hxtorch/package.py b/packages/hxtorch/package.py index 5cd9febe872408a212007b377388480c974d1c2e..95413009906392fe1feace25dd7e95622f07a717 100644 --- a/packages/hxtorch/package.py +++ b/packages/hxtorch/package.py @@ -62,76 +62,6 @@ class Hxtorch(WafPackage): depends_on('yaml-cpp+shared', 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 = [] - include_exclude_dirs = set(['/usr/include']) - for dep in self.spec.traverse(deptype='build', root=False): - query = self.spec[dep.name] - if dep.name in ['pthreadpool', 'fxdiv']: - print('skipping {} in SPACK_INCLUDE_DIRS/CPATH/C{{,_PLUS}}_INCLUDE_PATH\n'.format(dep.name)) - for d in query.headers.directories: - if os.path.exists(d): - env.remove_path('SPACK_INCLUDE_DIRS', d) - continue - try: - include_dirs = set(query.headers.directories) - include_dirs -= include_exclude_dirs - print('headers (', dep.name, '):', include_dirs, "\n") - include.extend(list(include_dirs)) - except spack.error.NoHeadersError: - # we don't care if no header directories are found - pass - - library = [] - library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64']) - for dep in self.spec.traverse(deptype=('link', 'run'), root=False): - query = self.spec[dep.name] - try: - library_dirs = set(query.libs.directories) - library_dirs -= library_exclude_dirs - print('libs (', dep.name, '):', library_dirs, "\n") - library.extend(list(library_dirs)) - except spack.error.NoLibrariesError: - # we don't care if no library directories are found - pass - - path = [] - for dep in self.spec.traverse(deptype=('build', 'link', 'run'), root=False): - if dep.name in ['pthreadpool', 'fxdiv']: - print('skipping {} for bin'.format(dep.name)) - continue - query = self.spec[dep.name] - if os.path.exists(self.prefix.bin): - path.append(query.prefix.bin) - print('bin (', dep.name, '):', query.prefix.bin, "\n") - - # llvm might be built with ~shared_libs but still builds shared libs - if not any('llvm' in lib for lib in library): - print("libs: manually adding ", self.spec['llvm'].prefix.lib) - library.append(self.spec['llvm'].prefix.lib) - - # explicitly add googletest library if it isn't found above; - # adding in front of the list of libraries is a hack to circumvent - # issues from vendoring packages like pthreadpool - if not any('googletest' in lib for lib in library): - if os.path.isdir(self.spec['googletest'].prefix.lib64): - print("libs: manually inserting at front ", self.spec['googletest'].prefix.lib64) - library.insert(0, self.spec['googletest'].prefix.lib64) - if os.path.isdir(self.spec['googletest'].prefix.lib): - print("libs: manually inserting at front ", self.spec['googletest'].prefix.lib) - library.insert(0, self.spec['googletest'].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('WAF_CONFIGURE_LD_LIBRARY_PATH', ':'.join(library)) - env.prepend_path('PATH', ':'.join(path)) - def _setup_common_env(self, env): # grenade needs to find some libraries for the JIT-compilation of # programs for BrainScaleS-2's embedded processor. @@ -157,10 +87,19 @@ class Hxtorch(WafPackage): def configure(self, spec, prefix): """Setup and configure the project.""" + # spack tries to find headers and libraries by itself (i.e. it's not + # relying on the compiler to find it); we explicitly expose the + # spack-provided env vars that contain include and library paths env = os.environ + if 'SPACK_INCLUDE_DIRS' in env: + env['C_INCLUDE_PATH'] = env['SPACK_INCLUDE_DIRS'] + env['CPLUS_INCLUDE_PATH'] = env['SPACK_INCLUDE_DIRS'] + if 'SPACK_LINK_DIRS' in env: + env['LIBRARY_PATH'] = env['SPACK_LINK_DIRS'] + env['LD_LIBRARY_PATH'] = env['SPACK_LINK_DIRS'] if 'SPACK_COMPILER_IMPLICIT_RPATHS' in env: env['LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['LIBRARY_PATH'] - env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['WAF_CONFIGURE_LD_LIBRARY_PATH'] + env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['LD_LIBRARY_PATH'] self.waf('setup', '--repo-db-url=https://github.com/electronicvisions/projects', '--without-munge', diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py index 7f6811db0779594939d901922292f0a0837bba49..fda6b1501f18e750e2830c5ecc0314c0cb74b5c4 100644 --- a/packages/pynn-brainscales/package.py +++ b/packages/pynn-brainscales/package.py @@ -59,56 +59,6 @@ class PynnBrainscales(WafPackage): depends_on('yaml-cpp+shared', 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 = [] - include_exclude_dirs = set(['/usr/include']) - for dep in self.spec.traverse(deptype='build', root=False): - query = self.spec[dep.name] - try: - include_dirs = set(query.headers.directories) - include_dirs -= include_exclude_dirs - print('headers (', dep.name, '):', include_dirs, "\n") - include.extend(list(include_dirs)) - except spack.error.NoHeadersError: - # we don't care if no header directories are found - pass - - library = [] - library_exclude_dirs = set(['/lib', '/lib64', '/usr/lib', '/usr/lib64']) - for dep in self.spec.traverse(deptype=('link', 'run'), root=False): - query = self.spec[dep.name] - try: - library_dirs = set(query.libs.directories) - library_dirs -= library_exclude_dirs - print('libs (', dep.name, '):', library_dirs, "\n") - library.extend(list(library_dirs)) - except spack.error.NoLibrariesError: - # we don't care if no library directories are found - pass - - path = [] - for dep in self.spec.traverse(deptype=('build', 'link', 'run'), root=False): - query = self.spec[dep.name] - if os.path.exists(self.prefix.bin): - path.append(query.prefix.bin) - print('bin (', dep.name, '):', query.prefix.bin, "\n") - - # llvm might be built with ~shared_libs but still builds shared libs - if not any('llvm' in lib for lib in library): - print("libs: manually adding ", self.spec['llvm'].prefix.lib) - 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('WAF_CONFIGURE_LD_LIBRARY_PATH', ':'.join(library)) - env.prepend_path('PATH', ':'.join(path)) - def _setup_common_env(self, env): # grenade needs to find some libraries for the JIT-compilation of # programs for BrainScaleS-2's embedded processor. @@ -134,10 +84,19 @@ class PynnBrainscales(WafPackage): def configure(self, spec, prefix): """Setup and configure the project.""" + # spack tries to find headers and libraries by itself (i.e. it's not + # relying on the compiler to find it); we explicitly expose the + # spack-provided env vars that contain include and library paths env = os.environ + if 'SPACK_INCLUDE_DIRS' in env: + env['C_INCLUDE_PATH'] = env['SPACK_INCLUDE_DIRS'] + env['CPLUS_INCLUDE_PATH'] = env['SPACK_INCLUDE_DIRS'] + if 'SPACK_LINK_DIRS' in env: + env['LIBRARY_PATH'] = env['SPACK_LINK_DIRS'] + env['LD_LIBRARY_PATH'] = env['SPACK_LINK_DIRS'] if 'SPACK_COMPILER_IMPLICIT_RPATHS' in env: env['LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['LIBRARY_PATH'] - env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['WAF_CONFIGURE_LD_LIBRARY_PATH'] + env['WAF_CONFIGURE_LD_LIBRARY_PATH'] = env['SPACK_COMPILER_IMPLICIT_RPATHS'] + ':' + env['LD_LIBRARY_PATH'] self.waf('setup', '--repo-db-url=https://github.com/electronicvisions/projects', '--without-munge',