summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/gromacs
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2022-07-30 15:19:18 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2022-07-31 13:29:20 -0700
commitf52f6e99dbf1131886a80112b8c79dfc414afb7c (patch)
tree05cb7d64b2395922f2f24683da49f472075be12c /var/spack/repos/builtin/packages/gromacs
parent549ba1ed32372c67fc57271cde3797d58b7dec6e (diff)
downloadspack-f52f6e99dbf1131886a80112b8c79dfc414afb7c.tar.gz
spack-f52f6e99dbf1131886a80112b8c79dfc414afb7c.tar.bz2
spack-f52f6e99dbf1131886a80112b8c79dfc414afb7c.tar.xz
spack-f52f6e99dbf1131886a80112b8c79dfc414afb7c.zip
black: reformat entire repository with black
Diffstat (limited to 'var/spack/repos/builtin/packages/gromacs')
-rw-r--r--var/spack/repos/builtin/packages/gromacs/package.py632
1 files changed, 336 insertions, 296 deletions
diff --git a/var/spack/repos/builtin/packages/gromacs/package.py b/var/spack/repos/builtin/packages/gromacs/package.py
index 37eecd3abe..0fd699278a 100644
--- a/var/spack/repos/builtin/packages/gromacs/package.py
+++ b/var/spack/repos/builtin/packages/gromacs/package.py
@@ -21,92 +21,110 @@ class Gromacs(CMakePackage):
GROMACS is released under the GNU Lesser General Public License.
"""
- homepage = 'https://www.gromacs.org'
- url = 'https://ftp.gromacs.org/gromacs/gromacs-2022.2.tar.gz'
- list_url = 'https://ftp.gromacs.org/gromacs'
- git = 'https://gitlab.com/gromacs/gromacs.git'
- maintainers = ['junghans', 'marvinbernhardt']
-
- version('main', branch='main')
- version('master', branch='main', deprecated=True)
- version('2022.2', sha256='656404f884d2fa2244c97d2a5b92af148d0dbea94ad13004724b3fcbf45e01bf')
- version('2022.1', sha256='85ddab5197d79524a702c4959c2c43be875e0fc471df3a35224939dce8512450')
- version('2022', sha256='fad60d606c02e6164018692c6c9f2c159a9130c2bf32e8c5f4f1b6ba2dda2b68')
- version('2021.6', sha256='52df2c1d7586fd028d9397985c68bd6dd26e6e905ead382b7e6c473d087902c3')
- version('2021.5', sha256='eba63fe6106812f72711ef7f76447b12dd1ee6c81b3d8d4d0e3098cd9ea009b6')
- version('2021.4', sha256='cb708a3e3e83abef5ba475fdb62ef8d42ce8868d68f52dafdb6702dc9742ba1d')
- version('2021.3', sha256='e109856ec444768dfbde41f3059e3123abdb8fe56ca33b1a83f31ed4575a1cc6')
- version('2021.2', sha256='d940d865ea91e78318043e71f229ce80d32b0dc578d64ee5aa2b1a4be801aadb')
- version('2021.1', sha256='bc1d0a75c134e1fb003202262fe10d3d32c59bbb40d714bc3e5015c71effe1e5')
- version('2021', sha256='efa78ab8409b0f5bf0fbca174fb8fbcf012815326b5c71a9d7c385cde9a8f87b')
- version('2020.7', sha256='744158d8f61b0d36ffe89ec934519b7e0981a7af438897740160da648d36c2f0')
- version('2020.6', sha256='d8bbe57ed3c9925a8cb99ecfe39e217f930bed47d5268a9e42b33da544bdb2ee')
- version('2020.5', sha256='7b6aff647f7c8ee1bf12204d02cef7c55f44402a73195bd5f42cf11850616478')
- version('2020.4', sha256='5519690321b5500c7951aaf53ff624042c3edd1a5f5d6dd1f2d802a3ecdbf4e6')
- version('2020.3', sha256='903183691132db14e55b011305db4b6f4901cc4912d2c56c131edfef18cc92a9')
- version('2020.2', sha256='7465e4cd616359d84489d919ec9e4b1aaf51f0a4296e693c249e83411b7bd2f3')
- version('2020.1', sha256='e1666558831a3951c02b81000842223698016922806a8ce152e8f616e29899cf')
- version('2020', sha256='477e56142b3dcd9cb61b8f67b24a55760b04d1655e8684f979a75a5eec40ba01')
- version('2019.6', sha256='bebe396dc0db11a9d4cc205abc13b50d88225617642508168a2195324f06a358')
- version('2019.5', sha256='438061a4a2d45bbb5cf5c3aadd6c6df32d2d77ce8c715f1c8ffe56156994083a')
- version('2019.4', sha256='ba4366eedfc8a1dbf6bddcef190be8cd75de53691133f305a7f9c296e5ca1867')
- version('2019.3', sha256='4211a598bf3b7aca2b14ad991448947da9032566f13239b1a05a2d4824357573')
- version('2019.2', sha256='bcbf5cc071926bc67baa5be6fb04f0986a2b107e1573e15fadcb7d7fc4fb9f7e')
- version('2019.1', sha256='b2c37ed2fcd0e64c4efcabdc8ee581143986527192e6e647a197c76d9c4583ec')
- version('2019', sha256='c5b281a5f0b5b4eeb1f4c7d4dc72f96985b566561ca28acc9c7c16f6ee110d0b')
- version('2018.8', sha256='776923415df4bc78869d7f387c834141fdcda930b2e75be979dc59ecfa6ebecf')
- version('2018.5', sha256='32261df6f7ec4149fc0508f9af416953d056e281590359838c1ed6644ba097b8')
- version('2018.4', sha256='6f2ee458c730994a8549d6b4f601ecfc9432731462f8bd4ffa35d330d9aaa891')
- version('2018.3', sha256='4423a49224972969c52af7b1f151579cea6ab52148d8d7cbae28c183520aa291')
- version('2018.2', sha256='4bdde8120c510b6543afb4b18f82551fddb11851f7edbd814aa24022c5d37857')
- version('2018.1', sha256='4d3533340499323fece83b4a2d4251fa856376f2426c541e00b8e6b4c0d705cd')
- version('2018', sha256='deb5d0b749a52a0c6083367b5f50a99e08003208d81954fb49e7009e1b1fd0e9')
- version('2016.6', sha256='bac0117d2cad21f9b94fe5b854fb9ae7435b098a6da4e732ee745f18e52473d7')
- version('2016.5', sha256='57db26c6d9af84710a1e0c47a1f5bf63a22641456448dcd2eeb556ebd14e0b7c')
- version('2016.4', sha256='4be9d3bfda0bdf3b5c53041e0b8344f7d22b75128759d9bfa9442fe65c289264')
- version('2016.3', sha256='7bf00e74a9d38b7cef9356141d20e4ba9387289cbbfd4d11be479ef932d77d27')
- version('5.1.5', sha256='c25266abf07690ecad16ed3996899b1d489cbb1ef733a1befb3b5c75c91a703e')
- version('5.1.4', sha256='0f3793d8f1f0be747cf9ebb0b588fb2b2b5dc5acc32c3046a7bee2d2c03437bc')
- version('5.1.2', sha256='39d6f1d7ae8ba38cea6089da40676bfa4049a49903d21551abc030992a58f304')
- version('4.6.7', sha256='6afb1837e363192043de34b188ca3cf83db6bd189601f2001a1fc5b0b2a214d9')
- version('4.5.5', sha256='e0605e4810b0d552a8761fef5540c545beeaf85893f4a6e21df9905a33f871ba')
-
- variant('mpi', default=True, description='Activate MPI support (disable for Thread-MPI support)')
- variant('shared', default=True,
- description='Enables the build of shared libraries')
+ homepage = "https://www.gromacs.org"
+ url = "https://ftp.gromacs.org/gromacs/gromacs-2022.2.tar.gz"
+ list_url = "https://ftp.gromacs.org/gromacs"
+ git = "https://gitlab.com/gromacs/gromacs.git"
+ maintainers = ["junghans", "marvinbernhardt"]
+
+ version("main", branch="main")
+ version("master", branch="main", deprecated=True)
+ version("2022.2", sha256="656404f884d2fa2244c97d2a5b92af148d0dbea94ad13004724b3fcbf45e01bf")
+ version("2022.1", sha256="85ddab5197d79524a702c4959c2c43be875e0fc471df3a35224939dce8512450")
+ version("2022", sha256="fad60d606c02e6164018692c6c9f2c159a9130c2bf32e8c5f4f1b6ba2dda2b68")
+ version("2021.6", sha256="52df2c1d7586fd028d9397985c68bd6dd26e6e905ead382b7e6c473d087902c3")
+ version("2021.5", sha256="eba63fe6106812f72711ef7f76447b12dd1ee6c81b3d8d4d0e3098cd9ea009b6")
+ version("2021.4", sha256="cb708a3e3e83abef5ba475fdb62ef8d42ce8868d68f52dafdb6702dc9742ba1d")
+ version("2021.3", sha256="e109856ec444768dfbde41f3059e3123abdb8fe56ca33b1a83f31ed4575a1cc6")
+ version("2021.2", sha256="d940d865ea91e78318043e71f229ce80d32b0dc578d64ee5aa2b1a4be801aadb")
+ version("2021.1", sha256="bc1d0a75c134e1fb003202262fe10d3d32c59bbb40d714bc3e5015c71effe1e5")
+ version("2021", sha256="efa78ab8409b0f5bf0fbca174fb8fbcf012815326b5c71a9d7c385cde9a8f87b")
+ version("2020.7", sha256="744158d8f61b0d36ffe89ec934519b7e0981a7af438897740160da648d36c2f0")
+ version("2020.6", sha256="d8bbe57ed3c9925a8cb99ecfe39e217f930bed47d5268a9e42b33da544bdb2ee")
+ version("2020.5", sha256="7b6aff647f7c8ee1bf12204d02cef7c55f44402a73195bd5f42cf11850616478")
+ version("2020.4", sha256="5519690321b5500c7951aaf53ff624042c3edd1a5f5d6dd1f2d802a3ecdbf4e6")
+ version("2020.3", sha256="903183691132db14e55b011305db4b6f4901cc4912d2c56c131edfef18cc92a9")
+ version("2020.2", sha256="7465e4cd616359d84489d919ec9e4b1aaf51f0a4296e693c249e83411b7bd2f3")
+ version("2020.1", sha256="e1666558831a3951c02b81000842223698016922806a8ce152e8f616e29899cf")
+ version("2020", sha256="477e56142b3dcd9cb61b8f67b24a55760b04d1655e8684f979a75a5eec40ba01")
+ version("2019.6", sha256="bebe396dc0db11a9d4cc205abc13b50d88225617642508168a2195324f06a358")
+ version("2019.5", sha256="438061a4a2d45bbb5cf5c3aadd6c6df32d2d77ce8c715f1c8ffe56156994083a")
+ version("2019.4", sha256="ba4366eedfc8a1dbf6bddcef190be8cd75de53691133f305a7f9c296e5ca1867")
+ version("2019.3", sha256="4211a598bf3b7aca2b14ad991448947da9032566f13239b1a05a2d4824357573")
+ version("2019.2", sha256="bcbf5cc071926bc67baa5be6fb04f0986a2b107e1573e15fadcb7d7fc4fb9f7e")
+ version("2019.1", sha256="b2c37ed2fcd0e64c4efcabdc8ee581143986527192e6e647a197c76d9c4583ec")
+ version("2019", sha256="c5b281a5f0b5b4eeb1f4c7d4dc72f96985b566561ca28acc9c7c16f6ee110d0b")
+ version("2018.8", sha256="776923415df4bc78869d7f387c834141fdcda930b2e75be979dc59ecfa6ebecf")
+ version("2018.5", sha256="32261df6f7ec4149fc0508f9af416953d056e281590359838c1ed6644ba097b8")
+ version("2018.4", sha256="6f2ee458c730994a8549d6b4f601ecfc9432731462f8bd4ffa35d330d9aaa891")
+ version("2018.3", sha256="4423a49224972969c52af7b1f151579cea6ab52148d8d7cbae28c183520aa291")
+ version("2018.2", sha256="4bdde8120c510b6543afb4b18f82551fddb11851f7edbd814aa24022c5d37857")
+ version("2018.1", sha256="4d3533340499323fece83b4a2d4251fa856376f2426c541e00b8e6b4c0d705cd")
+ version("2018", sha256="deb5d0b749a52a0c6083367b5f50a99e08003208d81954fb49e7009e1b1fd0e9")
+ version("2016.6", sha256="bac0117d2cad21f9b94fe5b854fb9ae7435b098a6da4e732ee745f18e52473d7")
+ version("2016.5", sha256="57db26c6d9af84710a1e0c47a1f5bf63a22641456448dcd2eeb556ebd14e0b7c")
+ version("2016.4", sha256="4be9d3bfda0bdf3b5c53041e0b8344f7d22b75128759d9bfa9442fe65c289264")
+ version("2016.3", sha256="7bf00e74a9d38b7cef9356141d20e4ba9387289cbbfd4d11be479ef932d77d27")
+ version("5.1.5", sha256="c25266abf07690ecad16ed3996899b1d489cbb1ef733a1befb3b5c75c91a703e")
+ version("5.1.4", sha256="0f3793d8f1f0be747cf9ebb0b588fb2b2b5dc5acc32c3046a7bee2d2c03437bc")
+ version("5.1.2", sha256="39d6f1d7ae8ba38cea6089da40676bfa4049a49903d21551abc030992a58f304")
+ version("4.6.7", sha256="6afb1837e363192043de34b188ca3cf83db6bd189601f2001a1fc5b0b2a214d9")
+ version("4.5.5", sha256="e0605e4810b0d552a8761fef5540c545beeaf85893f4a6e21df9905a33f871ba")
+
+ variant(
+ "mpi", default=True, description="Activate MPI support (disable for Thread-MPI support)"
+ )
+ variant("shared", default=True, description="Enables the build of shared libraries")
+ variant(
+ "double",
+ default=False,
+ description="Produces a double precision version of the executables",
+ )
+ variant("plumed", default=False, description="Enable PLUMED support")
+ variant("cuda", default=False, description="Enable CUDA support")
+ variant("opencl", default=False, description="Enable OpenCL support")
+ variant("sycl", default=False, description="Enable SYCL support")
+ variant("nosuffix", default=False, description="Disable default suffixes")
+ variant(
+ "build_type",
+ default="RelWithDebInfo",
+ description="The build type to build",
+ values=(
+ "Debug",
+ "Release",
+ "RelWithDebInfo",
+ "MinSizeRel",
+ "Reference",
+ "RelWithAssert",
+ "Profile",
+ ),
+ )
variant(
- 'double', default=False,
- description='Produces a double precision version of the executables')
- variant('plumed', default=False, description='Enable PLUMED support')
- variant('cuda', default=False, description='Enable CUDA support')
- variant('opencl', default=False, description='Enable OpenCL support')
- variant('sycl', default=False, description='Enable SYCL support')
- variant('nosuffix', default=False, description='Disable default suffixes')
- variant('build_type', default='RelWithDebInfo',
- description='The build type to build',
- values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel',
- 'Reference', 'RelWithAssert', 'Profile'))
- variant('mdrun_only', default=False,
- description='Enables the build of a cut-down version'
- ' of libgromacs and/or the mdrun program')
- conflicts('+mdrun_only', when='@2021:',
- msg='mdrun-only build option was removed for GROMACS 2021.')
- variant('openmp', default=True,
- description='Enables OpenMP at configure time')
- variant('relaxed_double_precision', default=False,
- description='GMX_RELAXED_DOUBLE_PRECISION, use only for Fujitsu PRIMEHPC')
- conflicts('+relaxed_double_precision', when='@2021:',
- msg='GMX_RELAXED_DOUBLE_PRECISION option removed for GROMACS 2021.')
- variant('hwloc', default=True,
- description='Use the hwloc portable hardware locality library')
- variant('lapack', default=False,
- description='Enables an external LAPACK library')
- variant('blas', default=False,
- description='Enables an external BLAS library')
- variant('cycle_subcounters', default=False,
- description='Enables cycle subcounters')
-
- depends_on('mpi', when='+mpi')
+ "mdrun_only",
+ default=False,
+ description="Enables the build of a cut-down version"
+ " of libgromacs and/or the mdrun program",
+ )
+ conflicts(
+ "+mdrun_only", when="@2021:", msg="mdrun-only build option was removed for GROMACS 2021."
+ )
+ variant("openmp", default=True, description="Enables OpenMP at configure time")
+ variant(
+ "relaxed_double_precision",
+ default=False,
+ description="GMX_RELAXED_DOUBLE_PRECISION, use only for Fujitsu PRIMEHPC",
+ )
+ conflicts(
+ "+relaxed_double_precision",
+ when="@2021:",
+ msg="GMX_RELAXED_DOUBLE_PRECISION option removed for GROMACS 2021.",
+ )
+ variant("hwloc", default=True, description="Use the hwloc portable hardware locality library")
+ variant("lapack", default=False, description="Enables an external LAPACK library")
+ variant("blas", default=False, description="Enables an external BLAS library")
+ variant("cycle_subcounters", default=False, description="Enables cycle subcounters")
+
+ depends_on("mpi", when="+mpi")
# Plumed 2.8.0 needs Gromacs 2021.4, 2020.6, 2019.6
# Plumed 2.7.4 needs Gromacs 2021.4, 2020.6, 2019.6
@@ -134,85 +152,95 @@ class Gromacs(CMakePackage):
# https://github.com/plumed/plumed2/tree/v2.7.1/patches
# and switching tags.
- depends_on('plumed+mpi', when='+plumed+mpi')
- depends_on('plumed~mpi', when='+plumed~mpi')
- depends_on('plumed@2.7.3:2.8.0+mpi', when='@2021.4+plumed+mpi')
- depends_on('plumed@2.7.3:2.8.0~mpi', when='@2021.4+plumed~mpi')
- depends_on('plumed@2.7.1:2.7.2+mpi', when='@2021+plumed+mpi')
- depends_on('plumed@2.7.1:2.7.2~mpi', when='@2021+plumed~mpi')
- depends_on('plumed@2.7.2:2.8+mpi', when='@2020.6+plumed+mpi')
- depends_on('plumed@2.7.2:2.8~mpi', when='@2020.6+plumed~mpi')
- depends_on('plumed@2.7.1+mpi', when='@2020.5+plumed+mpi')
- depends_on('plumed@2.7.1~mpi', when='@2020.5+plumed~mpi')
- depends_on('plumed@2.6.2:2.7.0+mpi', when='@2020.4+plumed+mpi')
- depends_on('plumed@2.6.2:2.7.0~mpi', when='@2020.4+plumed~mpi')
- depends_on('plumed@2.6.1+mpi', when='@2020.2+plumed+mpi')
- depends_on('plumed@2.6.1~mpi', when='@2020.2+plumed~mpi')
- depends_on('plumed@2.6.1:2.8.0+mpi', when='@2019.6+plumed+mpi')
- depends_on('plumed@2.6.1:2.8.0~mpi', when='@2019.6+plumed~mpi')
- depends_on('plumed@2.5.3:2.6.0+mpi', when='@2019.4+plumed+mpi')
- depends_on('plumed@2.5.3:2.6.0~mpi', when='@2019.4+plumed~mpi')
- depends_on('plumed@2.5.2+mpi', when='@2019.2+plumed+mpi')
- depends_on('plumed@2.5.2~mpi', when='@2019.2+plumed~mpi')
- depends_on('plumed@2.5.3:2.6+mpi', when='@2018.8+plumed+mpi')
- depends_on('plumed@2.5.3:2.6~mpi', when='@2018.8+plumed~mpi')
- depends_on('plumed@2.5.1:2.5.2+mpi', when='@2018.6+plumed+mpi')
- depends_on('plumed@2.5.1:2.5.2~mpi', when='@2018.6+plumed~mpi')
- depends_on('plumed@2.5.0+mpi', when='@2018.4+plumed+mpi')
- depends_on('plumed@2.5.0~mpi', when='@2018.4+plumed~mpi')
- depends_on('plumed@2.5.1:2.5+mpi', when='@2016.6+plumed+mpi')
- depends_on('plumed@2.5.1:2.5~mpi', when='@2016.6+plumed~mpi')
- depends_on('plumed@2.5.0+mpi', when='@2016.5+plumed+mpi')
- depends_on('plumed@2.5.0~mpi', when='@2016.5+plumed~mpi')
-
- depends_on('fftw-api@3')
- depends_on('cmake@2.8.8:3', type='build')
- depends_on('cmake@3.4.3:3', type='build', when='@2018:')
- depends_on('cmake@3.9.6:3', type='build', when='@2020')
- depends_on('cmake@3.13.0:3', type='build', when='@2021:')
- depends_on('cmake@3.16.0:3', type='build', when='@master')
- depends_on('cmake@3.16.0:3', type='build', when='%fj')
- depends_on('cuda', when='+cuda')
- depends_on('sycl', when='+sycl')
- depends_on('lapack', when='+lapack')
- depends_on('blas', when='+blas')
-
- depends_on('hwloc@1.0:1', when='+hwloc@2016:2018')
- depends_on('hwloc', when='+hwloc@2019:')
-
- patch('gmxDetectCpu-cmake-3.14.patch', when='@2018:2019.3^cmake@3.14.0:')
- patch('gmxDetectSimd-cmake-3.14.patch', when='@5.0:2017^cmake@3.14.0:')
+ depends_on("plumed+mpi", when="+plumed+mpi")
+ depends_on("plumed~mpi", when="+plumed~mpi")
+ depends_on("plumed@2.7.3:2.8.0+mpi", when="@2021.4+plumed+mpi")
+ depends_on("plumed@2.7.3:2.8.0~mpi", when="@2021.4+plumed~mpi")
+ depends_on("plumed@2.7.1:2.7.2+mpi", when="@2021+plumed+mpi")
+ depends_on("plumed@2.7.1:2.7.2~mpi", when="@2021+plumed~mpi")
+ depends_on("plumed@2.7.2:2.8+mpi", when="@2020.6+plumed+mpi")
+ depends_on("plumed@2.7.2:2.8~mpi", when="@2020.6+plumed~mpi")
+ depends_on("plumed@2.7.1+mpi", when="@2020.5+plumed+mpi")
+ depends_on("plumed@2.7.1~mpi", when="@2020.5+plumed~mpi")
+ depends_on("plumed@2.6.2:2.7.0+mpi", when="@2020.4+plumed+mpi")
+ depends_on("plumed@2.6.2:2.7.0~mpi", when="@2020.4+plumed~mpi")
+ depends_on("plumed@2.6.1+mpi", when="@2020.2+plumed+mpi")
+ depends_on("plumed@2.6.1~mpi", when="@2020.2+plumed~mpi")
+ depends_on("plumed@2.6.1:2.8.0+mpi", when="@2019.6+plumed+mpi")
+ depends_on("plumed@2.6.1:2.8.0~mpi", when="@2019.6+plumed~mpi")
+ depends_on("plumed@2.5.3:2.6.0+mpi", when="@2019.4+plumed+mpi")
+ depends_on("plumed@2.5.3:2.6.0~mpi", when="@2019.4+plumed~mpi")
+ depends_on("plumed@2.5.2+mpi", when="@2019.2+plumed+mpi")
+ depends_on("plumed@2.5.2~mpi", when="@2019.2+plumed~mpi")
+ depends_on("plumed@2.5.3:2.6+mpi", when="@2018.8+plumed+mpi")
+ depends_on("plumed@2.5.3:2.6~mpi", when="@2018.8+plumed~mpi")
+ depends_on("plumed@2.5.1:2.5.2+mpi", when="@2018.6+plumed+mpi")
+ depends_on("plumed@2.5.1:2.5.2~mpi", when="@2018.6+plumed~mpi")
+ depends_on("plumed@2.5.0+mpi", when="@2018.4+plumed+mpi")
+ depends_on("plumed@2.5.0~mpi", when="@2018.4+plumed~mpi")
+ depends_on("plumed@2.5.1:2.5+mpi", when="@2016.6+plumed+mpi")
+ depends_on("plumed@2.5.1:2.5~mpi", when="@2016.6+plumed~mpi")
+ depends_on("plumed@2.5.0+mpi", when="@2016.5+plumed+mpi")
+ depends_on("plumed@2.5.0~mpi", when="@2016.5+plumed~mpi")
+
+ depends_on("fftw-api@3")
+ depends_on("cmake@2.8.8:3", type="build")
+ depends_on("cmake@3.4.3:3", type="build", when="@2018:")
+ depends_on("cmake@3.9.6:3", type="build", when="@2020")
+ depends_on("cmake@3.13.0:3", type="build", when="@2021:")
+ depends_on("cmake@3.16.0:3", type="build", when="@master")
+ depends_on("cmake@3.16.0:3", type="build", when="%fj")
+ depends_on("cuda", when="+cuda")
+ depends_on("sycl", when="+sycl")
+ depends_on("lapack", when="+lapack")
+ depends_on("blas", when="+blas")
+
+ depends_on("hwloc@1.0:1", when="+hwloc@2016:2018")
+ depends_on("hwloc", when="+hwloc@2019:")
+
+ patch("gmxDetectCpu-cmake-3.14.patch", when="@2018:2019.3^cmake@3.14.0:")
+ patch("gmxDetectSimd-cmake-3.14.patch", when="@5.0:2017^cmake@3.14.0:")
filter_compiler_wrappers(
- '*.cmake',
- relative_root=os.path.join('share', 'cmake', 'gromacs_mpi'))
- filter_compiler_wrappers(
- '*.cmake',
- relative_root=os.path.join('share', 'cmake', 'gromacs'))
+ "*.cmake", relative_root=os.path.join("share", "cmake", "gromacs_mpi")
+ )
+ filter_compiler_wrappers("*.cmake", relative_root=os.path.join("share", "cmake", "gromacs"))
def patch(self):
# Otherwise build fails with GCC 11 (11.2)
- if self.spec.satisfies('@2018:2020.6'):
- filter_file('#include <vector>', '#include <vector>\n#include <limits>',
- 'src/gromacs/awh/biasparams.h')
- if self.spec.satisfies('@2018:2018.8'):
- filter_file('#include <vector>', '#include <vector>\n#include <limits>',
- 'src/gromacs/mdlib/minimize.cpp')
- if self.spec.satisfies('@2019:2019.6,2020:2020.6'):
- filter_file('#include <vector>', '#include <vector>\n#include <limits>',
- 'src/gromacs/mdrun/minimize.cpp')
- if self.spec.satisfies('@2020:2020.6'):
- filter_file('#include <queue>', '#include <queue>\n#include <limits>',
- 'src/gromacs/modularsimulator/modularsimulator.h')
-
- if '+plumed' in self.spec:
- self.spec['plumed'].package.apply_patch(self)
-
- if self.spec.satisfies('%nvhpc'):
+ if self.spec.satisfies("@2018:2020.6"):
+ filter_file(
+ "#include <vector>",
+ "#include <vector>\n#include <limits>",
+ "src/gromacs/awh/biasparams.h",
+ )
+ if self.spec.satisfies("@2018:2018.8"):
+ filter_file(
+ "#include <vector>",
+ "#include <vector>\n#include <limits>",
+ "src/gromacs/mdlib/minimize.cpp",
+ )
+ if self.spec.satisfies("@2019:2019.6,2020:2020.6"):
+ filter_file(
+ "#include <vector>",
+ "#include <vector>\n#include <limits>",
+ "src/gromacs/mdrun/minimize.cpp",
+ )
+ if self.spec.satisfies("@2020:2020.6"):
+ filter_file(
+ "#include <queue>",
+ "#include <queue>\n#include <limits>",
+ "src/gromacs/modularsimulator/modularsimulator.h",
+ )
+
+ if "+plumed" in self.spec:
+ self.spec["plumed"].package.apply_patch(self)
+
+ if self.spec.satisfies("%nvhpc"):
# Disable obsolete workaround
- filter_file('ifdef __PGI', 'if 0', 'src/gromacs/fileio/xdrf.h')
+ filter_file("ifdef __PGI", "if 0", "src/gromacs/fileio/xdrf.h")
- if '+cuda' in self.spec:
+ if "+cuda" in self.spec:
# Upstream supports building of last two major versions of Gromacs.
# Older versions of Gromacs need to be patched to build with more recent
# versions of CUDA library.
@@ -220,217 +248,229 @@ class Gromacs(CMakePackage):
# Hardware version 3.0 is supported up to CUDA 10.2 (Gromacs 4.6-2020.3
# needs to be patched, 2020.4 is handling it correctly)
- if self.spec.satisfies('@4.6:2020.3^cuda@11:'):
- filter_file(r'-gencode;arch=compute_30,code=sm_30;?', '',
- 'cmake/gmxManageNvccConfig.cmake')
- filter_file(r'-gencode;arch=compute_30,code=compute_30;?', '',
- 'cmake/gmxManageNvccConfig.cmake')
+ if self.spec.satisfies("@4.6:2020.3^cuda@11:"):
+ filter_file(
+ r"-gencode;arch=compute_30,code=sm_30;?", "", "cmake/gmxManageNvccConfig.cmake"
+ )
+ filter_file(
+ r"-gencode;arch=compute_30,code=compute_30;?",
+ "",
+ "cmake/gmxManageNvccConfig.cmake",
+ )
# Hardware version 2.0 is supported up to CUDA 8 (Gromacs 4.6-2016.3
# needs to be patched, 2016.4 is handling it correctly, removed in 2019)
- if self.spec.satisfies('@4.6:2016.3^cuda@9:'):
- filter_file(r'-gencode;arch=compute_20,code=sm_20;?', '',
- 'cmake/gmxManageNvccConfig.cmake')
- filter_file(r'-gencode;arch=compute_20,code=compute_20;?', '',
- 'cmake/gmxManageNvccConfig.cmake')
+ if self.spec.satisfies("@4.6:2016.3^cuda@9:"):
+ filter_file(
+ r"-gencode;arch=compute_20,code=sm_20;?", "", "cmake/gmxManageNvccConfig.cmake"
+ )
+ filter_file(
+ r"-gencode;arch=compute_20,code=compute_20;?",
+ "",
+ "cmake/gmxManageNvccConfig.cmake",
+ )
- if self.spec.satisfies('@4.6:5.0^cuda@9:'):
- filter_file(r'-gencode;arch=compute_20,code=sm_21;?', '',
- 'cmake/gmxManageNvccConfig.cmake')
+ if self.spec.satisfies("@4.6:5.0^cuda@9:"):
+ filter_file(
+ r"-gencode;arch=compute_20,code=sm_21;?", "", "cmake/gmxManageNvccConfig.cmake"
+ )
def cmake_args(self):
options = []
- if '+mpi' in self.spec:
- options.append('-DGMX_MPI:BOOL=ON')
- if self.version < Version('2020'):
+ if "+mpi" in self.spec:
+ options.append("-DGMX_MPI:BOOL=ON")
+ if self.version < Version("2020"):
# Ensures gmxapi builds properly
- options.extend([
- '-DCMAKE_C_COMPILER=%s' % self.spec['mpi'].mpicc,
- '-DCMAKE_CXX_COMPILER=%s' % self.spec['mpi'].mpicxx,
- '-DCMAKE_Fortran_COMPILER=%s' % self.spec['mpi'].mpifc,
- ])
- elif self.version == Version('2021'):
+ options.extend(
+ [
+ "-DCMAKE_C_COMPILER=%s" % self.spec["mpi"].mpicc,
+ "-DCMAKE_CXX_COMPILER=%s" % self.spec["mpi"].mpicxx,
+ "-DCMAKE_Fortran_COMPILER=%s" % self.spec["mpi"].mpifc,
+ ]
+ )
+ elif self.version == Version("2021"):
# Work around https://gitlab.com/gromacs/gromacs/-/issues/3896
# Ensures gmxapi builds properly
- options.extend([
- '-DCMAKE_C_COMPILER=%s' % self.spec['mpi'].mpicc,
- '-DCMAKE_CXX_COMPILER=%s' % self.spec['mpi'].mpicxx,
- ])
+ options.extend(
+ [
+ "-DCMAKE_C_COMPILER=%s" % self.spec["mpi"].mpicc,
+ "-DCMAKE_CXX_COMPILER=%s" % self.spec["mpi"].mpicxx,
+ ]
+ )
else:
- options.extend([
- '-DCMAKE_C_COMPILER=%s' % spack_cc,
- '-DCMAKE_CXX_COMPILER=%s' % spack_cxx,
- '-DMPI_C_COMPILER=%s' % self.spec['mpi'].mpicc,
- '-DMPI_CXX_COMPILER=%s' % self.spec['mpi'].mpicxx
- ])
+ options.extend(
+ [
+ "-DCMAKE_C_COMPILER=%s" % spack_cc,
+ "-DCMAKE_CXX_COMPILER=%s" % spack_cxx,
+ "-DMPI_C_COMPILER=%s" % self.spec["mpi"].mpicc,
+ "-DMPI_CXX_COMPILER=%s" % self.spec["mpi"].mpicxx,
+ ]
+ )
else:
- options.extend([
- '-DCMAKE_C_COMPILER=%s' % spack_cc,
- '-DCMAKE_CXX_COMPILER=%s' % spack_cxx,
- '-DGMX_MPI:BOOL=OFF',
- '-DGMX_THREAD_MPI:BOOL=ON'])
-
- if self.spec.satisfies('@2020:'):
- options.append('-DGMX_INSTALL_LEGACY_API=ON')
-
- if '+double' in self.spec:
- options.append('-DGMX_DOUBLE:BOOL=ON')
-
- if '+nosuffix' in self.spec:
- options.append('-DGMX_DEFAULT_SUFFIX:BOOL=OFF')
-
- if '~shared' in self.spec:
- options.append('-DBUILD_SHARED_LIBS:BOOL=OFF')
- options.append('-DGMXAPI:BOOL=OFF')
-
- if '+hwloc' in self.spec:
- options.append('-DGMX_HWLOC:BOOL=ON')
+ options.extend(
+ [
+ "-DCMAKE_C_COMPILER=%s" % spack_cc,
+ "-DCMAKE_CXX_COMPILER=%s" % spack_cxx,
+ "-DGMX_MPI:BOOL=OFF",
+ "-DGMX_THREAD_MPI:BOOL=ON",
+ ]
+ )
+
+ if self.spec.satisfies("@2020:"):
+ options.append("-DGMX_INSTALL_LEGACY_API=ON")
+
+ if "+double" in self.spec:
+ options.append("-DGMX_DOUBLE:BOOL=ON")
+
+ if "+nosuffix" in self.spec:
+ options.append("-DGMX_DEFAULT_SUFFIX:BOOL=OFF")
+
+ if "~shared" in self.spec:
+ options.append("-DBUILD_SHARED_LIBS:BOOL=OFF")
+ options.append("-DGMXAPI:BOOL=OFF")
+
+ if "+hwloc" in self.spec:
+ options.append("-DGMX_HWLOC:BOOL=ON")
else:
- options.append('-DGMX_HWLOC:BOOL=OFF')
-
- if self.version >= Version('2021'):
- if '+cuda' in self.spec:
- options.append('-DGMX_GPU:STRING=CUDA')
- elif '+opencl' in self.spec:
- options.append('-DGMX_GPU:STRING=OpenCL')
- elif '+sycl' in self.spec:
- options.append('-DGMX_GPU:STRING=SYCL')
+ options.append("-DGMX_HWLOC:BOOL=OFF")
+
+ if self.version >= Version("2021"):
+ if "+cuda" in self.spec:
+ options.append("-DGMX_GPU:STRING=CUDA")
+ elif "+opencl" in self.spec:
+ options.append("-DGMX_GPU:STRING=OpenCL")
+ elif "+sycl" in self.spec:
+ options.append("-DGMX_GPU:STRING=SYCL")
else:
- options.append('-DGMX_GPU:STRING=OFF')
+ options.append("-DGMX_GPU:STRING=OFF")
else:
- if '+cuda' in self.spec or '+opencl' in self.spec:
- options.append('-DGMX_GPU:BOOL=ON')
+ if "+cuda" in self.spec or "+opencl" in self.spec:
+ options.append("-DGMX_GPU:BOOL=ON")
else:
- options.append('-DGMX_GPU:BOOL=OFF')
+ options.append("-DGMX_GPU:BOOL=OFF")
- if '+cuda' in self.spec:
- options.append('-DCUDA_TOOLKIT_ROOT_DIR:STRING=' +
- self.spec['cuda'].prefix)
+ if "+cuda" in self.spec:
+ options.append("-DCUDA_TOOLKIT_ROOT_DIR:STRING=" + self.spec["cuda"].prefix)
- if '+opencl' in self.spec:
- options.append('-DGMX_USE_OPENCL=on')
+ if "+opencl" in self.spec:
+ options.append("-DGMX_USE_OPENCL=on")
- if '+lapack' in self.spec:
- options.append('-DGMX_EXTERNAL_LAPACK:BOOL=ON')
- if self.spec['lapack'].libs:
- options.append('-DGMX_LAPACK_USER={0}'.format(
- self.spec['lapack'].libs.joined(';')))
+ if "+lapack" in self.spec:
+ options.append("-DGMX_EXTERNAL_LAPACK:BOOL=ON")
+ if self.spec["lapack"].libs:
+ options.append(
+ "-DGMX_LAPACK_USER={0}".format(self.spec["lapack"].libs.joined(";"))
+ )
else:
- options.append('-DGMX_EXTERNAL_LAPACK:BOOL=OFF')
+ options.append("-DGMX_EXTERNAL_LAPACK:BOOL=OFF")
- if '+blas' in self.spec:
- options.append('-DGMX_EXTERNAL_BLAS:BOOL=ON')
- if self.spec['blas'].libs:
- options.append('-DGMX_BLAS_USER={0}'.format(
- self.spec['blas'].libs.joined(';')))
+ if "+blas" in self.spec:
+ options.append("-DGMX_EXTERNAL_BLAS:BOOL=ON")
+ if self.spec["blas"].libs:
+ options.append("-DGMX_BLAS_USER={0}".format(self.spec["blas"].libs.joined(";")))
else:
- options.append('-DGMX_EXTERNAL_BLAS:BOOL=OFF')
+ options.append("-DGMX_EXTERNAL_BLAS:BOOL=OFF")
# Activate SIMD based on properties of the target
target = self.spec.target
- if target >= 'zen2':
+ if target >= "zen2":
# AMD Family 17h (EPYC Rome)
- options.append('-DGMX_SIMD=AVX2_256')
- elif target >= 'zen':
+ options.append("-DGMX_SIMD=AVX2_256")
+ elif target >= "zen":
# AMD Family 17h (EPYC Naples)
- options.append('-DGMX_SIMD=AVX2_128')
- elif target >= 'bulldozer':
+ options.append("-DGMX_SIMD=AVX2_128")
+ elif target >= "bulldozer":
# AMD Family 15h
- options.append('-DGMX_SIMD=AVX_128_FMA')
- elif 'vsx' in target:
+ options.append("-DGMX_SIMD=AVX_128_FMA")
+ elif "vsx" in target:
# IBM Power 7 and beyond
- if self.spec.satisfies('%nvhpc'):
- options.append('-DGMX_SIMD=None')
+ if self.spec.satisfies("%nvhpc"):
+ options.append("-DGMX_SIMD=None")
else:
- options.append('-DGMX_SIMD=IBM_VSX')
- elif target.family == 'aarch64':
+ options.append("-DGMX_SIMD=IBM_VSX")
+ elif target.family == "aarch64":
# ARMv8
- if self.spec.satisfies('%nvhpc'):
- options.append('-DGMX_SIMD=None')
+ if self.spec.satisfies("%nvhpc"):
+ options.append("-DGMX_SIMD=None")
else:
- options.append('-DGMX_SIMD=ARM_NEON_ASIMD')
- elif target == 'mic_knl':
+ options.append("-DGMX_SIMD=ARM_NEON_ASIMD")
+ elif target == "mic_knl":
# Intel KNL
- options.append('-DGMX_SIMD=AVX_512_KNL')
+ options.append("-DGMX_SIMD=AVX_512_KNL")
else:
# Other architectures
simd_features = [
- ('sse2', 'SSE2'),
- ('sse4_1', 'SSE4.1'),
- ('avx', 'AVX_256'),
- ('axv128', 'AVX2_128'),
- ('avx2', 'AVX2_256'),
- ('avx512', 'AVX_512'),
+ ("sse2", "SSE2"),
+ ("sse4_1", "SSE4.1"),
+ ("avx", "AVX_256"),
+ ("axv128", "AVX2_128"),
+ ("avx2", "AVX2_256"),
+ ("avx512", "AVX_512"),
]
# Workaround NVIDIA compiler bug when avx512 is enabled
- if (self.spec.satisfies('%nvhpc') and
- ('avx512', 'AVX_512') in simd_features):
- simd_features.remove(('avx512', 'AVX_512'))
+ if self.spec.satisfies("%nvhpc") and ("avx512", "AVX_512") in simd_features:
+ simd_features.remove(("avx512", "AVX_512"))
feature_set = False
for feature, flag in reversed(simd_features):
if feature in target:
- options.append('-DGMX_SIMD:STRING={0}'.format(flag))
+ options.append("-DGMX_SIMD:STRING={0}".format(flag))
feature_set = True
break
# Fall back
if not feature_set:
- options.append('-DGMX_SIMD:STRING=None')
+ options.append("-DGMX_SIMD:STRING=None")
# Use the 'rtdscp' assembly instruction only on
# appropriate architectures
- options.append(self.define(
- 'GMX_USE_RDTSCP', str(target.family) in ('x86_64', 'x86')
- ))
+ options.append(self.define("GMX_USE_RDTSCP", str(target.family) in ("x86_64", "x86")))
- if self.spec.satisfies('@:2020'):
- options.append(
- self.define_from_variant('GMX_BUILD_MDRUN_ONLY', 'mdrun_only'))
+ if self.spec.satisfies("@:2020"):
+ options.append(self.define_from_variant("GMX_BUILD_MDRUN_ONLY", "mdrun_only"))
- options.append(self.define_from_variant('GMX_OPENMP', 'openmp'))
+ options.append(self.define_from_variant("GMX_OPENMP", "openmp"))
- if self.spec.satisfies('@:2020'):
+ if self.spec.satisfies("@:2020"):
options.append(
self.define_from_variant(
- 'GMX_RELAXED_DOUBLE_PRECISION',
- 'relaxed_double_precision'))
+ "GMX_RELAXED_DOUBLE_PRECISION", "relaxed_double_precision"
+ )
+ )
- if '+cycle_subcounters' in self.spec:
- options.append('-DGMX_CYCLE_SUBCOUNTERS:BOOL=ON')
+ if "+cycle_subcounters" in self.spec:
+ options.append("-DGMX_CYCLE_SUBCOUNTERS:BOOL=ON")
else:
- options.append('-DGMX_CYCLE_SUBCOUNTERS:BOOL=OFF')
+ options.append("-DGMX_CYCLE_SUBCOUNTERS:BOOL=OFF")
- if '^mkl' in self.spec:
+ if "^mkl" in self.spec:
# fftw-api@3 is provided by intel-mkl or intel-parllel-studio
# we use the mkl interface of gromacs
- options.append('-DGMX_FFT_LIBRARY=mkl')
- options.append('-DMKL_INCLUDE_DIR={0}'.
- format(self.spec['mkl'].headers.directories[0]))
+ options.append("-DGMX_FFT_LIBRARY=mkl")
+ options.append("-DMKL_INCLUDE_DIR={0}".format(self.spec["mkl"].headers.directories[0]))
# The 'blas' property provides a minimal set of libraries
# that is sufficient for fft. Using full mkl fails the cmake test
- options.append('-DMKL_LIBRARIES={0}'.
- format(self.spec['blas'].libs.joined(';')))
+ options.append("-DMKL_LIBRARIES={0}".format(self.spec["blas"].libs.joined(";")))
else:
# we rely on the fftw-api@3
- options.append('-DGMX_FFT_LIBRARY=fftw3')
- if '^amdfftw' in self.spec:
- options.append('-DGMX_FFT_LIBRARY=fftw3')
+ options.append("-DGMX_FFT_LIBRARY=fftw3")
+ if "^amdfftw" in self.spec:
+ options.append("-DGMX_FFT_LIBRARY=fftw3")
+ options.append(
+ "-DFFTWF_INCLUDE_DIRS={0}".format(self.spec["amdfftw"].headers.directories[0])
+ )
options.append(
- '-DFFTWF_INCLUDE_DIRS={0}'.
- format(self.spec['amdfftw'].headers.directories[0])
+ "-DFFTWF_LIBRARIES={0}".format(self.spec["amdfftw"].libs.joined(";"))
)
- options.append('-DFFTWF_LIBRARIES={0}'.
- format(self.spec['amdfftw'].libs.joined(';')))
# Ensure that the GROMACS log files report how the code was patched
# during the build, so that any problems are easier to diagnose.
- if '+plumed' in self.spec:
- options.append('-DGMX_VERSION_STRING_OF_FORK=PLUMED-spack')
+ if "+plumed" in self.spec:
+ options.append("-DGMX_VERSION_STRING_OF_FORK=PLUMED-spack")
else:
- options.append('-DGMX_VERSION_STRING_OF_FORK=spack')
+ options.append("-DGMX_VERSION_STRING_OF_FORK=spack")
return options