Add bohrium to spack (#6395)
* Add bohrium package.py * Changes suggested by @davydden * Add +cuda guard * Specify required environment setup
This commit is contained in:
parent
1dba6435bd
commit
a955f63530
182
var/spack/repos/builtin/packages/bohrium/package.py
Normal file
182
var/spack/repos/builtin/packages/bohrium/package.py
Normal file
@ -0,0 +1,182 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/spack/spack
|
||||
# Please also see the NOTICE and LICENSE files for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
from spack.build_systems.cuda import CudaPackage
|
||||
|
||||
|
||||
class Bohrium(CMakePackage, CudaPackage):
|
||||
"""Library for automatic acceleration of array operations"""
|
||||
|
||||
homepage = "http://bh107.org"
|
||||
url = "https://github.com/bh107/bohrium/archive/v0.8.9.tar.gz"
|
||||
maintainers = ['mfherbst']
|
||||
|
||||
#
|
||||
# Versions
|
||||
#
|
||||
version("develop", git="https://github.com/bh107/bohrium.git",
|
||||
branch="master")
|
||||
|
||||
#
|
||||
# Variants
|
||||
#
|
||||
variant("cuda", default=True,
|
||||
description="Build with CUDA code generator")
|
||||
variant('opencl', default=True,
|
||||
description="Build with OpenCL code generator")
|
||||
variant('openmp', default=True,
|
||||
description="Build with OpenMP code generator")
|
||||
|
||||
variant('node', default=True,
|
||||
description="Build the node vector engine manager")
|
||||
variant('proxy', default=True,
|
||||
description="Build the proxy vector engine manager")
|
||||
variant('python', default=True,
|
||||
description="Build the numpy-like bridge "
|
||||
"to enable use from python")
|
||||
variant('cbridge', default=True,
|
||||
description="Build the bridge interface towards plain C")
|
||||
|
||||
variant('blas', default=True,
|
||||
description="Build with BLAS extension methods")
|
||||
variant('lapack', default=True,
|
||||
description="Build with LAPACK extension methods")
|
||||
|
||||
#
|
||||
# Conflicts and extensions
|
||||
#
|
||||
conflicts('%intel')
|
||||
conflicts('%clang@:3.5')
|
||||
extends('python', when="+python")
|
||||
|
||||
# Bohrium needs at least one vector engine and
|
||||
# at least one vector engine manager
|
||||
conflicts('~node~proxy')
|
||||
conflicts('~openmp~opencl~cuda')
|
||||
|
||||
#
|
||||
# Dependencies
|
||||
#
|
||||
depends_on('cmake@2.8:', type="build")
|
||||
depends_on('boost+system+serialization+filesystem+regex')
|
||||
|
||||
# cuda dependencies managed by CudaPackage class
|
||||
depends_on('opencl', when="+opencl")
|
||||
|
||||
# NOTE The lapacke interface and hence netlib-lapack
|
||||
# is the strictly required lapack provider
|
||||
# for bohrium right now.
|
||||
depends_on("netlib-lapack+lapacke", when="+lapack")
|
||||
depends_on("blas", when="+blas")
|
||||
|
||||
depends_on('python', type="build", when="~python")
|
||||
depends_on('python', when="+python")
|
||||
depends_on('py-numpy', when="+python")
|
||||
depends_on('swig', type="build", when="+python")
|
||||
depends_on('py-cython', type="build", when="+python")
|
||||
|
||||
depends_on('zlib', when="+proxy")
|
||||
|
||||
#
|
||||
# Settings and cmake cache
|
||||
#
|
||||
def cmake_args(self):
|
||||
spec = self.spec
|
||||
|
||||
cuda_arch = spec.variants['cuda_arch'].value
|
||||
if "+cuda" in spec and len(cuda_arch) >= 1 and cuda_arch[0]:
|
||||
# TODO Add cuda_arch support to Bohrium once the basic setup
|
||||
# via Spack works.
|
||||
raise InstallError(
|
||||
"Bohrium does not support setting the CUDA architecture yet."
|
||||
)
|
||||
|
||||
args = [
|
||||
"-DPYTHON_EXECUTABLE:FILEPATH=" + spec['python'].command.path,
|
||||
# Hard-disable Jupyter, since this would override a config
|
||||
# file in the user's home directory in some cases during
|
||||
# the configuration stage.
|
||||
"-DJUPYTER_FOUND=FALSE",
|
||||
"-DJUPYTER_EXECUTABLE=FALSE",
|
||||
#
|
||||
# Vector engine managers
|
||||
"-DVEM_NODE=" + str("+node" in spec),
|
||||
"-DVEM_PROXY=" + str("+proxy" in spec),
|
||||
#
|
||||
# Vector engines
|
||||
"-DVE_OPENMP=" + str("+openmp" in spec),
|
||||
"-DVE_OPENCL=" + str("+opencl" in spec),
|
||||
"-DVE_CUDA=" + str("+cuda" in spec),
|
||||
#
|
||||
# Bridges and interfaces
|
||||
"-DBRIDGE_BHXX=ON",
|
||||
"-DBRIDGE_C=" + str("+cbridge" in spec or "+python" in spec),
|
||||
"-DBRIDGE_NPBACKEND=" + str("+python" in spec),
|
||||
"-DNO_PYTHON3=ON", # Only build python version we provide
|
||||
]
|
||||
|
||||
#
|
||||
# Extension methods
|
||||
#
|
||||
if "+blas" in spec:
|
||||
args += [
|
||||
"-DEXT_BLAS=ON",
|
||||
"-DCBLAS_FOUND=True",
|
||||
"-DCBLAS_LIBRARIES=" + ";".join(spec["blas"].libs),
|
||||
"-DCBLAS_INCLUDES=" + spec["blas"].prefix.include,
|
||||
]
|
||||
else:
|
||||
args += ["-DEXT_BLAS=OFF", "-DDCBLAS_FOUND=False"]
|
||||
|
||||
if "+lapack" in spec:
|
||||
args += [
|
||||
"-DEXT_LAPACK=ON",
|
||||
"-DLAPACKE_FOUND=True",
|
||||
"-DLAPACKE_LIBRARIES=" + ";".join(spec["lapack"].libs),
|
||||
"-DLAPACKE_INCLUDE_DIR=" + spec["lapack"].prefix.include,
|
||||
]
|
||||
else:
|
||||
args += ["-DEXT_LAPACK=OFF", "-DLAPACKE_FOUND=False"]
|
||||
|
||||
# TODO Other extension methods are not ready yet, because of missing
|
||||
# packages or because they are untested, so disable in order
|
||||
# to prevent their setup:
|
||||
args += [
|
||||
"-DEXT_LAPACK=" + str("+lapack" in spec),
|
||||
"-DEXT_CLBLAS=OFF", # clBLAS not in Spack yet
|
||||
"-DEXT_TDMA=OFF", # untested
|
||||
"-DEXT_VISUALIZER=OFF", # untested
|
||||
"-DEXT_OPENCV=OFF", # untested
|
||||
]
|
||||
|
||||
return args
|
||||
|
||||
#
|
||||
# Environment setup
|
||||
#
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
# Bohrium needs an extra include dir apart from
|
||||
# the self.prefix.include dir
|
||||
run_env.prepend_path("CPATH", self.prefix.include.bohrium)
|
Loading…
Reference in New Issue
Block a user