symPACK: add new package (#41835)
This commit is contained in:
		
							
								
								
									
										90
									
								
								var/spack/repos/builtin/packages/sympack/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								var/spack/repos/builtin/packages/sympack/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 Sympack(CMakePackage, CudaPackage): | ||||
|     """symPACK is a sparse symmetric matrix direct linear solver, | ||||
|     with optional support for CUDA devices""" | ||||
| 
 | ||||
|     homepage = "https://go.lbl.gov/sympack" | ||||
|     url = "https://github.com/symPACK/symPACK/archive/refs/tags/v3.0.tar.gz" | ||||
|     git = "https://github.com/symPACK/symPACK.git" | ||||
| 
 | ||||
|     maintainers("bonachea") | ||||
| 
 | ||||
|     version("master", branch="master") | ||||
| 
 | ||||
|     version("3.0", sha256="bd04284bb6a309a71cd4f9f54f72345ff98fa7ba5719498df1e8a00ef05c41de") | ||||
|     version("2.0.1", sha256="21c172e902531c94c3bb5932c15de4b4ec9adf9c0d8e2071bb12cdbdfa25ca52") | ||||
|     version("2.0", sha256="93fcfbadab73718e249e7ed12641a3c6be58b19cafdf6bad12a6a09c3d1eb4a1") | ||||
| 
 | ||||
|     depends_on("cmake@3.11:", type="build") | ||||
| 
 | ||||
|     depends_on("upcxx@2019.9.0:") | ||||
|     depends_on("upcxx@2022.3.0:+cuda", when="+cuda") | ||||
| 
 | ||||
|     depends_on("mpi") | ||||
|     depends_on("blas") | ||||
| 
 | ||||
|     variant( | ||||
|         "cuda", | ||||
|         default=False, | ||||
|         when="@3.0:", | ||||
|         description="Enables solver to offload large operations to CUDA GPUs", | ||||
|     ) | ||||
|     conflicts("+cuda", when="@:2", msg="symPACK version 3.0 or later required for CUDA support") | ||||
|     depends_on("cuda@6.0:", when="+cuda") | ||||
| 
 | ||||
|     variant("scotch", default=False, description="Enable SCOTCH ordering") | ||||
|     depends_on("scotch", when="+scotch") | ||||
| 
 | ||||
|     variant("ptscotch", default=False, description="Enable PT-SCOTCH ordering") | ||||
|     depends_on("scotch+mpi", when="+ptscotch") | ||||
| 
 | ||||
|     variant("metis", default=False, description="Enable MeTiS ordering") | ||||
|     depends_on("metis", when="+metis") | ||||
| 
 | ||||
|     variant("parmetis", default=False, description="Enable ParMETIS ordering") | ||||
|     depends_on("parmetis", when="+parmetis") | ||||
| 
 | ||||
|     variant( | ||||
|         "network", | ||||
|         default="auto", | ||||
|         multi=False, | ||||
|         values=("auto", "ibv", "udp", "ofi", "ucx", "aries", "mpi"), | ||||
|         description="The hardware-dependent UPC++ network backend to use.\n" | ||||
|         + "'auto' selects the default network provided by the UPC++ install.\n" | ||||
|         + "Note: smp-conduit is currently incompatible with symPACK, " | ||||
|         + "udp is recommended for single-node configurations.", | ||||
|     ) | ||||
| 
 | ||||
|     build_targets = ["all", "run_sympack2D"] | ||||
| 
 | ||||
|     def cmake_args(self): | ||||
|         # UPC++ is picky about what C++ compiler we use: | ||||
|         meta = join_path(self.spec["upcxx"].prefix.bin, "upcxx-meta") | ||||
|         cxx = Executable(meta)("CXX", output=str, error=str).strip() | ||||
|         args = [ | ||||
|             self.define("CMAKE_CXX_COMPILER", cxx), | ||||
|             self.define_from_variant("ENABLE_CUDA", "cuda"), | ||||
|             self.define_from_variant("ENABLE_SCOTCH", "scotch"), | ||||
|             self.define_from_variant("ENABLE_PTSCOTCH", "ptscotch"), | ||||
|             self.define_from_variant("ENABLE_METIS", "metis"), | ||||
|             self.define_from_variant("ENABLE_PARMETIS", "parmetis"), | ||||
|         ] | ||||
|         return args | ||||
| 
 | ||||
|     def setup_build_environment(self, env): | ||||
|         spec = self.spec | ||||
|         if "network=auto" not in spec: | ||||
|             env.set("UPCXX_NETWORK", spec.variants["network"].value) | ||||
| 
 | ||||
|     @run_after("install") | ||||
|     def finish_install(self): | ||||
|         # Test driver is not installed by default | ||||
|         mkdirp(self.prefix.bin) | ||||
|         install(join_path(self.build_directory, "run_sympack2D"), self.prefix.bin) | ||||
		Reference in New Issue
	
	Block a user
	 Dan Bonachea
					Dan Bonachea