diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2022-07-30 15:19:18 -0700 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2022-07-31 13:29:20 -0700 |
commit | f52f6e99dbf1131886a80112b8c79dfc414afb7c (patch) | |
tree | 05cb7d64b2395922f2f24683da49f472075be12c /var/spack/repos/builtin/packages/gromacs | |
parent | 549ba1ed32372c67fc57271cde3797d58b7dec6e (diff) | |
download | spack-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.py | 632 |
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 |