Add NekCEM package to spack (#6509)
This commit is contained in:
		 Thilina Rathnayake
					Thilina Rathnayake
				
			
				
					committed by
					
						 Christoph Junghans
						Christoph Junghans
					
				
			
			
				
	
			
			
			 Christoph Junghans
						Christoph Junghans
					
				
			
						parent
						
							d6db532095
						
					
				
				
					commit
					c1bc1be2a7
				
			
							
								
								
									
										90
									
								
								var/spack/repos/builtin/packages/nekcem/package.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								var/spack/repos/builtin/packages/nekcem/package.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | |||||||
|  | ############################################################################## | ||||||
|  | # Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. | ||||||
|  | # Produced at the Lawrence Livermore National Laboratory. | ||||||
|  | # | ||||||
|  | # This file is part of Spack. | ||||||
|  | # Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. | ||||||
|  | # LLNL-CODE-647188 | ||||||
|  | # | ||||||
|  | # For details, see https://github.com/spack/spack | ||||||
|  | # Please also see the NOTICE and LICENSE files for our notice and the LGPL. | ||||||
|  | # | ||||||
|  | # This program is free software; you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU Lesser General Public License (as | ||||||
|  | # published by the Free Software Foundation) version 2.1, February 1999. | ||||||
|  | # | ||||||
|  | # This program is distributed in the hope that it will be useful, but | ||||||
|  | # WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and | ||||||
|  | # conditions of the GNU Lesser General Public License for more details. | ||||||
|  | # | ||||||
|  | # You should have received a copy of the GNU Lesser General Public | ||||||
|  | # License along with this program; if not, write to the Free Software | ||||||
|  | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||||
|  | ############################################################################## | ||||||
|  | from spack import * | ||||||
|  | import os | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Nekcem(Package): | ||||||
|  |     """Spectral-element solver for Maxwell's equations, drift-diffusion | ||||||
|  |        equations, and more.""" | ||||||
|  |  | ||||||
|  |     # Links to homepage and git | ||||||
|  |     homepage = "https://nekcem.mcs.anl.gov" | ||||||
|  |     url      = "https://github.com/NekCEM/NekCEM/archive/development.zip" | ||||||
|  |  | ||||||
|  |     # Variants | ||||||
|  |     variant('mpi', default=True, description='Build with MPI') | ||||||
|  |  | ||||||
|  |     # We only have a development version | ||||||
|  |     version('develop', git='https://github.com/NekCEM/NekCEM.git') | ||||||
|  |  | ||||||
|  |     # dependencies | ||||||
|  |     depends_on('mpi', when='+mpi') | ||||||
|  |     depends_on('python@2.7:') | ||||||
|  |     depends_on('blas') | ||||||
|  |     depends_on('lapack') | ||||||
|  |  | ||||||
|  |     @run_before('install') | ||||||
|  |     def fortran_check(self): | ||||||
|  |         if not self.compiler.fc: | ||||||
|  |             msg = 'NekCEM can not be built without a Fortran compiler.' | ||||||
|  |             raise RuntimeError(msg) | ||||||
|  |  | ||||||
|  |     def install(self, spec, prefix): | ||||||
|  |         binDir = 'bin' | ||||||
|  |         nek = 'nek' | ||||||
|  |         cNek = 'configurenek' | ||||||
|  |         mNek = 'makenek' | ||||||
|  |  | ||||||
|  |         FC = self.compiler.fc | ||||||
|  |         CC = self.compiler.cc | ||||||
|  |  | ||||||
|  |         if '+mpi' in spec: | ||||||
|  |             FC = spec['mpi'].mpif77 | ||||||
|  |             CC = spec['mpi'].mpicc | ||||||
|  |  | ||||||
|  |         with working_dir(binDir): | ||||||
|  |             filter_file(r'^FC\s*=.*', 'FC=\"' + FC + '\"', 'makenek') | ||||||
|  |             filter_file(r'^CC\s*=.*', 'CC=\"' + CC + '\"', 'makenek') | ||||||
|  |             filter_file(r'^NEK\s*=.*', 'NEK=\"' + prefix.bin.NekCEM + | ||||||
|  |                         '\"', 'makenek') | ||||||
|  |  | ||||||
|  |             blasLapack = spec['lapack'].libs + spec['blas'].libs | ||||||
|  |             ldFlags = blasLapack.ld_flags | ||||||
|  |             # Temporary workaround, we should use LDFLAGS when | ||||||
|  |             # configurenek in Nekcem is fixed. | ||||||
|  |             # See issue: https://github.com/NekCEM/NekCEM/issues/200 | ||||||
|  |             filter_file(r'^EXTRALDFLAGS\s*=.*', 'EXTRALDFLAGS=\"' + ldFlags + | ||||||
|  |                         '\"', 'makenek') | ||||||
|  |  | ||||||
|  |         # Install NekCEM in prefix/bin | ||||||
|  |         install_tree('../NekCEM', prefix.bin.NekCEM) | ||||||
|  |         # Create symlinks to makenek, nek and configurenek scripts | ||||||
|  |         os.symlink(os.path.join(prefix.bin.NekCEM, binDir, mNek), | ||||||
|  |                    os.path.join(prefix.bin, mNek)) | ||||||
|  |         os.symlink(os.path.join(prefix.bin.NekCEM, binDir, cNek), | ||||||
|  |                    os.path.join(prefix.bin, cNek)) | ||||||
|  |         os.symlink(os.path.join(prefix.bin.NekCEM, binDir, nek), | ||||||
|  |                    os.path.join(prefix.bin, nek)) | ||||||
		Reference in New Issue
	
	Block a user