From 1734127b7aaa3699b2fd6d0cee7d71d5f415facb Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Thu, 16 Feb 2023 08:43:36 -0700 Subject: lammps: refactor variants, add new versions (#34011) --- var/spack/repos/builtin/packages/lammps/package.py | 964 ++++++++------------- 1 file changed, 359 insertions(+), 605 deletions(-) (limited to 'var') diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py index e2e73404f8..8e2b991678 100644 --- a/var/spack/repos/builtin/packages/lammps/package.py +++ b/var/spack/repos/builtin/packages/lammps/package.py @@ -11,10 +11,7 @@ from spack.package import * class Lammps(CMakePackage, CudaPackage): """LAMMPS stands for Large-scale Atomic/Molecular Massively - Parallel Simulator. This package uses patch releases, not - stable release. - See https://github.com/spack/spack/pull/5342 for a detailed - discussion. + Parallel Simulator. """ homepage = "https://www.lammps.org/" @@ -25,47 +22,166 @@ class Lammps(CMakePackage, CudaPackage): maintainers("rbberger") + # rules for new versions and deprecation + # * new stable versions should be marked as preferred=True + # * a stable version that has updates and any of its outdated update releases should be + # marked deprecated=True + # * patch releases older than a stable release should be marked deprecated=True version("develop", branch="develop") + version("20221222", sha256="75372ee7ef982767fc4ed4dc95e20ddca8247419adeb0c1276c40e43d1eab955") version("20221103", sha256="d28517b84b157d4e46a1a64ed787b4662d8f2f5ade3f5a04bb0caed068f32f7e") version("20220915", sha256="392b8d35fc7919b0efaf8b389259a9b795a817e58e75e380467c63d03a0dab75") version("20220803", sha256="f37cb0b35c1682ffceae5826aadce47278aa7003099a1655fcea43acd7d37926") version( - "20220623.2", sha256="fdb5474135b17005030cd78ac85762fecf0944bdd27a81fbbe79b2b4522ccae7" + "20220623.2", + sha256="8a560213e83919623525c4a7c4b5f0eda35cdf3b0c0e6548fd891379e04ca9e6", + preferred=True, ) version( - "20220623.1", sha256="1d4fb06a4621b271e8b54f31fef241d0569717a69c1b7646a2b76fe5ce47c966" + "20220623.1", + sha256="58e3b2b984f8935bb0db5631e143be2826c45ffd48844f7c394f36624a3e17a2", + preferred=True, + deprecated=True, + ) + version( + "20220623", + sha256="d27ede095c9f00cd13a26f967a723d07cf8f4df65c700ed73573577bc173d5ce", + preferred=True, + deprecated=True, + ) + version( + "20220602", + sha256="3e8f54453e53b3b387a68317277f832b8cf64a981e64b21e98bb37ea36ac4a60", + deprecated=True, + ) + version( + "20220504", + sha256="fe05bae8090fd0177b3c1b987cd32a9cb7cd05d790828ba954c764eb52e10b52", + deprecated=True, + ) + version( + "20220324", + sha256="d791cc93eedfc345fdf87bfa5b6f7e17e461f86ba197f9e9c3d477ce8657a7ef", + deprecated=True, + ) + version( + "20220217", + sha256="e5bd2bf325835fa98d1b95f0667c83076580916027df5b8109d5470d1b97da98", + deprecated=True, + ) + version( + "20220107", + sha256="fbf6c6814968ae0d772d7b6783079ff4f249a8faeceb39992c344969e9f1edbb", + deprecated=True, + ) + version( + "20211214", + sha256="9f7b1ee2394678c1a6baa2c158a62345680a952eee251783e3c246b3f12db4c9", + deprecated=True, + ) + version( + "20211027", + sha256="c06f682fcf9d5921ca90c857a104e90fba0fe65decaac9732745e4da49281938", + deprecated=True, + ) + version( + "20210929.3", + sha256="e4c274f0dc5fdedc43f2b365156653d1105197a116ff2bafe893523cdb22532e", + preferred=True, + ) + version( + "20210929.2", + sha256="9318ca816cde16a9a4174bf22a1966f5f2155cb32c0ad5a6757633276411fb36", + preferred=True, + deprecated=True, + ) + version( + "20210929.1", + sha256="5000b422c9c245b92df63507de5aa2ea4af345ea1f00180167aaa084b711c27c", + preferred=True, + deprecated=True, + ) + version( + "20210929", + sha256="2dff656cb21fd9a6d46c818741c99d400cfb1b12102604844663b655fb2f893d", + preferred=True, + deprecated=True, + ) + version( + "20210920", + sha256="e3eba96933c1dd3177143c7ac837cae69faceba196948fbad2970425db414d8c", + deprecated=True, + ) + version( + "20210831", + sha256="532c42576a79d72682deaf43225ca773ed9f9e35deb484a82f91905b6cba23ec", + deprecated=True, + ) + version( + "20210730", + sha256="c5e998c8282a835d2bcba4fceffe3cecdf9aed9bdf79fa9c945af573e632f6e7", + deprecated=True, + ) + version( + "20210728", + sha256="6b844d2c3f7170a59d36fbf761483aa0c63d95eda254d00fe4d10542403abe36", + deprecated=True, ) - version("20220623", sha256="21533ce6f174c80815a48c99e5f3dd109e69d55c4cad47312d88a7190a35927f") - version("20220602", sha256="3e8f54453e53b3b387a68317277f832b8cf64a981e64b21e98bb37ea36ac4a60") - version("20220504", sha256="fe05bae8090fd0177b3c1b987cd32a9cb7cd05d790828ba954c764eb52e10b52") - version("20220324", sha256="d791cc93eedfc345fdf87bfa5b6f7e17e461f86ba197f9e9c3d477ce8657a7ef") - version("20220217", sha256="e5bd2bf325835fa98d1b95f0667c83076580916027df5b8109d5470d1b97da98") - version("20220107", sha256="fbf6c6814968ae0d772d7b6783079ff4f249a8faeceb39992c344969e9f1edbb") - version("20211214", sha256="9f7b1ee2394678c1a6baa2c158a62345680a952eee251783e3c246b3f12db4c9") - version("20211027", sha256="c06f682fcf9d5921ca90c857a104e90fba0fe65decaac9732745e4da49281938") version( - "20210929.3", sha256="d7df30f7ce0bd8b7c21949cf5bdf1877858815379cddb8a264da7a8cbf699639" + "20210702", + sha256="4fdd8ca2dbde8809c0048716650b73ae1f840e22ebe24b25f6f7a499377fea57", + deprecated=True, + ) + version( + "20210527", + sha256="f9f29970941f406d5c250de52a4cd07e5a4e44ae3b5ffed46edd019d998b8c33", + deprecated=True, + ) + version( + "20210514", + sha256="74d9c4386f2181b15a024314c42b7a0b0aaefd3b4b947aeca00fe07e5b2f3317", + deprecated=True, + ) + version( + "20210408", + sha256="1645147b7777de4f616b8232edf0b597868084f969c777fa0a757949c3f71f56", + deprecated=True, + ) + version( + "20210310", + sha256="25708378dbeccf794bc5045aceb84380bf4a3ca03fc8e5d150a26ca88d371474", + deprecated=True, ) version( - "20210929.2", sha256="26586c1e82356b60e40359ee474818003c7788214bfe2bfe9128a3dbe5200b4d" + "20210210", + sha256="2c5ba2c7935ad559ca94ee826e8727e65b49ef4582eb856534fffba70e44101a", + deprecated=True, ) version( - "20210929.1", sha256="3b792e20864bf88b855332486996f2c540deabb4e3507e48fa4ee96ad79615ec" + "20201029", + sha256="759705e16c1fedd6aa6e07d028cc0c78d73c76b76736668420946a74050c3726", + preferred=True, + ) + version( + "20200721", + sha256="845bfeddb7b667799a1a5dbc166b397d714c3d2720316604a979d3465b4190a9", + deprecated=True, + ) + version( + "20200630", + sha256="413cbfabcc1541a339c7a4ab5693fbeb768f46bb1250640ba94686c6e90922fc", + deprecated=True, + ) + version( + "20200505", + sha256="c49d77fd602d28ebd8cf10f7359b9fc4d14668c72039028ed7792453d416de73", + deprecated=True, + ) + version( + "20200303", + sha256="a1a2e3e763ef5baecea258732518d75775639db26e60af1634ab385ed89224d1", + preferred=True, ) - version("20210929", sha256="5132f332b582be3006510562ef10bac9ef76d760f34fc08a2af556416c57cf4c") - version("20210920", sha256="e3eba96933c1dd3177143c7ac837cae69faceba196948fbad2970425db414d8c") - version("20210831", sha256="532c42576a79d72682deaf43225ca773ed9f9e35deb484a82f91905b6cba23ec") - version("20210730", sha256="c5e998c8282a835d2bcba4fceffe3cecdf9aed9bdf79fa9c945af573e632f6e7") - version("20210728", sha256="6b844d2c3f7170a59d36fbf761483aa0c63d95eda254d00fe4d10542403abe36") - version("20210702", sha256="4fdd8ca2dbde8809c0048716650b73ae1f840e22ebe24b25f6f7a499377fea57") - version("20210514", sha256="74d9c4386f2181b15a024314c42b7a0b0aaefd3b4b947aeca00fe07e5b2f3317") - version("20210408", sha256="1645147b7777de4f616b8232edf0b597868084f969c777fa0a757949c3f71f56") - version("20210310", sha256="25708378dbeccf794bc5045aceb84380bf4a3ca03fc8e5d150a26ca88d371474") - version("20201029", sha256="3d347f6b512bc360505019d1c6183c969a2e1da402e31a1e26577daf5e419d95") - version("20200721", sha256="845bfeddb7b667799a1a5dbc166b397d714c3d2720316604a979d3465b4190a9") - version("20200630", sha256="413cbfabcc1541a339c7a4ab5693fbeb768f46bb1250640ba94686c6e90922fc") - version("20200505", sha256="c49d77fd602d28ebd8cf10f7359b9fc4d14668c72039028ed7792453d416de73") - version("20200303", sha256="9aa56dfb8673a06e6c88588505ec1dfc01dd94f9d60e719ed0c605e48cc06c58") version( "20200227", sha256="1aabcf38bc72285797c710b648e906151a912c36b634a9c88ac383aacf85516e", @@ -204,148 +320,173 @@ class Lammps(CMakePackage, CudaPackage): update = "" else: update = "_update{0}".format(split_ver[1]) - return "https://github.com/lammps/lammps/archive/patch_{0}{1}.tar.gz".format( - vdate.strftime("%d%b%Y").lstrip("0"), update + + is_stable = ( + version in self.versions + and "preferred" in self.versions[version] + and self.versions[version]["preferred"] + ) + + return "https://github.com/lammps/lammps/archive/{0}_{1}{2}.tar.gz".format( + "stable" if is_stable else "patch", vdate.strftime("%d%b%Y").lstrip("0"), update ) # List of supported optional packages # Note: package `openmp` in this recipe is called `openmp-package`, to avoid clash # with the pre-existing `openmp` variant - supported_packages = [ - "asphere", - "body", - "bpm", - "class2", - "colloid", - "compress", - "coreshell", - "dielectric", - "dipole", - "electrode", - "granular", - "intel", - "kspace", - "kokkos", - "latte", - "manybody", - "mc", - "meam", - "misc", - "mliap", - "ml-hdnnp", - "ml-iap", - "ml-snap", - "molecule", - "mpiio", - "opt", - "peri", - "plugin", - "poems", - "python", - "qeq", - "replica", - "rigid", - "shock", - "snap", - "spin", - "srd", - "voronoi", - "user-atc", - "user-adios", - "user-awpmd", - "user-bocs", - "user-brownian", - "user-cgsdk", - "user-colvars", - "user-diffraction", - "user-dpd", - "user-drude", - "user-eff", - "user-fep", - "user-h5md", - "user-hdnnp", - "user-intel", - "user-lb", - "user-manifold", - "user-meamc", - "user-mesodpd", - "user-mesont", - "user-mgpt", - "user-misc", - "user-mofff", - "user-molfile", - "user-netcdf", - "user-omp", - "user-phonon", - "user-plumed", - "user-ptm", - "user-qtb", - "user-reaction", - "user-reaxc", - "user-sdpd", - "user-smd", - "user-smtbq", - "user-sph", - "user-tally", - "user-uef", - "user-yaff", - "atc", - "adios", - "awpmd", - "bocs", - "brownian", - "cg-sdk", - "colvars", - "diffraction", - "dpd-basic", - "dpd-meso", - "dpd-react", - "dpd-smooth", - "drude", - "eff", - "extra-compute", - "extra-dump", - "extra-fix", - "extra-molecule", - "extra-pair", - "fep", - "h5md", - "interlayer", - "latboltz", - "machdyn", - "manifold", - "mesont", - "mgpt", - "mofff", - "molfile", - "netcdf", - "openmp-package", - "orient", - "phonon", - "plumed", - "ptm", - "qtb", - "reaction", - "reaxff", - "smtbq", - "sph", - "tally", - "uef", - "yaff", - ] - - for pkg in supported_packages: + # version ranges generates using utility script: + # https://gist.github.com/rbberger/fdaa38ff08e5961c4741624a4719cdb6 + supported_packages = { + "adios": {"when": "@20210702:"}, + "amoeba": {"when": "@20220803:"}, + "asphere": {}, + "atc": {"when": "@20210702:"}, + "awpmd": {"when": "@20210702:"}, + "bocs": {"when": "@20210702:"}, + "body": {}, + "bpm": {"when": "@20220504:"}, + "brownian": {"when": "@20210702:"}, + "cg-dna": {"when": "@20210702:"}, + "cg-sdk": {"when": "@20210702:20220623"}, + "cg-spica": {"when": "@20220803:"}, + "class2": {}, + "colloid": {}, + "colvars": {"when": "@20210702:"}, + "compress": {}, + "coreshell": {}, + "dielectric": {"when": "@20210702:"}, + "diffraction": {"when": "@20210702:"}, + "dipole": {}, + "dpd-basic": {"when": "@20210702:"}, + "dpd-meso": {"when": "@20210702:"}, + "dpd-react": {"when": "@20210702:"}, + "dpd-smooth": {"when": "@20210702:"}, + "drude": {"when": "@20210702:"}, + "eff": {"when": "@20210702:"}, + "electrode": {"when": "@20220504:"}, + "extra-compute": {"when": "@20210728:"}, + "extra-dump": {"when": "@20210728:"}, + "extra-fix": {"when": "@20210728:"}, + "extra-molecule": {"when": "@20210728:"}, + "extra-pair": {"when": "@20210728:"}, + "fep": {"when": "@20210702:"}, + "granular": {}, + "h5md": {"when": "@20210702:"}, + "intel": {"when": "@20210702:"}, + "interlayer": {"when": "@20210728:"}, + "kim": {}, + "kokkos": {}, + "kspace": {"default": True}, + "latboltz": {"when": "@20210702:"}, + "latte": {"when": "@20170922:"}, + "machdyn": {"when": "@20210702:"}, + "manifold": {"when": "@20210702:"}, + "manybody": {"default": True}, + "mc": {}, + "meam": {"when": "@:20181212,20210702:"}, + "mesont": {"when": "@20210702:"}, + "mgpt": {"when": "@20210702:"}, + "misc": {}, + "ml-hdnnp": {"when": "@20210702:"}, + "ml-iap": {"when": "@20210702:"}, + "ml-pod": {"when": "@20221222:"}, + "ml-rann": {"when": "@20210702:"}, + "ml-snap": {"when": "@20210702:"}, + "mliap": {"when": "@20200630:20210527"}, + "mofff": {"when": "@20210702:"}, + "molecule": {"default": True}, + "molfile": {"when": "@20210702:"}, + "mpiio": {}, + "netcdf": {"when": "@20210702:"}, + "openmp-package": {}, + "opt": {}, + "orient": {"when": "@20210728:"}, + "peri": {}, + "phonon": {"when": "@20210702:"}, + "plugin": {"when": "@20210408:"}, + "plumed": {"when": "@20210702:"}, + "poems": {}, + "ptm": {"when": "@20210702:"}, + "python": {}, + "qeq": {}, + "qtb": {"when": "@20210702:"}, + "reaction": {"when": "@20210702:"}, + "reax": {"when": "@:20181212"}, + "reaxff": {"when": "@20210702:"}, + "replica": {}, + "rigid": {"default": True}, + "shock": {}, + "smtbq": {"when": "@20210702:"}, + "snap": {"when": "@:20210527"}, + "sph": {"when": "@20210702:"}, + "spin": {"when": "@20180629:"}, + "srd": {}, + "tally": {"when": "@20210702:"}, + "uef": {"when": "@20210702:"}, + "user-adios": {"when": "@20190228:20210527"}, + "user-atc": {"when": "@:20210527"}, + "user-awpmd": {"when": "@:20210527"}, + "user-bocs": {"when": "@20180511:20210527"}, + "user-brownian": {"when": "@20210514:20210527"}, + "user-cgsdk": {"when": "@20170504:20210527"}, + "user-colvars": {"when": "@:20210527"}, + "user-diffraction": {"when": "@:20210527"}, + "user-dpd": {"when": "@:20210527"}, + "user-drude": {"when": "@:20210527"}, + "user-eff": {"when": "@:20210527"}, + "user-fep": {"when": "@:20210527"}, + "user-h5md": {"when": "@:20210527"}, + "user-hdnnp": {"when": "@20210527"}, + "user-intel": {"when": "@:20210527"}, + "user-lb": {"when": "@:20210527"}, + "user-manifold": {"when": "@:20210527"}, + "user-meamc": {"when": "@20170706:20210527"}, + "user-mesodpd": {"when": "@20200319:20210527"}, + "user-mesont": {"when": "@20200615:20210527"}, + "user-mgpt": {"when": "@:20210527"}, + "user-misc": {"when": "@:20210702"}, + "user-mofff": {"when": "@20180205:20210527"}, + "user-molfile": {"when": "@:20210527"}, + "user-netcdf": {"when": "@20170504:20210527"}, + "user-omp": {"when": "@:20210527"}, + "user-phonon": {"when": "@:20210527"}, + "user-plumed": {"when": "@20181109:20210527"}, + "user-ptm": {"when": "@20181010:20210527"}, + "user-qtb": {"when": "@:20210527"}, + "user-rann": {"when": "@20210527"}, + "user-reaction": {"when": "@20200319:20210527"}, + "user-reaxc": {"when": "@:20210527"}, + "user-sdpd": {"when": "@20181109:20210527"}, + "user-smd": {"when": "@:20210527"}, + "user-smtbq": {"when": "@:20210527"}, + "user-sph": {"when": "@:20210527"}, + "user-tally": {"when": "@:20210527"}, + "user-uef": {"when": "@20171023:20210527"}, + "user-vtk": {"when": "@20210527"}, + "user-yaff": {"when": "@20190201:20210527"}, + "voronoi": {}, + "vtk": {"when": "@20210702:"}, + "yaff": {"when": "@20210702:"}, + # "mdi": {"when": "@20210702:"}, no mdi package + # "ml-pace": {"when": "@20210702:"}, no pace package + # "ml-quip": {"when": "@20210702:"}, no quip package + # "scafacos": {"when": "@20210702:"}, no scafacos package + # "user-quip": {"when": "@20190201:20210527"}, no quip package + # "user-scafacos": {"when": "@20180905:20210527"}, no scafacos package + } + + for pkg_name, pkg_options in supported_packages.items(): variant( - pkg, - default=False, - description="Activate the {0} package".format(pkg.replace("-package", "")), + pkg_name, + default=pkg_options.get("default", False), + description="Activate the {} package".format(pkg_name.replace("-package", "")), + when=pkg_options.get("when", None), ) variant("lib", default=True, description="Build the liblammps in addition to the executable") variant("mpi", default=True, description="Build with mpi") - variant("jpeg", default=True, description="Build with jpeg support") - variant("png", default=True, description="Build with png support") - variant("ffmpeg", default=True, description="Build with ffmpeg support") - variant("kim", default=True, description="Build with KIM support") + variant("jpeg", default=False, description="Build with jpeg support") + variant("png", default=False, description="Build with png support") + variant("ffmpeg", default=False, description="Build with ffmpeg support") variant("openmp", default=True, description="Build with OpenMP") variant("opencl", default=False, description="Build with OpenCL") variant("exceptions", default=False, description="Build with lammps exceptions") @@ -412,12 +553,19 @@ class Lammps(CMakePackage, CudaPackage): depends_on("eigen@3:", when="+machdyn") depends_on("py-cython", when="+mliap+python") depends_on("py-cython", when="+ml-iap+python") - depends_on("py-numpy", when="+mliap+python") - depends_on("py-numpy", when="+ml-iap+python") + depends_on("py-numpy", when="+python") + depends_on("py-mpi4py", when="+python+mpi") depends_on("py-setuptools", when="@20220217:+python", type="build") depends_on("n2p2@2.1.4:", when="+user-hdnnp") depends_on("n2p2@2.1.4:", when="+ml-hdnnp") depends_on("n2p2+shared", when="+lib ^n2p2") + depends_on("vtk", when="+user-vtk") + depends_on("vtk", when="+vtk") + + depends_on("googletest", type="test") + depends_on("libyaml", type="test") + + extends("python", when="+python") conflicts("+cuda", when="+opencl") conflicts("+body", when="+poems@:20180628") @@ -434,43 +582,6 @@ class Lammps(CMakePackage, CudaPackage): conflicts("+dielectric", when="~kspace") conflicts("+dielectric", when="@:20210702~user-misc") conflicts("+dielectric", when="@20210728:~extra-pair") - conflicts( - "+meam", - when="@20181212:20210527", - msg="+meam is removed between @20181212 and @20210527, use +user-meamc instead", - ) - conflicts( - "+user-meamc", when="@:20181212", msg="+user-meamc only added @20181212, use +meam instead" - ) - conflicts( - "+user-reaction", - when="@:20200303", - msg="+user-reaction only supported for version 20200505 and later", - ) - conflicts( - "+plugin", when="@:20210310", msg="+plugin only supported for version 20210408 and later" - ) - conflicts( - "+user-brownian", - when="@:20210408", - msg="+user-brownian only supported for version 20210514 and later", - ) - conflicts( - "+dielectric", - when="@:20210527", - msg="+dielectric only supported for version 20210702 and later", - ) - conflicts( - "+dpd-basic", - when="@:20210527", - msg="+dpd-basic only supported for version 20210702 and later", - ) - conflicts("+bpm", when="@:20220324", msg="+bpm only supported for version 20220504 and later") - conflicts( - "+electrode", - when="@:20220324", - msg="+electrode only supported for version 20220504 and later", - ) conflicts("+electrode", when="~kspace") conflicts("+mliap", when="~snap") conflicts("+ml-iap", when="~ml-snap") @@ -495,362 +606,6 @@ class Lammps(CMakePackage, CudaPackage): msg="With +adios, mpi setting for adios2 and lammps must be the same", ) - # In the following, package refactoring at 2 July 2021 - conflicts( - "+mliap", when="@20210702:", msg="+mliap was removed after @20210527, use +ml-iap instead" - ) - conflicts("+ml-iap", when="@:20210527", msg="+ml-iap only added @20210702, use +mliap instead") - conflicts( - "+snap", when="@20210702:", msg="+snap was removed after @20210527, use +ml-snap instead" - ) - conflicts( - "+ml-snap", when="@:20210527", msg="+ml-snap only added @20210702, use +snap instead" - ) - # - conflicts( - "+user-atc", - when="@20210702:", - msg="+user-atc was removed after @20210527, use +atc instead", - ) - conflicts("+atc", when="@:20210527", msg="+atc only added @20210702, use +user-atc instead") - conflicts( - "+user-adios", - when="@20210702:", - msg="+user-adios was removed after @20210527, use +adios instead", - ) - conflicts( - "+adios", when="@:20210527", msg="+adios only added @20210702, use +user-adios instead" - ) - conflicts( - "+user-awpmd", - when="@20210702:", - msg="+user-awpmd was removed after @20210527, use +awpmd instead", - ) - conflicts( - "+awpmd", when="@:20210527", msg="+awpmd only added @20210702, use +user-awpmd instead" - ) - conflicts( - "+user-bocs", - when="@20210702:", - msg="+user-bocs was removed after @20210527, use +bocs instead", - ) - conflicts("+bocs", when="@:20210527", msg="+bocs only added @20210702, use +user-bocs instead") - conflicts( - "+user-brownian", - when="@20210702:", - msg="+user-brownian was removed after @20210527, use +brownian instead", - ) - conflicts( - "+brownian", - when="@:20210527", - msg="+brownian only added @20210702, use +user-brownian instead", - ) - conflicts( - "+user-cgsdk", - when="@20210702:", - msg="+user-cgsdk was removed after @20210527, use +cg-sdk instead", - ) - conflicts( - "+cg-sdk", when="@:20210527", msg="+cg-sdk only added @20210702, use +user-cgsdk instead" - ) - conflicts( - "+user-colvars", - when="@20210702:", - msg="+user-colvars was removed after @20210527, use +colvars instead", - ) - conflicts( - "+colvars", - when="@:20210527", - msg="+colvars only added @20210702, use +user-colvars instead", - ) - conflicts( - "+user-diffraction", - when="@20210702:", - msg="+user-diffraction was removed after @20210527, use +diffraction instead", - ) - conflicts( - "+diffraction", - when="@:20210527", - msg="+diffraction only added @20210702, use +user-diffraction instead", - ) - conflicts( - "+user-dpd", - when="@20210702:", - msg="+user-dpd was removed after @20210527, use +dpd-react instead", - ) - conflicts( - "+dpd-react", - when="@:20210527", - msg="+dpd-react only added @20210702, use +user-dpd instead", - ) - conflicts( - "+user-drude", - when="@20210702:", - msg="+user-drude was removed after @20210527, use +drude instead", - ) - conflicts( - "+drude", when="@:20210527", msg="+drude only added @20210702, use +user-drude instead" - ) - conflicts( - "+user-eff", - when="@20210702:", - msg="+user-eff was removed after @20210527, use +eff instead", - ) - conflicts("+eff", when="@:20210527", msg="+eff only added @20210702, use +user-eff instead") - conflicts( - "+user-fep", - when="@20210702:", - msg="+user-fep was removed after @20210527, use +fep instead", - ) - conflicts("+fep", when="@:20210527", msg="+fep only added @20210702, use +user-fep instead") - conflicts( - "+user-h5md", - when="@20210702:", - msg="+user-h5md was removed after @20210527, use +h5md instead", - ) - conflicts("+h5md", when="@:20210527", msg="+h5md only added @20210702, use +user-h5md instead") - conflicts( - "+user-hdnnp", when="@:20210514", msg="+user-hdnnp was introduced in version @20210527" - ) - conflicts( - "+user-hdnnp", - when="@20210702:", - msg="+user-hdnnp was removed after @20210527, use +ml-hdnnp instead", - ) - conflicts( - "+ml-hdnnp", - when="@:20210527", - msg="+ml-hdnnp only added @20210702, use +user-hdnnp instead", - ) - conflicts( - "+user-intel", - when="@20210702:", - msg="+user-intel was removed after @20210527, use +intel instead", - ) - conflicts( - "+intel", when="@:20210527", msg="+intel only added @20210702, use +user-intel instead" - ) - conflicts( - "+user-lb", - when="@20210702:", - msg="+user-lb was removed after @20210527, use +latboltz instead", - ) - conflicts( - "+latboltz", when="@:20210527", msg="+latboltz only added @20210702, use +user-lb instead" - ) - conflicts( - "+user-manifold", - when="@20210702:", - msg="+user-manifold was removed after @20210527, use +manifold instead", - ) - conflicts( - "+manifold", - when="@:20210527", - msg="+manifold only added @20210702, use +user-manifold instead", - ) - conflicts( - "+user-meamc", - when="@20210702:", - msg="+user-meamc was removed after @20210527, use +meam instead", - ) - conflicts( - "+user-mesodpd", - when="@20210702:", - msg="+user-mesodpd was removed after @20210527, use +dpd-meso instead", - ) - conflicts( - "+dpd-meso", - when="@:20210527", - msg="+dpd-meso only added @20210702, use +user-mesodpd instead", - ) - conflicts( - "+user-mesont", - when="@20210702:", - msg="+user-mesont was removed after @20210527, use +mesont instead", - ) - conflicts( - "+mesont", when="@:20210527", msg="+mesont only added @20210702, use +user-mesont instead" - ) - conflicts( - "+user-mgpt", - when="@20210702:", - msg="+user-mgpt was removed after @20210527, use +mgpt instead", - ) - conflicts("+mgpt", when="@:20210527", msg="+mgpt only added @20210702, use +user-mgpt instead") - conflicts( - "+user-mofff", - when="@20210702:", - msg="+user-mofff was removed after @20210527, use +mofff instead", - ) - conflicts( - "+mofff", when="@:20210527", msg="+mofff only added @20210702, use +user-mofff instead" - ) - conflicts( - "+user-molfile", - when="@20210702:", - msg="+user-molfile was removed after @20210527, use +molfile instead", - ) - conflicts( - "+molfile", - when="@:20210527", - msg="+molfile only added @20210702, use +user-molfile instead", - ) - conflicts( - "+user-netcdf", - when="@20210702:", - msg="+user-netcdf was removed after @20210527, use +netcdf instead", - ) - conflicts( - "+netcdf", when="@:20210527", msg="+netcdf only added @20210702, use +user-netcdf instead" - ) - conflicts( - "+user-omp", - when="@20210702:", - msg="+user-omp was removed after @20210527, use +openmp-package instead", - ) - conflicts( - "+openmp-package", - when="@:20210527", - msg="+openmp-package only added @20210702, use +user-omp instead", - ) - conflicts( - "+user-phonon", - when="@20210702:", - msg="+user-phonon was removed after @20210527, use +phonon instead", - ) - conflicts( - "+phonon", when="@:20210527", msg="+phonon only added @20210702, use +user-phonon instead" - ) - conflicts( - "+user-plumed", - when="@20210702:", - msg="+user-plumed was removed after @20210527, use +plumed instead", - ) - conflicts( - "+plumed", when="@:20210527", msg="+plumed only added @20210702, use +user-plumed instead" - ) - conflicts( - "+user-ptm", - when="@20210702:", - msg="+user-ptm was removed after @20210527, use +ptm instead", - ) - conflicts("+ptm", when="@:20210527", msg="+ptm only added @20210702, use +user-ptm instead") - conflicts( - "+user-qtb", - when="@20210702:", - msg="+user-qtb was removed after @20210527, use +qtb instead", - ) - conflicts("+qtb", when="@:20210527", msg="+qtb only added @20210702, use +user-qtb instead") - conflicts( - "+user-reaction", - when="@20210702:", - msg="+user-reaction was removed after @20210527, use +reaction instead", - ) - conflicts( - "+reaction", - when="@:20210527", - msg="+reaction only added @20210702, use +user-reaction instead", - ) - conflicts( - "+user-reaxc", - when="@20210702:", - msg="+user-reaxc was removed after @20210527, use +reaxff instead", - ) - conflicts( - "+reaxff", when="@:20210527", msg="+reaxff only added @20210702, use +user-reaxc instead" - ) - conflicts( - "+user-sdpd", - when="@20210702:", - msg="+user-sdpd was removed after @20210527, use +dpd-smooth instead", - ) - conflicts( - "+dpd-smooth", - when="@:20210527", - msg="+dpd-smooth only added @20210702, use +user-sdpd instead", - ) - conflicts( - "+user-smd", - when="@20210702:", - msg="+user-smd was removed after @20210527, use +machdyn instead", - ) - conflicts( - "+machdyn", when="@:20210527", msg="+machdyn only added @20210702, use +user-smd instead" - ) - conflicts( - "+user-smtbq", - when="@20210702:", - msg="+user-smtbq was removed after @20210527, use +smtbq instead", - ) - conflicts( - "+smtbq", when="@:20210527", msg="+smtbq only added @20210702, use +user-smtbq instead" - ) - conflicts( - "+user-sph", - when="@20210702:", - msg="+user-sph was removed after @20210527, use +sph instead", - ) - conflicts("+sph", when="@:20210527", msg="+sph only added @20210702, use +user-sph instead") - conflicts( - "+user-tally", - when="@20210702:", - msg="+user-tally was removed after @20210527, use +tally instead", - ) - conflicts( - "+tally", when="@:20210527", msg="+tally only added @20210702, use +user-tally instead" - ) - conflicts( - "+user-uef", - when="@20210702:", - msg="+user-uef was removed after @20210527, use +uef instead", - ) - conflicts("+uef", when="@:20210527", msg="+uef only added @20210702, use +user-uef instead") - conflicts( - "+user-yaff", - when="@20210702:", - msg="+user-yaff was removed after @20210527, use +yaff instead", - ) - conflicts("+yaff", when="@:20210527", msg="+yaff only added @20210702, use +user-yaff instead") - # In the following, package refactoring at 28 July 2021 - conflicts( - "+user-misc", - when="@20210728:", - msg="+user-misc was removed after @20210702, and split over multiple packages", - ) - conflicts( - "+extra-compute", - when="@:20210702", - msg="+extra-compute only added @20210728, use +user-misc instead", - ) - conflicts( - "+extra-dump", - when="@:20210702", - msg="+extra-dump only added @20210728, use +user-misc instead", - ) - conflicts( - "+extra-fix", - when="@:20210702", - msg="+extra-fix only added @20210728, use +user-misc instead", - ) - conflicts( - "+extra-molecule", - when="@:20210702", - msg="+extra-molecule only added @20210728, use +user-misc instead", - ) - conflicts( - "+extra-pair", - when="@:20210702", - msg="+extra-pair only added @20210728, use +user-misc instead", - ) - conflicts( - "+interlayer", - when="@:20210702", - msg="+interlayer only added @20210728, use +user-misc instead", - ) - conflicts( - "+orient", when="@:20210702", msg="+orient only added @20210728, use +user-misc instead" - ) - patch("lib.patch", when="@20170901") patch("660.patch", when="@20170922") patch("gtest_fix.patch", when="@:20210310 %aocc@3.2.0") @@ -874,25 +629,32 @@ class Lammps(CMakePackage, CudaPackage): args = [ self.define_from_variant("BUILD_SHARED_LIBS", "lib"), self.define_from_variant("LAMMPS_EXCEPTIONS", "exceptions"), - "-D{0}_MPI={1}".format(mpi_prefix, "ON" if "+mpi" in spec else "OFF"), + self.define_from_variant("{}_MPI".format(mpi_prefix), "mpi"), self.define_from_variant("BUILD_OMP", "openmp"), - "-DENABLE_TESTING=ON", + self.define("ENABLE_TESTING", self.run_tests), ] - if spec.satisfies("+cuda"): - args.append("-DPKG_GPU=ON") - args.append("-DGPU_API=cuda") - cuda_arch = spec.variants["cuda_arch"].value - if cuda_arch != "none": - args.append("-DGPU_ARCH=sm_{0}".format(cuda_arch[0])) - args.append(self.define_from_variant("CUDA_MPS_SUPPORT", "cuda_mps")) - elif spec.satisfies("+opencl"): - args.append("-DPKG_GPU=ON") - args.append("-DGPU_API=opencl") - else: - args.append("-DPKG_GPU=OFF") + if "~kokkos" in spec: + # LAMMPS can be build with the GPU package OR the KOKKOS package + # Using both in a single build is discouraged. + # +cuda only implies that one of the two is used + # by default it will use the GPU package if kokkos wasn't enabled + if "+cuda" in spec: + args.append(self.define("PKG_GPU", True)) + args.append(self.define("GPU_API", "cuda")) + cuda_arch = spec.variants["cuda_arch"].value + if cuda_arch != "none": + args.append(self.define("GPU_ARCH", "sm_{0}".format(cuda_arch[0]))) + args.append(self.define_from_variant("CUDA_MPS_SUPPORT", "cuda_mps")) + elif "+opencl" in spec: + # LAMMPS downloads and bundles its own OpenCL ICD Loader by default + args.append(self.define("USE_STATIC_OPENCL_LOADER", False)) + args.append(self.define("PKG_GPU", True)) + args.append(self.define("GPU_API", "opencl")) + else: + args.append(self.define("PKG_GPU", False)) if spec.satisfies("@20180629:+lib"): - args.append("-DBUILD_LIB=ON") + args.append(self.define("BUILD_LIB", True)) if spec.satisfies("%aocc"): cxx_flags = "-Ofast -mfma -fvectorize -funroll-loops" @@ -904,64 +666,56 @@ class Lammps(CMakePackage, CudaPackage): ) args.append(self.define("CMAKE_TUNE_FLAGS", cmake_tune_flags)) - lammps_sizes = self.spec.variants["lammps_sizes"].value - args.append(self.define("LAMMPS_SIZES", lammps_sizes)) + args.append(self.define_from_variant("LAMMPS_SIZES", "lammps_sizes")) args.append(self.define_from_variant("WITH_JPEG", "jpeg")) args.append(self.define_from_variant("WITH_PNG", "png")) args.append(self.define_from_variant("WITH_FFMPEG", "ffmpeg")) - for pkg in self.supported_packages: - opt = "-D{0}_{1}".format(pkg_prefix, pkg.replace("-package", "").upper()) - if "+{0}".format(pkg) in spec: - args.append("{0}=ON".format(opt)) - else: - args.append("{0}=OFF".format(opt)) - if "+kim" in spec: - args.append("-DPKG_KIM=ON") + for pkg, params in self.supported_packages.items(): + if "when" not in params or spec.satisfies(params["when"]): + opt = "{0}_{1}".format(pkg_prefix, pkg.replace("-package", "").upper()) + args.append(self.define(opt, "+{0}".format(pkg) in spec)) + if "+kspace" in spec: # If FFTW3 is selected, then CMake will try to detect, if threaded # FFTW libraries are available and enable them by default. - if "^fftw" in spec: - args.append("-DFFT=FFTW3") - if "^mkl" in spec: - args.append("-DFFT=MKL") - if "^amdfftw" in spec: + if "^fftw" in spec or "^cray-fftw" in spec or "^amdfftw" in spec: args.append(self.define("FFT", "FFTW3")) - if "^armpl-gcc" in spec: + elif "^mkl" in spec: + args.append(self.define("FFT", "MKL")) + elif "^armpl-gcc" in spec: args.append(self.define("FFT", "FFTW3")) args.append(self.define("FFTW3_LIBRARY", self.spec["fftw-api"].libs[0])) args.append( self.define("FFTW3_INCLUDE_DIR", self.spec["fftw-api"].headers.directories[0]) ) - if "^cray-fftw" in spec: - args.append("-DFFT=FFTW3") # Using the -DFFT_SINGLE setting trades off a little accuracy # for reduced memory use and parallel communication costs # for transposing 3d FFT data. - if spec.satisfies("fftw_precision=single"): - args.append("-DFFT_SINGLE=True") - else: - args.append("-DFFT_SINGLE=False") + args.append(self.define("FFT_SINGLE", spec.satisfies("fftw_precision=single"))) if "+kokkos" in spec: - args.append("-DEXTERNAL_KOKKOS=ON") + args.append(self.define("EXTERNAL_KOKKOS", True)) if "+user-adios" in spec or "+adios" in spec: - args.append("-DADIOS2_DIR={0}".format(self.spec["adios2"].prefix)) + args.append(self.define("ADIOS2_DIR", self.spec["adios2"].prefix)) if "+user-plumed" in spec or "+plumed" in spec: - args.append("-DDOWNLOAD_PLUMED=no") + args.append(self.define("DOWNLOAD_PLUMED", False)) if "+shared" in self.spec["plumed"]: - args.append("-DPLUMED_MODE=shared") + args.append(self.define("PLUMED_MODE", "shared")) else: - args.append("-DPLUMED_MODE=static") + args.append(self.define("PLUMED_MODE", "static")) if "+user-smd" in spec or "+machdyn" in spec: - args.append("-DDOWNLOAD_EIGEN3=no") - args.append("-DEIGEN3_INCLUDE_DIR={0}".format(self.spec["eigen"].prefix.include)) + args.append(self.define("DOWNLOAD_EIGEN3", False)) + args.append(self.define("EIGEN3_INCLUDE_DIR", self.spec["eigen"].prefix.include)) if "+user-hdnnp" in spec or "+ml-hdnnp" in spec: - args.append("-DDOWNLOAD_N2P2=no") - args.append("-DN2P2_DIR={0}".format(self.spec["n2p2"].prefix)) + args.append(self.define("DOWNLOAD_N2P2", False)) + args.append(self.define("N2P2_DIR", self.spec["n2p2"].prefix)) return args def setup_run_environment(self, env): env.set("LAMMPS_POTENTIALS", self.prefix.share.lammps.potentials) + if "+python" in self.spec: + env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib) + env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib64) -- cgit v1.2.3-70-g09d2