From a62e1a0451d81241e730d0e93dcb113d31041ebf Mon Sep 17 00:00:00 2001
From: Brian Van Essen <vanessen1@llnl.gov>
Date: Tue, 23 Jan 2018 18:05:54 -0700
Subject: [PATCH] Lbann update (#6987)

* Added new link line flag

* Refactored some of the common components out of the different
version's build commands.  Also corrected the when commands to
properly capture non-numeric names such as local.

* Added support to the Elemental package for the Hydrogen branch.
---
 .../builtin/packages/elemental/package.py     | 37 ++++++++++++++++++
 .../repos/builtin/packages/lbann/package.py   | 38 ++++++++++---------
 2 files changed, 57 insertions(+), 18 deletions(-)

diff --git a/var/spack/repos/builtin/packages/elemental/package.py b/var/spack/repos/builtin/packages/elemental/package.py
index 14e376628c..19ab7583ab 100644
--- a/var/spack/repos/builtin/packages/elemental/package.py
+++ b/var/spack/repos/builtin/packages/elemental/package.py
@@ -34,6 +34,8 @@ class Elemental(CMakePackage):
     homepage = "http://libelemental.org"
     url      = "https://github.com/elemental/Elemental/archive/v0.87.6.tar.gz"
 
+    version('hydrogen-develop', git='https://github.com/LLNL/Elemental.git', branch='hydrogen')
+
     version('develop', git='https://github.com/elemental/Elemental.git', branch='master')
     version('0.87.7', '6c1e7442021c59a36049e37ea69b8075')
     version('0.87.6', '9fd29783d45b0a0e27c0df85f548abe9')
@@ -105,6 +107,7 @@ def libs(self):
             'libEl', root=self.prefix, shared=shared, recurse=True
         )
 
+    @when('@0.87.6:')
     def cmake_args(self):
         spec = self.spec
 
@@ -170,3 +173,37 @@ def cmake_args(self):
                 '-DPYTHON_SITE_PACKAGES:STRING={0}'.format(site_packages_dir)])
 
         return args
+
+    @when('@:0.87.6')
+    def cmake_args(self):
+        spec = self.spec
+
+        if '@:0.87.7' in spec and '%intel@:17.0.2' in spec:
+            raise UnsupportedCompilerError(
+                "Elemental {0} has a known bug with compiler: {1} {2}".format(
+                    spec.version, spec.compiler.name, spec.compiler.version))
+
+        args = [
+            '-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
+            '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+            '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
+            '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
+            '-DBUILD_SHARED_LIBS:BOOL=%s'      % ('+shared' in spec),
+            '-DHydrogen_ENABLE_OPENMP:BOOL=%s'       % ('+hybrid' in spec),
+            '-DHydrogen_ENABLE_QUADMATH:BOOL=%s'     % ('+quad' in spec),
+            '-DHydrogen_USE_64BIT_INTS:BOOL=%s'      % ('+int64' in spec),
+            '-DHydrogen_USE_64BIT_BLAS_INTS:BOOL=%s' % ('+int64_blas' in spec),
+            '-DHydrogen_ENABLE_MPC:BOOL=%s'        % ('+mpfr' in spec),
+            '-DHydrogen_GENERAL_LAPACK_FALLBACK=ON',
+        ]
+
+        if 'blas=openblas' in spec:
+            args.extend([
+                '-DHydrogen_USE_OpenBLAS:BOOL=%s' % ('blas=openblas' in spec),
+                '-DOpenBLAS_DIR:STRING={0}'.format(
+                    spec['elemental'].prefix)])
+        elif 'blas=mkl' in spec:
+            args.extend([
+                '-DHydrogen_USE_MKL:BOOL=%s' % ('blas=mkl' in spec)])
+
+        return args
diff --git a/var/spack/repos/builtin/packages/lbann/package.py b/var/spack/repos/builtin/packages/lbann/package.py
index 8cfd6e4c62..6cc53ae2df 100644
--- a/var/spack/repos/builtin/packages/lbann/package.py
+++ b/var/spack/repos/builtin/packages/lbann/package.py
@@ -62,16 +62,27 @@ class Lbann(CMakePackage):
     depends_on('cnpy')
     depends_on('nccl', when='+gpu +nccl')
 
