summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/namd/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/namd/package.py')
-rw-r--r--var/spack/repos/builtin/packages/namd/package.py281
1 files changed, 144 insertions, 137 deletions
diff --git a/var/spack/repos/builtin/packages/namd/package.py b/var/spack/repos/builtin/packages/namd/package.py
index 54cc100af0..ec3723b27c 100644
--- a/var/spack/repos/builtin/packages/namd/package.py
+++ b/var/spack/repos/builtin/packages/namd/package.py
@@ -17,70 +17,77 @@ class Namd(MakefilePackage, CudaPackage):
high-performance simulation of large biomolecular systems."""
homepage = "https://www.ks.uiuc.edu/Research/namd/"
- url = "file://{0}/NAMD_2.12_Source.tar.gz".format(os.getcwd())
- git = "https://charm.cs.illinois.edu/gerrit/namd.git"
+ url = "file://{0}/NAMD_2.12_Source.tar.gz".format(os.getcwd())
+ git = "https://charm.cs.illinois.edu/gerrit/namd.git"
manual_download = True
version("master", branch="master")
- version('2.15a1', branch="master", tag='release-2-15-alpha-1')
- version('2.14', sha256='34044d85d9b4ae61650ccdba5cda4794088c3a9075932392dd0752ef8c049235',
- preferred=True)
- version('2.13', '9e3323ed856e36e34d5c17a7b0341e38')
- version('2.12', '2a1191909b1ab03bf0205971ad4d8ee9')
-
- variant('fftw', default='3', values=('none', '2', '3', 'mkl', 'amdfftw'),
- description='Enable the use of FFTW/FFTW3/MKL FFT/AMDFFTW')
-
- variant('interface', default='none', values=('none', 'tcl', 'python'),
- description='Enables TCL and/or python interface')
+ version("2.15a1", branch="master", tag="release-2-15-alpha-1")
+ version(
+ "2.14",
+ sha256="34044d85d9b4ae61650ccdba5cda4794088c3a9075932392dd0752ef8c049235",
+ preferred=True,
+ )
+ version("2.13", "9e3323ed856e36e34d5c17a7b0341e38")
+ version("2.12", "2a1191909b1ab03bf0205971ad4d8ee9")
+
+ variant(
+ "fftw",
+ default="3",
+ values=("none", "2", "3", "mkl", "amdfftw"),
+ description="Enable the use of FFTW/FFTW3/MKL FFT/AMDFFTW",
+ )
+
+ variant(
+ "interface",
+ default="none",
+ values=("none", "tcl", "python"),
+ description="Enables TCL and/or python interface",
+ )
# init_tcl_pointers() declaration and implementation are inconsistent
# "src/colvarproxy_namd.C", line 482: error: inherited member is not
# allowed
- patch('inherited-member-2.13.patch', when='@2.13')
- patch('inherited-member-2.14.patch', when='@2.14')
+ patch("inherited-member-2.13.patch", when="@2.13")
+ patch("inherited-member-2.14.patch", when="@2.14")
# Handle change in python-config for python@3.8:
- patch('namd-python38.patch', when='interface=python ^python@3.8:')
+ patch("namd-python38.patch", when="interface=python ^python@3.8:")
- depends_on('charmpp@6.10.1:6', when="@2.14:")
- depends_on('charmpp@6.8.2', when="@2.13")
- depends_on('charmpp@6.7.1', when="@2.12")
+ depends_on("charmpp@6.10.1:6", when="@2.14:")
+ depends_on("charmpp@6.8.2", when="@2.13")
+ depends_on("charmpp@6.7.1", when="@2.12")
- depends_on('fftw@:2', when="fftw=2")
- depends_on('fftw@3:', when="fftw=3")
+ depends_on("fftw@:2", when="fftw=2")
+ depends_on("fftw@3:", when="fftw=3")
- depends_on('amdfftw', when="fftw=amdfftw")
+ depends_on("amdfftw", when="fftw=amdfftw")
- depends_on('intel-mkl', when="fftw=mkl")
+ depends_on("intel-mkl", when="fftw=mkl")
- depends_on('tcl', when='interface=tcl')
+ depends_on("tcl", when="interface=tcl")
- depends_on('tcl', when='interface=python')
- depends_on('python', when='interface=python')
+ depends_on("tcl", when="interface=python")
+ depends_on("python", when="interface=python")
# https://www.ks.uiuc.edu/Research/namd/2.12/features.html
# https://www.ks.uiuc.edu/Research/namd/2.13/features.html
# https://www.ks.uiuc.edu/Research/namd/2.14/features.html
- depends_on('cuda@6.5.14:7.5.18', when='@2.12 +cuda')
- depends_on('cuda@8.0.61:', when='@2.13: +cuda')
+ depends_on("cuda@6.5.14:7.5.18", when="@2.12 +cuda")
+ depends_on("cuda@8.0.61:", when="@2.13: +cuda")
def _copy_arch_file(self, lib):
- config_filename = 'arch/{0}.{1}'.format(self.arch, lib)
- copy('arch/Linux-x86_64.{0}'.format(lib),
- config_filename)
- if lib == 'tcl':
- filter_file(r'-ltcl8\.5',
- '-ltcl{0}'.format(self.spec['tcl'].version.up_to(2)),
- config_filename)
+ config_filename = "arch/{0}.{1}".format(self.arch, lib)
+ copy("arch/Linux-x86_64.{0}".format(lib), config_filename)
+ if lib == "tcl":
+ filter_file(
+ r"-ltcl8\.5", "-ltcl{0}".format(self.spec["tcl"].version.up_to(2)), config_filename
+ )
def _append_option(self, opts, lib):
- if lib != 'python':
+ if lib != "python":
self._copy_arch_file(lib)
spec = self.spec
- opts.extend([
- '--with-{0}'.format(lib),
- '--{0}-prefix'.format(lib), spec[lib].prefix
- ])
+ opts.extend(["--with-{0}".format(lib), "--{0}-prefix".format(lib), spec[lib].prefix])
@property
def arch(self):
@@ -88,51 +95,64 @@ class Namd(MakefilePackage, CudaPackage):
if plat.startswith("linux"):
plat = "linux"
march = platform.machine()
- return '{0}-{1}'.format(plat, march)
+ return "{0}-{1}".format(plat, march)
@property
def build_directory(self):
- return '{0}-spack'.format(self.arch)
+ return "{0}-spack".format(self.arch)
def _edit_arch_generic(self, spec, prefix):
"""Generic arch makefile generation"""
- m64 = '-m64 ' if not spec.satisfies('arch=aarch64:') else ''
- with working_dir('arch'):
- with open('{0}.arch'.format(self.build_directory), 'w') as fh:
+ m64 = "-m64 " if not spec.satisfies("arch=aarch64:") else ""
+ with working_dir("arch"):
+ with open("{0}.arch".format(self.build_directory), "w") as fh:
# this options are take from the default provided
# configuration files
# https://github.com/UIUC-PPL/charm/pull/2778
- archopt = spec.target.optimization_flags(
- spec.compiler.name, spec.compiler.version)
+ archopt = spec.target.optimization_flags(spec.compiler.name, spec.compiler.version)
- if self.spec.satisfies('^charmpp@:6.10.1'):
+ if self.spec.satisfies("^charmpp@:6.10.1"):
optims_opts = {
- 'gcc': m64 + '-O3 -fexpensive-optimizations \
- -ffast-math -lpthread ' + archopt,
- 'intel': '-O2 -ip -qopenmp-simd' + archopt,
- 'aocc': m64 + '-O3 -ffp-contract=fast -ffast-math \
- -fopenmp ' + archopt}
+ "gcc": m64
+ + "-O3 -fexpensive-optimizations \
+ -ffast-math -lpthread "
+ + archopt,
+ "intel": "-O2 -ip -qopenmp-simd" + archopt,
+ "aocc": m64
+ + "-O3 -ffp-contract=fast -ffast-math \
+ -fopenmp "
+ + archopt,
+ }
else:
optims_opts = {
- 'gcc': m64 + '-O3 -fexpensive-optimizations \
- -ffast-math -lpthread ' + archopt,
- 'intel': '-O2 -ip ' + archopt,
- 'aocc': m64 + '-O3 -ffp-contract=fast \
- -ffast-math ' + archopt}
-
- optim_opts = optims_opts[self.compiler.name] \
- if self.compiler.name in optims_opts else ''
-
- fh.write('\n'.join([
- 'NAMD_ARCH = {0}'.format(self.arch),
- 'CHARMARCH = {0}'.format(self.spec['charmpp'].charmarch),
- 'CXX = {0.cxx} {0.cxx11_flag}'.format(
- self.compiler),
- 'CXXOPTS = {0}'.format(optim_opts),
- 'CC = {0}'.format(self.compiler.cc),
- 'COPTS = {0}'.format(optim_opts),
- ''
- ]))
+ "gcc": m64
+ + "-O3 -fexpensive-optimizations \
+ -ffast-math -lpthread "
+ + archopt,
+ "intel": "-O2 -ip " + archopt,
+ "aocc": m64
+ + "-O3 -ffp-contract=fast \
+ -ffast-math "
+ + archopt,
+ }
+
+ optim_opts = (
+ optims_opts[self.compiler.name] if self.compiler.name in optims_opts else ""
+ )
+
+ fh.write(
+ "\n".join(
+ [
+ "NAMD_ARCH = {0}".format(self.arch),
+ "CHARMARCH = {0}".format(self.spec["charmpp"].charmarch),
+ "CXX = {0.cxx} {0.cxx11_flag}".format(self.compiler),
+ "CXXOPTS = {0}".format(optim_opts),
+ "CC = {0}".format(self.compiler.cc),
+ "COPTS = {0}".format(optim_opts),
+ "",
+ ]
+ )
+ )
def _edit_arch_target_based(self, spec, prefix):
"""Try to use target base arch file return True if succeed"""
@@ -140,45 +160,32 @@ class Namd(MakefilePackage, CudaPackage):
return False
found_special_opt = False
- with working_dir('arch'):
- arch_filename = '{0}.arch'.format(self.build_directory)
+ with working_dir("arch"):
+ arch_filename = "{0}.arch".format(self.build_directory)
replace = [
- [
- r"^CHARMARCH = .*$",
- 'CHARMARCH = {0}'.format(self.spec['charmpp'].charmarch)
- ],
- [
- r"^NAMD_ARCH = .*$",
- 'NAMD_ARCH = {0}'.format(self.arch)
- ]
+ [r"^CHARMARCH = .*$", "CHARMARCH = {0}".format(self.spec["charmpp"].charmarch)],
+ [r"^NAMD_ARCH = .*$", "NAMD_ARCH = {0}".format(self.arch)],
]
# Optimizations for skylake_avx512
- if spec.platform == "linux" and \
- self.compiler.name == "intel" and \
- 'avx512' in spec.target and \
- spec.target >= 'skylake_avx512':
- if spec.version >= Version("2.15") and \
- os.path.exists("Linux-AVX512-icc.arch"):
+ if (
+ spec.platform == "linux"
+ and self.compiler.name == "intel"
+ and "avx512" in spec.target
+ and spec.target >= "skylake_avx512"
+ ):
+ if spec.version >= Version("2.15") and os.path.exists("Linux-AVX512-icc.arch"):
tty.info("Building binaries with AVX512-tile optimization")
copy("Linux-AVX512-icc.arch", arch_filename)
- elif spec.version >= Version("2.14") and \
- os.path.exists("Linux-SKX-icc.arch"):
- tty.info("Building binaries with Skylake-X"
- "AVX512 optimization")
+ elif spec.version >= Version("2.14") and os.path.exists("Linux-SKX-icc.arch"):
+ tty.info("Building binaries with Skylake-X" "AVX512 optimization")
copy("Linux-SKX-icc.arch", arch_filename)
else:
return False
- replace.append([
- r"^CXX = icpc",
- 'CXX = {0}'.format(self.compiler.cxx)
- ])
- replace.append([
- r"^CC = icc",
- 'CC = {0}'.format(self.compiler.cc)
- ])
+ replace.append([r"^CXX = icpc", "CXX = {0}".format(self.compiler.cxx)])
+ replace.append([r"^CC = icc", "CC = {0}".format(self.compiler.cc)])
found_special_opt = True
if found_special_opt:
@@ -195,61 +202,61 @@ class Namd(MakefilePackage, CudaPackage):
def edit(self, spec, prefix):
self._edit_arch(spec, prefix)
- self._copy_arch_file('base')
-
- opts = ['--charm-base', spec['charmpp'].prefix]
- fftw_version = spec.variants['fftw'].value
- if fftw_version == 'none':
- opts.append('--without-fftw')
- elif fftw_version == 'mkl':
- self._append_option(opts, 'mkl')
- elif fftw_version == 'amdfftw':
- self._copy_arch_file('fftw3')
- opts.extend(['--with-fftw3',
- '--fftw-prefix', spec['amdfftw'].prefix])
+ self._copy_arch_file("base")
+
+ opts = ["--charm-base", spec["charmpp"].prefix]
+ fftw_version = spec.variants["fftw"].value
+ if fftw_version == "none":
+ opts.append("--without-fftw")
+ elif fftw_version == "mkl":
+ self._append_option(opts, "mkl")
+ elif fftw_version == "amdfftw":
+ self._copy_arch_file("fftw3")
+ opts.extend(["--with-fftw3", "--fftw-prefix", spec["amdfftw"].prefix])
else:
- _fftw = 'fftw{0}'.format('' if fftw_version == '2' else '3')
+ _fftw = "fftw{0}".format("" if fftw_version == "2" else "3")
self._copy_arch_file(_fftw)
- opts.extend(['--with-{0}'.format(_fftw),
- '--fftw-prefix', spec['fftw'].prefix])
+ opts.extend(["--with-{0}".format(_fftw), "--fftw-prefix", spec["fftw"].prefix])
- interface_type = spec.variants['interface'].value
- if interface_type != 'none':
- self._append_option(opts, 'tcl')
+ interface_type = spec.variants["interface"].value
+ if interface_type != "none":
+ self._append_option(opts, "tcl")
- if interface_type == 'python':
- self._append_option(opts, 'python')
+ if interface_type == "python":
+ self._append_option(opts, "python")
else:
- opts.extend([
- '--without-tcl',
- '--without-python'
- ])
+ opts.extend(["--without-tcl", "--without-python"])
- if '+cuda' in spec:
- self._append_option(opts, 'cuda')
- filter_file('^CUDADIR=.*$',
- 'CUDADIR={0}'.format(spec['cuda'].prefix),
- join_path('arch', self.arch + '.cuda'))
+ if "+cuda" in spec:
+ self._append_option(opts, "cuda")
+ filter_file(
+ "^CUDADIR=.*$",
+ "CUDADIR={0}".format(spec["cuda"].prefix),
+ join_path("arch", self.arch + ".cuda"),
+ )
- config = Executable('./config')
+ config = Executable("./config")
config(self.build_directory, *opts)
# patch Make.config if needed
# spack install charmpp straight to prefix
# (not to $(CHARMBASE)/$(CHARMARCH))
- if not os.path.exists(join_path(
- self.spec['charmpp'].prefix, self.spec['charmpp'].charmarch)):
- filter_file(r"^CHARM = \$\(CHARMBASE\)/\$\(CHARMARCH\)",
- "CHARM = $(CHARMBASE)",
- join_path(self.build_directory, "Make.config"))
+ if not os.path.exists(
+ join_path(self.spec["charmpp"].prefix, self.spec["charmpp"].charmarch)
+ ):
+ filter_file(
+ r"^CHARM = \$\(CHARMBASE\)/\$\(CHARMARCH\)",
+ "CHARM = $(CHARMBASE)",
+ join_path(self.build_directory, "Make.config"),
+ )
def install(self, spec, prefix):
with working_dir(self.build_directory):
mkdirp(prefix.bin)
- install('namd2', prefix.bin)
+ install("namd2", prefix.bin)
# I'm not sure this is a good idea or if an autoload of the charm
# module would not be better.
- install('charmrun', prefix.bin)
+ install("charmrun", prefix.bin)