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
This commit is contained in:
parent
2913cd936a
commit
7cc17f208c
90
var/spack/repos/builtin/packages/beatnik/package.py
Normal file
90
var/spack/repos/builtin/packages/beatnik/package.py
Normal file
@ -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
|
@ -12,7 +12,7 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
|
|
||||||
homepage = "https://github.com/ECP-copa/Cabana"
|
homepage = "https://github.com/ECP-copa/Cabana"
|
||||||
git = "https://github.com/ECP-copa/Cabana.git"
|
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")
|
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.9:", type="build", when="@:0.4.0")
|
||||||
depends_on("cmake@3.16:", type="build", when="@0.5.0:")
|
depends_on("cmake@3.16:", type="build", when="@0.5.0:")
|
||||||
|
|
||||||
depends_on("googletest", type="test", when="+testing")
|
depends_on("googletest", type="test", when="+testing")
|
||||||
_versions = {":0.2": "-legacy", "0.3:": "@3.1:", "0.4:": "@3.2:", "0.6:": "@3.7:"}
|
_versions = {":0.2": "-legacy", "0.3:": "@3.1:", "0.4:": "@3.2:", "0.6:": "@3.7:"}
|
||||||
for _version in _versions:
|
for _version in _versions:
|
||||||
@ -63,34 +64,50 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage):
|
|||||||
_kk_spec = "kokkos{0}+{1}".format(_kk_version, _backend)
|
_kk_spec = "kokkos{0}+{1}".format(_kk_version, _backend)
|
||||||
depends_on(_kk_spec, when="@{0}+{1}".format(_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:
|
for arch in CudaPackage.cuda_arch_values:
|
||||||
cuda_dep = "+cuda cuda_arch={0}".format(arch)
|
cuda_dep = "+cuda cuda_arch={0}".format(arch)
|
||||||
depends_on("kokkos {0}".format(cuda_dep), when=cuda_dep)
|
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:
|
for arch in ROCmPackage.amdgpu_targets:
|
||||||
rocm_dep = "+rocm amdgpu_target={0}".format(arch)
|
rocm_dep = "+rocm amdgpu_target={0}".format(arch)
|
||||||
depends_on("kokkos {0}".format(rocm_dep), when=rocm_dep)
|
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("+cuda", when="cuda_arch=none")
|
||||||
|
conflicts("+rocm", when="amdgpu_target=none")
|
||||||
|
|
||||||
depends_on("kokkos+cuda_lambda", when="+cuda")
|
depends_on("kokkos+cuda_lambda", when="+cuda")
|
||||||
|
|
||||||
|
# Dependencies for subpackages
|
||||||
depends_on("arborx", when="@0.3.0:+arborx")
|
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.0:", when="@0.4.0:+hypre")
|
||||||
depends_on("hypre-cmake@2.22.1:", when="@0.5.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.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("heffte@2.3.0:", when="@0.6.0:+heffte")
|
||||||
depends_on("silo", when="@0.5.0:+silo")
|
depends_on("silo", when="@0.5.0:+silo")
|
||||||
depends_on("hdf5", when="@0.6.0:+hdf5")
|
depends_on("hdf5", when="@0.6.0:+hdf5")
|
||||||
depends_on("mpi", when="+mpi")
|
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("+cajita ~mpi")
|
||||||
conflicts("+grid ~mpi")
|
conflicts("+grid ~mpi")
|
||||||
|
|
||||||
|
# Conflict variants only available in newer versions of cabana
|
||||||
conflicts("+rocm", when="@:0.2.0")
|
conflicts("+rocm", when="@:0.2.0")
|
||||||
conflicts("+sycl", when="@:0.3.0")
|
conflicts("+sycl", when="@:0.3.0")
|
||||||
|
conflicts("+silo", when="@:0.3.0")
|
||||||
|
conflicts("+hdf5", when="@:0.5.0")
|
||||||
|
|
||||||
def cmake_args(self):
|
def cmake_args(self):
|
||||||
options = [self.define_from_variant("BUILD_SHARED_LIBS", "shared")]
|
options = [self.define_from_variant("BUILD_SHARED_LIBS", "shared")]
|
||||||
|
@ -12,8 +12,21 @@ class Silo(AutotoolsPackage):
|
|||||||
data to binary, disk files."""
|
data to binary, disk files."""
|
||||||
|
|
||||||
homepage = "https://wci.llnl.gov/simulation/computer-codes/silo"
|
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"
|
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(
|
version(
|
||||||
"4.11",
|
"4.11",
|
||||||
sha256="ab936c1f4fc158d9fdc4415965f7d9def7f4abeca596fe5a25bd8485654898ac",
|
sha256="ab936c1f4fc158d9fdc4415965f7d9def7f4abeca596fe5a25bd8485654898ac",
|
||||||
@ -68,19 +81,18 @@ class Silo(AutotoolsPackage):
|
|||||||
patch("H5FD_class_t-terminate.patch", when="@:4.10.2-bsd")
|
patch("H5FD_class_t-terminate.patch", when="@:4.10.2-bsd")
|
||||||
|
|
||||||
# H5EPR_SEMI_COLON.patch was fixed in current dev
|
# H5EPR_SEMI_COLON.patch was fixed in current dev
|
||||||
# patch("H5EPR_SEMI_COLON.patch", when="@:4.11-bsd")
|
patch("H5EPR_SEMI_COLON.patch", when="@:4.11-bsd")
|
||||||
patch("H5EPR_SEMI_COLON.patch")
|
|
||||||
|
|
||||||
# Fix missing F77 init, fixed in 4.9
|
# Fix missing F77 init, fixed in 4.9
|
||||||
patch("48-configure-f77.patch", when="@:4.8")
|
patch("48-configure-f77.patch", when="@:4.8")
|
||||||
|
|
||||||
# The previously used AX_CHECK_COMPILER_FLAGS macro was dropped from
|
# The previously used AX_CHECK_COMPILER_FLAGS macro was dropped from
|
||||||
# autoconf-archive in 2011
|
# 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
|
# API changes in hdf5-1.13 cause breakage
|
||||||
# See https://github.com/LLNL/Silo/pull/260
|
# 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")
|
conflicts("^hdf5@1.13:", when="@:4.10.2-bsd")
|
||||||
|
|
||||||
# hzip and fpzip are not available in the BSD releases
|
# 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")
|
conflicts("+fpzip", when="@4.10.2-bsd,4.11-bsd")
|
||||||
|
|
||||||
# zfp include missing
|
# 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
|
# 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):
|
def flag_handler(self, name, flags):
|
||||||
spec = self.spec
|
spec = self.spec
|
||||||
|
Loading…
Reference in New Issue
Block a user