summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/bohrium/package.py74
1 files changed, 57 insertions, 17 deletions
diff --git a/var/spack/repos/builtin/packages/bohrium/package.py b/var/spack/repos/builtin/packages/bohrium/package.py
index fa7e499525..a4202688d2 100644
--- a/var/spack/repos/builtin/packages/bohrium/package.py
+++ b/var/spack/repos/builtin/packages/bohrium/package.py
@@ -22,8 +22,9 @@
# 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
+from spack import *
+import os
class Bohrium(CMakePackage, CudaPackage):
@@ -63,12 +64,15 @@ class Bohrium(CMakePackage, CudaPackage):
description="Build with BLAS extension methods")
variant('lapack', default=True,
description="Build with LAPACK extension methods")
+ variant('opencv', default=True,
+ description="Build with OpenCV extension methods")
#
# Conflicts and extensions
#
conflicts('%intel')
conflicts('%clang@:3.5')
+ conflicts('%gcc@:4.7')
extends('python', when="+python")
# Bohrium needs at least one vector engine and
@@ -88,8 +92,14 @@ class Bohrium(CMakePackage, CudaPackage):
# 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('netlib-lapack+lapacke', when="+lapack")
+ depends_on('blas', when="+blas")
+
+ # Make sure an appropriate opencv is used
+ depends_on('opencv', when="+opencv")
+ depends_on('opencv+cuda', when="+opencv+cuda")
+ depends_on('opencv+openmp', when="+opencv+openmp")
+ depends_on('opencv+openmp+cuda', when="+opencv+openmp+cuda")
depends_on('python', type="build", when="~python")
depends_on('python', when="+python")
@@ -99,12 +109,18 @@ class Bohrium(CMakePackage, CudaPackage):
depends_on('zlib', when="+proxy")
+ @property
+ def config_file(self):
+ """Return the path of the Bohrium system-wide configuration file"""
+ return join_path(self.prefix.etc.bohrium, "config.ini")
+
#
# Settings and cmake cache
#
def cmake_args(self):
spec = self.spec
+ # Sanity check
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
@@ -114,22 +130,22 @@ class Bohrium(CMakePackage, CudaPackage):
)
args = [
+ # Choose a particular python version
"-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",
#
+ # Force the configuration file to appear at a sensible place
+ "-DFORCE_CONFIG_PATH=" + os.path.dirname(self.config_file),
+ #
# 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),
@@ -138,6 +154,23 @@ class Bohrium(CMakePackage, CudaPackage):
]
#
+ # Vector engines
+ #
+ args += [
+ "-DVE_OPENCL=" + str("+opencl" in spec),
+ "-DVE_CUDA=" + str("+cuda" in spec),
+ ]
+
+ if "+openmp" in spec:
+ args += [
+ "-DVE_OPENMP=ON",
+ "-DOPENMP_FOUND=True",
+ "-DVE_OPENMP_COMPILER_CMD=" + self.compiler.cc,
+ ]
+ else:
+ args += ["-DVE_OPENMP=OFF", "-DOPENMP_FOUND=False"]
+
+ #
# Extension methods
#
if "+blas" in spec:
@@ -160,17 +193,23 @@ class Bohrium(CMakePackage, CudaPackage):
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:
+ if "+opencv" in spec:
+ args += [
+ "-DEXT_OPENCV=ON",
+ "-DOpenCV_FOUND=True",
+ "-DOpenCV_INCLUDE_DIRS=" + spec["opencv"].prefix.include,
+ "-DOpenCV_LIBS=" + ";".join(spec["opencv"].prefix.libs),
+ ]
+ else:
+ args += ["-DEXT_OPENCV=OFF", "-DOpenCV_FOUND=False"]
+
+ # TODO Other extension methods are not ready yet,
+ # because of missing packages in Spack
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
+ "-DEXT_CLBLAS=OFF", # clBLAS missing
+ # Bohrium visualizer extension method
+ "-DEXT_VISUALIZER=OFF", # freeglut missing
]
-
return args
#
@@ -180,3 +219,4 @@ class Bohrium(CMakePackage, CudaPackage):
# Bohrium needs an extra include dir apart from
# the self.prefix.include dir
run_env.prepend_path("CPATH", self.prefix.include.bohrium)
+ run_env.set("BH_CONFIG", self.config_file)