spack/var/spack/repos/builtin/packages/hipace/package.py
2022-07-31 13:29:20 -07:00

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