summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Bridges <patrickb314@gmail.com>2023-10-16 21:13:31 -0600
committerGitHub <noreply@github.com>2023-10-16 21:13:31 -0600
commit7cc17f208c2b2a10491c6cbe23e7b65fd2482447 (patch)
tree0903b28e53941d10dad79fc392d76a3aea4e462f
parent2913cd936afe9cd9b5c108088d1604b2b131b0b9 (diff)
downloadspack-7cc17f208c2b2a10491c6cbe23e7b65fd2482447.tar.gz
spack-7cc17f208c2b2a10491c6cbe23e7b65fd2482447.tar.bz2
spack-7cc17f208c2b2a10491c6cbe23e7b65fd2482447.tar.xz
spack-7cc17f208c2b2a10491c6cbe23e7b65fd2482447.zip
Creation of Beatnik package and associated updates to silo and cabana spack package (#40382)
* Added initial package for building Beatnik with spack * Fixed github ID for Jason as a maintainer. * Major revision of beatnik spack package to properly support GPU spack builds with CUDA (and ROCm, though that it untested) * Marked that beatnik 1.0 will require cabana 0.6.0. We will wait for the cabana 0.6.0 release before we release beatnik * Update to beatnik package spec to compile with hipcc when +rocm * Updated spack package for cabana for version 0.6.0 and appropriate heffte dependency * Updated beatnik package to require cabana 0.6.0 * More updates to cabana and beatnik to build with cabana 0.6.0 * Finish removing BLT dependence from beatnik * More updates to beatnik package for compiling on cray systems * Updated beatnik package for new cabana package * Changes to silo package for new silo version * Fixed version specs for heffte to be able to concretize and build * Fixed spack style issues for beatnik and silo packages * More spack formatting fixes to beatnik and silo * Patrick adopting silo package as maintainer for now * Should address final style changes to beatnik package spec * Yet more style fixes. * Perhaps this is the final style fixes? :) * Minor fix to cabana package on required versions
-rw-r--r--var/spack/repos/builtin/packages/beatnik/package.py90
-rw-r--r--var/spack/repos/builtin/packages/cabana/package.py25
-rw-r--r--var/spack/repos/builtin/packages/silo/package.py24
3 files changed, 129 insertions, 10 deletions
diff --git a/var/spack/repos/builtin/packages/beatnik/package.py b/var/spack/repos/builtin/packages/beatnik/package.py
new file mode 100644
index 0000000000..aa39194494
--- /dev/null
+++ b/var/spack/repos/builtin/packages/beatnik/package.py
@@ -0,0 +1,90 @@
+# Copyright 2013-2023 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.package import *
+
+
+class Beatnik(CMakePackage, CudaPackage, ROCmPackage):
+ """Fluid interface model solver based on Pandya and Shkoller's Z-Model formulation."""
+
+ homepage = "https://github.com/CUP-ECS/beatnik"
+ git = "https://github.com/CUP-ECS/beatnik.git"
+
+ maintainers("patrickb314", "JStewart28")
+
+ # Add proper versions and checksums here. Will add 1.0 when a proper SHA is available
+ # version("1.0", sha256="XXX")
+ version("develop", branch="develop")
+ version("main", branch="main")
+
+ # Variants are primarily backends to build on GPU systems and pass the right
+ # informtion to the packages we depend on
+ variant("cuda", default=False, description="Use CUDA support from subpackages")
+ variant("openmp", default=False, description="Use OpenMP support from subpackages")
+
+ # Dependencies for all Beatnik versions
+ depends_on("mpi")
+ depends_on("mpi +cuda", when="+cuda")
+ depends_on("mpi +rocm", when="+rocm")
+
+ # Kokkos dependencies
+ depends_on("kokkos @4:")
+ depends_on("kokkos +cuda +cuda_lambda +cuda_constexpr", when="+cuda")
+ depends_on("kokkos +rocm", when="+rocm")
+ depends_on("kokkos +wrapper", when="%gcc+cuda")
+
+ # Cabana dependencies
+ depends_on("cabana @0.6.0 +grid +heffte +silo +hdf5 +mpi")
+ depends_on("cabana +cuda", when="+cuda")
+ depends_on("cabana +rocm", when="+rocm")
+
+ # Silo dependencies
+ depends_on("silo @4.11:")
+ depends_on("silo @4.11.1:", when="%cce") # Eariler silo versions have trouble cce
+
+ # Heffte dependencies - We always require FFTW so that there's a host
+ # backend even when we're compiling for GPUs
+ depends_on("heffte +fftw")
+ depends_on("heffte +cuda", when="+cuda")
+ depends_on("heffte +rocm", when="+rocm")
+
+ # If we're using CUDA or ROCM, require MPIs be GPU-aware
+ conflicts("mpich ~cuda", when="+cuda")
+ conflicts("mpich ~rocm", when="+rocm")
+ conflicts("openmpi ~cuda", when="+cuda")
+ conflicts("^intel-mpi") # Heffte won't build with intel MPI because of needed C++ MPI support
+
+ # Propagate CUDA and AMD GPU targets to cabana
+ for cuda_arch in CudaPackage.cuda_arch_values:
+ depends_on("cabana cuda_arch=%s" % cuda_arch, when="+cuda cuda_arch=%s" % cuda_arch)
+ for amdgpu_value in ROCmPackage.amdgpu_targets:
+ depends_on(
+ "cabana +rocm amdgpu_target=%s" % amdgpu_value,
+ when="+rocm amdgpu_target=%s" % amdgpu_value,
+ )
+
+ # CMake specific build functions
+ def cmake_args(self):
+ args = []
+
+ # Use hipcc as the c compiler if we are compiling for rocm. Doing it this way
+ # keeps the wrapper insted of changeing CMAKE_CXX_COMPILER keeps the spack wrapper
+ # and the rpaths it sets for us from the underlying spec.
+ if "+rocm" in self.spec:
+ env["SPACK_CXX"] = self.spec["hip"].hipcc
+
+ # If we're building with cray mpich, we need to make sure we get the GTL library for
+ # gpu-aware MPI, since cabana and beatnik require it
+ if self.spec.satisfies("+rocm ^cray-mpich"):
+ gtl_dir = join_path(self.spec["cray-mpich"].prefix, "..", "..", "..", "gtl", "lib")
+ args.append(
+ "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath={0} -L{0} -lmpi_gtl_hsa".format(gtl_dir)
+ )
+ elif self.spec.satisfies("+cuda ^cray-mpich"):
+ gtl_dir = join_path(self.spec["cray-mpich"].prefix, "..", "..", "..", "gtl", "lib")
+ args.append(
+ "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath={0} -L{0} -lmpi_gtl_cuda".format(gtl_dir)
+ )
+ return args
diff --git a/var/spack/repos/builtin/packages/cabana/package.py b/var/spack/repos/builtin/packages/cabana/package.py
index 6b6289b981..ae4d4e9fca 100644
--- a/var/spack/repos/builtin/packages/cabana/package.py
+++ b/var/spack/repos/builtin/packages/cabana/package.py
@@ -12,7 +12,7 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
homepage = "https://github.com/ECP-copa/Cabana"
git = "https://github.com/ECP-copa/Cabana.git"
- url = "https://github.com/ECP-copa/Cabana/archive/0.5.0.tar.gz"
+ url = "https://github.com/ECP-copa/Cabana/archive/0.6.0.tar.gz"
maintainers("junghans", "streeve", "sslattery")
@@ -47,6 +47,7 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
depends_on("cmake@3.9:", type="build", when="@:0.4.0")
depends_on("cmake@3.16:", type="build", when="@0.5.0:")
+
depends_on("googletest", type="test", when="+testing")
_versions = {":0.2": "-legacy", "0.3:": "@3.1:", "0.4:": "@3.2:", "0.6:": "@3.7:"}
for _version in _versions:
@@ -63,34 +64,50 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
_kk_spec = "kokkos{0}+{1}".format(_kk_version, _backend)
depends_on(_kk_spec, when="@{0}+{1}".format(_version, _backend))
+ # Propagate cuda architectures down to Kokkos and optional submodules
for arch in CudaPackage.cuda_arch_values:
cuda_dep = "+cuda cuda_arch={0}".format(arch)
depends_on("kokkos {0}".format(cuda_dep), when=cuda_dep)
+ depends_on("heffte {0}".format(cuda_dep), when="+heffte {0}".format(cuda_dep))
+ depends_on("arborx {0}".format(cuda_dep), when="+arborx {0}".format(cuda_dep))
+ depends_on("hypre {0}".format(cuda_dep), when="+hypre {0}".format(cuda_dep))
for arch in ROCmPackage.amdgpu_targets:
rocm_dep = "+rocm amdgpu_target={0}".format(arch)
depends_on("kokkos {0}".format(rocm_dep), when=rocm_dep)
+ depends_on("heffte {0}".format(rocm_dep), when="+heffte {0}".format(rocm_dep))
+ depends_on("arborx {0}".format(rocm_dep), when="+arborx {0}".format(rocm_dep))
+ depends_on("hypre {0}".format(rocm_dep), when="+hypre {0}".format(rocm_dep))
conflicts("+cuda", when="cuda_arch=none")
+ conflicts("+rocm", when="amdgpu_target=none")
+
depends_on("kokkos+cuda_lambda", when="+cuda")
+ # Dependencies for subpackages
depends_on("arborx", when="@0.3.0:+arborx")
depends_on("hypre-cmake@2.22.0:", when="@0.4.0:+hypre")
depends_on("hypre-cmake@2.22.1:", when="@0.5.0:+hypre")
- # Previous heFFTe pinned at 2.x.0 because its cmakefiles can't roll forward
- # compatibilty to later minor versions.
depends_on("heffte@2.0.0", when="@0.4.0+heffte")
- depends_on("heffte@2.1.0", when="@0.5.0:+heffte")
+ depends_on("heffte@2.1.0", when="@0.5.0+heffte")
depends_on("heffte@2.3.0:", when="@0.6.0:+heffte")
depends_on("silo", when="@0.5.0:+silo")
depends_on("hdf5", when="@0.6.0:+hdf5")
depends_on("mpi", when="+mpi")
+ # Cabana automatically builds HDF5 support with newer cmake versions
+ # in version 0.6.0. This is fixed post-0.6
+ conflicts("~hdf5", when="@0.6.0 ^cmake@:3.26")
+
+ # Cajita support requires MPI
conflicts("+cajita ~mpi")
conflicts("+grid ~mpi")
+ # Conflict variants only available in newer versions of cabana
conflicts("+rocm", when="@:0.2.0")
conflicts("+sycl", when="@:0.3.0")
+ conflicts("+silo", when="@:0.3.0")
+ conflicts("+hdf5", when="@:0.5.0")
def cmake_args(self):
options = [self.define_from_variant("BUILD_SHARED_LIBS", "shared")]
diff --git a/var/spack/repos/builtin/packages/silo/package.py b/var/spack/repos/builtin/packages/silo/package.py
index 6c75493faa..4b4a0194e8 100644
--- a/var/spack/repos/builtin/packages/silo/package.py
+++ b/var/spack/repos/builtin/packages/silo/package.py
@@ -12,9 +12,22 @@ class Silo(AutotoolsPackage):
data to binary, disk files."""
homepage = "https://wci.llnl.gov/simulation/computer-codes/silo"
+ git = "https://github.com/LLNL/Silo.git"
url = "https://wci.llnl.gov/sites/wci/files/2021-01/silo-4.10.2.tgz"
+ maintainers("patrickb314")
version(
+ "4.11.1",
+ preferred=True,
+ sha256="49eddc00304aa4a19074b099559edbdcaa3532c98df32f99aa62b9ec3ea7cee2",
+ url="https://github.com/LLNL/Silo/releases/download/4.11.1/silo-4.11.1.tar.xz",
+ )
+ version(
+ "4.11.1-bsd",
+ sha256="51ccfdf3c09dfc98c7858a0a6f08cc3b2a07ee3c4142ee6482ba7b24e314c2aa",
+ url="https://github.com/LLNL/Silo/releases/download/4.11.1/silo-4.11.1-bsd.tar.xz",
+ )
+ version(
"4.11",
sha256="ab936c1f4fc158d9fdc4415965f7d9def7f4abeca596fe5a25bd8485654898ac",
url="https://github.com/LLNL/Silo/releases/download/v4.11/silo-4.11.tar.gz",
@@ -68,19 +81,18 @@ class Silo(AutotoolsPackage):
patch("H5FD_class_t-terminate.patch", when="@:4.10.2-bsd")
# H5EPR_SEMI_COLON.patch was fixed in current dev
- # patch("H5EPR_SEMI_COLON.patch", when="@:4.11-bsd")
- patch("H5EPR_SEMI_COLON.patch")
+ patch("H5EPR_SEMI_COLON.patch", when="@:4.11-bsd")
# Fix missing F77 init, fixed in 4.9
patch("48-configure-f77.patch", when="@:4.8")
# The previously used AX_CHECK_COMPILER_FLAGS macro was dropped from
# autoconf-archive in 2011
- patch("configure-AX_CHECK_COMPILE_FLAG.patch")
+ patch("configure-AX_CHECK_COMPILE_FLAG.patch", when="@:4.11-bsd")
# API changes in hdf5-1.13 cause breakage
# See https://github.com/LLNL/Silo/pull/260
- patch("hdf5-113.patch", when="@4.11: +hdf5 ^hdf5@1.13:")
+ patch("hdf5-113.patch", when="@4.11:4.11-bsd +hdf5 ^hdf5@1.13:")
conflicts("^hdf5@1.13:", when="@:4.10.2-bsd")
# hzip and fpzip are not available in the BSD releases
@@ -88,10 +100,10 @@ class Silo(AutotoolsPackage):
conflicts("+fpzip", when="@4.10.2-bsd,4.11-bsd")
# zfp include missing
- patch("zfp_error.patch", when="@4.11 +hdf5")
+ patch("zfp_error.patch", when="@4.11:4.11-bsd +hdf5")
# use /usr/bin/env perl for portability
- patch("mkinc-usr-bin-env-perl.patch")
+ patch("mkinc-usr-bin-env-perl.patch", when="@:4.11-bsd")
def flag_handler(self, name, flags):
spec = self.spec