From 6d46fbb6f73f71e135334be774dffb9c3bd21f1a Mon Sep 17 00:00:00 2001
From: Sinan <sbulutw@gmail.com>
Date: Tue, 30 Jun 2020 06:05:08 -0700
Subject: [PATCH] New package/graphblast (#17289)

* new package: GraphBlast

* polish

* add cuda_arch setup

* flake8

* the package requires cuda variant and dependency

* add comments

* define cuda_arch

* implement multiple and custom cuda arches

* tidy up, improve

* flake8

* improve style

* add variant description

* use patch method, add new version for latest commit building since master now fails

* remove gcc conflict, tidy up

* also indicate build range for boost

Co-authored-by: Sinan81 <sbulut@3vgeomatics.com>
Co-authored-by: Sinan81 <Sinan81@github>
---
 .../builtin/packages/graphblast/package.py    | 42 +++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 var/spack/repos/builtin/packages/graphblast/package.py

diff --git a/var/spack/repos/builtin/packages/graphblast/package.py b/var/spack/repos/builtin/packages/graphblast/package.py
new file mode 100644
index 0000000000..59ef3d3cb3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/graphblast/package.py
@@ -0,0 +1,42 @@
+# Copyright 2013-2020 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 Graphblast(MakefilePackage, CudaPackage):
+    """High-Performance Linear Algebra-based Graph Primitives on GPUs"""
+
+    homepage    = "https://github.com/gunrock/graphblast"
+    git         = "https://github.com/gunrock/graphblast.git"
+
+    version('master', submodules=True)
+    version('2020-05-07', submodules=True, commit='1a052558a71f2cd67f5d6fe9db3b274c303ef8f6', preferred=True)
+
+    variant('cuda', default=True, description="Build with Cuda support")
+
+    depends_on('boost +program_options')
+
+    # This package is confirmed to compile with:
+    #   gcc@:5.4.0,7.5.0 , boost@1.58.0:1.60.0 , cuda@9:
+
+    # TODO: the package doesn't compile as CMakePackage
+    # once that is fixed it should be converted to a CMakePackage type.
+
+    conflicts('cuda_arch=none', when='+cuda',
+              msg='Must specify CUDA compute capabilities of your GPU. \
+See "spack info graphblast"')
+
+    def install(self, spec, prefix):
+        install_tree(self.build_directory, self.prefix)
+
+    def patch(self):
+        cuda_arch_list = self.spec.variants['cuda_arch'].value
+        arches = 'ARCH = '
+        for i in cuda_arch_list:
+            arches = arches +\
+                ' -gencode arch=compute_{0},code=compute_{0}'.format(i)
+        makefile = FileFilter('common.mk')
+        makefile.filter(r'^ARCH =.*', arches)
-- 
GitLab