76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
# Copyright 2013-2022 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 Hipace(CMakePackage):
|
|
"""Highly efficient Plasma Accelerator Emulation, quasistatic
|
|
particle-in-cell code
|
|
"""
|
|
|
|
homepage = "https://hipace.readthedocs.io"
|
|
url = "https://github.com/Hi-PACE/hipace/archive/refs/tags/v21.09.tar.gz"
|
|
git = "https://github.com/Hi-PACE/hipace.git"
|
|
|
|
maintainers = ["ax3l", "MaxThevenet", "SeverinDiederichs"]
|
|
|
|
version("develop", branch="development")
|
|
version("21.09", sha256="5d27824fe6aac47ce26ca69759140ab4d7844f9042e436c343c03ea4852825f1")
|
|
|
|
variant(
|
|
"compute",
|
|
default="noacc",
|
|
values=("omp", "cuda", "hip", "sycl", "noacc"),
|
|
multi=False,
|
|
description="On-node, accelerated computing backend",
|
|
)
|
|
variant("mpi", default=True, description="Enable MPI support")
|
|
variant("openpmd", default=True, description="Enable openPMD I/O")
|
|
variant(
|
|
"precision",
|
|
default="double",
|
|
values=("single", "double"),
|
|
multi=False,
|
|
description="Floating point precision (single/double)",
|
|
)
|
|
|
|
depends_on("cmake@3.15.0:", type="build")
|
|
depends_on("cuda@9.2.88:", when="compute=cuda")
|
|
depends_on("mpi", when="+mpi")
|
|
with when("+openpmd"):
|
|
depends_on("openpmd-api@0.14.2:")
|
|
depends_on("openpmd-api ~mpi", when="~mpi")
|
|
depends_on("openpmd-api +mpi", when="+mpi")
|
|
with when("compute=noacc"):
|
|
depends_on("fftw@3: ~mpi", when="~mpi")
|
|
depends_on("fftw@3: +mpi", when="+mpi")
|
|
depends_on("pkgconfig", type="build")
|
|
with when("compute=omp"):
|
|
depends_on("fftw@3: +openmp")
|
|
depends_on("fftw ~mpi", when="~mpi")
|
|
depends_on("fftw +mpi", when="+mpi")
|
|
depends_on("pkgconfig", type="build")
|
|
depends_on("llvm-openmp", when="%apple-clang")
|
|
with when("compute=hip"):
|
|
depends_on("rocfft")
|
|
depends_on("rocprim")
|
|
depends_on("rocrand")
|
|
|
|
def cmake_args(self):
|
|
spec = self.spec
|
|
|
|
args = [
|
|
# do not super-build dependencies
|
|
"-HiPACE_openpmd_internal=OFF",
|
|
# variants
|
|
"-DHiPACE_COMPUTE={0}".format(spec.variants["compute"].value.upper()),
|
|
self.define_from_variant("HiPACE_MPI", "mpi"),
|
|
self.define_from_variant("HiPACE_OPENPMD", "openpmd"),
|
|
"-DHiPACE_PRECISION={0}".format(spec.variants["precision"].value.upper()),
|
|
]
|
|
|
|
return args
|