-    @when('@0.94:')
-    def cmake_args(self):
+    @property
+    def common_config_args(self):
         spec = self.spec
         # Environment variables
         CPPFLAGS = []
-        CPPFLAGS.append('-DLBANN_SET_EL_RNG')
+        CPPFLAGS.append('-DLBANN_SET_EL_RNG -ldl')
 
-        args = [
+        return [
             '-DCMAKE_INSTALL_MESSAGE=LAZY',
             '-DCMAKE_CXX_FLAGS=%s' % ' '.join(CPPFLAGS),
+            '-DLBANN_VERSION=spack',
+            '-DCNPY_DIR={0}'.format(spec['cnpy'].prefix),
+        ]
+
+    # Get any recent versions or non-numeric version
+    # Note that develop > numeric and non-develop < numeric
+    @when('@:0.91' or '@0.94:')
+    def cmake_args(self):
+        spec = self.spec
+        args = self.common_config_args
+        args.extend([
             '-DLBANN_WITH_TOPO_AWARE:BOOL=%s' % ('+gpu +nccl' in spec),
             '-DLBANN_SEQUENTIAL_INITIALIZATION:BOOL=%s' %
             ('+seq_init' in spec),
@@ -79,10 +90,8 @@ def cmake_args(self):
             '-DLBANN_WITH_VTUNE=OFF',
             '-DElemental_DIR={0}/CMake/elemental'.format(
                 spec['elemental'].prefix),
-            '-DCNPY_DIR={0}'.format(spec['cnpy'].prefix),
             '-DLBANN_DATATYPE={0}'.format(spec.variants['dtype'].value),
-            '-DLBANN_VERBOSE=0',
-            '-DLBANN_VERSION=spack']
+            '-DLBANN_VERBOSE=0'])
 
         if '+opencv' in spec:
             args.extend(['-DOpenCV_DIR:STRING={0}'.format(
@@ -108,16 +117,11 @@ def cmake_args(self):
 
         return args
 
-    @when('@:0.93')
+    @when('@0.91:0.93')
     def cmake_args(self):
         spec = self.spec
-        # Environment variables
-        CPPFLAGS = []
-        CPPFLAGS.append('-DLBANN_SET_EL_RNG')
-
-        args = [
-            '-DCMAKE_INSTALL_MESSAGE=LAZY',
-            '-DCMAKE_CXX_FLAGS=%s' % ' '.join(CPPFLAGS),
+        args = self.common_config_args
+        args.extend([
             '-DWITH_CUDA:BOOL=%s' % ('+gpu' in spec),
             '-DWITH_CUDNN:BOOL=%s' % ('+gpu' in spec),
             '-DELEMENTAL_USE_CUBLAS:BOOL=%s' % (
@@ -125,13 +129,11 @@ def cmake_args(self):
             '-DWITH_TBINF=OFF',
             '-DWITH_VTUNE=OFF',
             '-DElemental_DIR={0}'.format(spec['elemental'].prefix),
-            '-DCNPY_DIR={0}'.format(spec['cnpy'].prefix),
             '-DELEMENTAL_MATH_LIBS={0}'.format(
                 spec['elemental'].libs),
             '-DSEQ_INIT:BOOL=%s' % ('+seq_init' in spec),
             '-DVERBOSE=0',
-            '-DLBANN_HOME=.',
-            '-DLBANN_VER=spack']
+            '-DLBANN_HOME=.'])
 
         if spec.variants['dtype'].value == 'float':
             args.extend(['-DDATATYPE=4'])
-- 
GitLab