Package request: HPCG (#17350)
* use patch from upstream Co-authored-by: Michael Kuhn <michael.kuhn@informatik.uni-hamburg.de>
This commit is contained in:
parent
986f68f7ed
commit
b45fc97564
78
var/spack/repos/builtin/packages/hpcg/package.py
Normal file
78
var/spack/repos/builtin/packages/hpcg/package.py
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# Copyright 2013-2020 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 import *
|
||||||
|
import os
|
||||||
|
import platform
|
||||||
|
|
||||||
|
|
||||||
|
class Hpcg(AutotoolsPackage):
|
||||||
|
"""HPCG is a software package that performs a fixed number of multigrid
|
||||||
|
preconditioned (using a symmetric Gauss-Seidel smoother) conjugate gradient
|
||||||
|
(PCG) iterations using double precision (64 bit) floating point values."""
|
||||||
|
|
||||||
|
homepage = "https://www.hpcg-benchmark.org"
|
||||||
|
url = "http://www.hpcg-benchmark.org/downloads/hpcg-3.1.tar.gz"
|
||||||
|
git = "https://github.com/hpcg-benchmark/hpcg.git"
|
||||||
|
|
||||||
|
version('develop', branch='master')
|
||||||
|
version('3.1', sha256='33a434e716b79e59e745f77ff72639c32623e7f928eeb7977655ffcaade0f4a4')
|
||||||
|
|
||||||
|
variant('openmp', default=True, description='Enable OpenMP support')
|
||||||
|
|
||||||
|
patch('https://github.com/hpcg-benchmark/hpcg/commit/e9e0b7e6cae23e1f30dd983c2ce2d3bd34d56f75.patch', sha256='23b9de83042eb7a8207fdddcfa79ae2cc1a17e8e623e2224c7751d7c328ee482', when='%gcc@9:')
|
||||||
|
|
||||||
|
depends_on('mpi@1.1:')
|
||||||
|
|
||||||
|
arch = '{0}-{1}'.format(platform.system(), platform.processor())
|
||||||
|
build_targets = ['arch={0}'.format(arch)]
|
||||||
|
|
||||||
|
def configure(self, spec, prefix):
|
||||||
|
CXXFLAGS = '-O3 -ffast-math '
|
||||||
|
CXXFLAGS += '-ftree-vectorize -ftree-vectorizer-verbose=0 '
|
||||||
|
if '+openmp' in self.spec:
|
||||||
|
CXXFLAGS += self.compiler.openmp_flag
|
||||||
|
config = [
|
||||||
|
# Shell
|
||||||
|
'SHELL = /bin/sh',
|
||||||
|
'CD = cd',
|
||||||
|
'CP = cp',
|
||||||
|
'LN_S = ln -fs',
|
||||||
|
'MKDIR = mkdir -p',
|
||||||
|
'RM = /bin/rm -f',
|
||||||
|
'TOUCH = touch',
|
||||||
|
# Platform identifier
|
||||||
|
'ARCH = {0}'.format(self.arch),
|
||||||
|
# HPCG Directory Structure / HPCG library
|
||||||
|
'TOPdir = {0}'.format(os.getcwd()),
|
||||||
|
'SRCdir = $(TOPdir)/src',
|
||||||
|
'INCdir = $(TOPdir)/src',
|
||||||
|
'BINdir = $(TOPdir)/bin',
|
||||||
|
# Message Passing library (MPI)
|
||||||
|
'MPinc = -I{0}'.format(spec['mpi'].prefix.include),
|
||||||
|
'MPlib = -L{0}'.format(spec['mpi'].prefix.lib),
|
||||||
|
# HPCG includes / libraries / specifics
|
||||||
|
'HPCG_INCLUDES = -I$(INCdir) -I$(INCdir)/$(arch) $(MPinc)',
|
||||||
|
'HPCG_LIBS =',
|
||||||
|
'HPCG_OPTS =',
|
||||||
|
'HPCG_DEFS = $(HPCG_OPTS) $(HPCG_INCLUDES)',
|
||||||
|
# Compilers / linkers - Optimization flags
|
||||||
|
'CXX = {0}'.format(spec['mpi'].mpicxx),
|
||||||
|
'CXXFLAGS = $(HPCG_DEFS) {0}'.format(CXXFLAGS),
|
||||||
|
'LINKER = $(CXX)',
|
||||||
|
'LINKFLAGS = $(CXXFLAGS)',
|
||||||
|
'ARCHIVER = ar',
|
||||||
|
'ARFLAGS = r',
|
||||||
|
'RANLIB = echo',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Write configuration options to include file
|
||||||
|
with open('setup/Make.{0}'.format(self.arch), 'w') as makefile:
|
||||||
|
for var in config:
|
||||||
|
makefile.write('{0}\n'.format(var))
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
# Manual installation
|
||||||
|
install_tree('bin', prefix.bin)
|
Loading…
Reference in New Issue
Block a user