summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--var/spack/repos/builtin/packages/py-amrex/package.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/py-amrex/package.py b/var/spack/repos/builtin/packages/py-amrex/package.py
new file mode 100644
index 0000000000..d2088a5a23
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-amrex/package.py
@@ -0,0 +1,85 @@
+# 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 PyAmrex(PythonPackage, CudaPackage, ROCmPackage):
+ """AMReX Python Bindings with pybind11"""
+
+ homepage = "https://amrex-codes.github.io/amrex/"
+ git = "https://github.com/AMReX-Codes/pyamrex.git"
+
+ maintainers = ["ax3l", "RTSandberg", "sayerhs", "WeiqunZhang"]
+
+ version("develop", branch="development")
+
+ variant("dimensions", default="3", description="Dimensionality", values=("1", "2", "3"))
+ variant("mpi", default=True, description="Build with MPI support")
+ variant("openmp", default=False, description="Build with OpenMP support")
+ variant(
+ "precision",
+ default="double",
+ description="Real precision (double/single)",
+ values=("single", "double"),
+ )
+ variant("tiny_profile", default=False, description="Enable tiny profiling")
+
+ depends_on("python@3.7:", type=("build", "run"))
+ depends_on("py-numpy@1.15.0:1", type=("build", "run"))
+ depends_on("py-mpi4py@2.1.0:", type=("build", "run"), when="+mpi")
+ depends_on("py-setuptools@42:", type="build")
+ # We just need a CMake binary, and py-cmake is notoriously hard to build on
+ # exotic architectures. So ignore the pyproject.toml declaration and use
+ # Spack's cmake package.
+ # depends_on('py-cmake@3.20:3', type='build')
+ depends_on("cmake@3.20:3", type="build")
+ depends_on("py-pybind11@2.9.1:", type="link")
+
+ # AMReX options
+ depends_on("amrex@22.08:", type=("build", "link"))
+ # required variants
+ depends_on("amrex +pic +particles")
+ # controllable variants
+ with when("dimensions=1"):
+ depends_on("amrex dimensions=1")
+ with when("dimensions=2"):
+ depends_on("amrex dimensions=2")
+ with when("dimensions=3"):
+ depends_on("amrex dimensions=3")
+ with when("+mpi"):
+ depends_on("amrex +mpi")
+ with when("+openmp"):
+ depends_on("amrex +openmp")
+ with when("+tiny_profile"):
+ depends_on("amrex +tiny_profile")
+ with when("+cuda"):
+ depends_on("amrex +cuda")
+ # todo: how to forward cuda_arch?
+ with when("+rocm"):
+ depends_on("amrex +rocm")
+ # todo: how to forward amdgpu_target?
+
+ def setup_build_environment(self, env):
+ spec = self.spec
+
+ # disable superbuilds: use external dependencies
+ env.set("AMREX_INTERNAL", "OFF")
+ env.set("PYBIND11_INTERNAL", "OFF")
+
+ # configure to require the exact AMReX configs provided by Spack
+ env.set("AMREX_SPACEDIM", spec.variants["dimensions"].value)
+ env.set("AMREX_MPI", "ON" if spec.satisfies("+mpi") else "OFF")
+ env.set("AMREX_OMP", "ON" if spec.satisfies("+omp") else "OFF")
+ env.set("AMREX_PRECISION", spec.variants["precision"].value.upper())
+ with when("+cuda"):
+ env.set("AMREX_GPU_BACKEND", "CUDA")
+ with when("+rocm"):
+ env.set("AMREX_GPU_BACKEND", "HIP")
+ # with when("+sycl"):
+ # env.set("AMREX_GPU_BACKEND", "SYCL")
+
+ # control build parallelism
+ env.set("CMAKE_BUILD_PARALLEL_LEVEL", make_jobs)