From 56495a8cd81640302a9d3a22249ce42bc4698a38 Mon Sep 17 00:00:00 2001 From: Rocco Meli Date: Tue, 28 Jan 2025 09:53:22 +0100 Subject: [PATCH] dftd4, mctc-lib: enable cmake builds and add multicharge package (#48594) * enable cmake builds * [@spackbot] updating style on behalf of RMeli * Update var/spack/repos/builtin/packages/dftd4/package.py Co-authored-by: Sebastian Ehlert <28669218+awvwgk@users.noreply.github.com> * Update var/spack/repos/builtin/packages/mctc-lib/package.py * include * fix * use sha256 * update --------- Co-authored-by: RMeli Co-authored-by: Sebastian Ehlert <28669218+awvwgk@users.noreply.github.com> --- .../repos/builtin/packages/dftd4/package.py | 40 +++++++++++---- .../repos/builtin/packages/elsi/package.py | 6 +-- .../builtin/packages/mctc-lib/package.py | 17 +++++-- .../builtin/packages/multicharge/package.py | 50 +++++++++++++++++++ 4 files changed, 97 insertions(+), 16 deletions(-) create mode 100644 var/spack/repos/builtin/packages/multicharge/package.py diff --git a/var/spack/repos/builtin/packages/dftd4/package.py b/var/spack/repos/builtin/packages/dftd4/package.py index 992a1e40f20..9e36bf3e8da 100644 --- a/var/spack/repos/builtin/packages/dftd4/package.py +++ b/var/spack/repos/builtin/packages/dftd4/package.py @@ -2,10 +2,11 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems import cmake, meson from spack.package import * -class Dftd4(MesonPackage): +class Dftd4(MesonPackage, CMakePackage): """Generally Applicable Atomic-Charge Dependent London Dispersion Correction""" homepage = "https://www.chemie.uni-bonn.de/pctc/mulliken-center/software/dftd4" @@ -16,6 +17,8 @@ class Dftd4(MesonPackage): license("LGPL-3.0-only") + build_system("cmake", "meson", default="meson") + version("main", branch="main") version("3.7.0", sha256="4e8749df6852bf863d5d1831780a2d30e9ac4afcfebbbfe5f6a6a73d06d6c6ee") version("3.6.0", sha256="56b3b4650853a34347d3d56c93d7596ecbe2208c4a14dbd027959fd4a009679d") @@ -26,22 +29,39 @@ class Dftd4(MesonPackage): version("3.1.0", sha256="b652aa7cbf8d087c91bcf80f2d5801459ecf89c5d4176ebb39e963ee740ed54b") version("3.0.0", sha256="a7539d68d48d851bf37b79e37ea907c9da5eee908d0aa58a0a7dc15f04f8bc35") - depends_on("c", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("fortran", type="build") variant("openmp", default=True, description="Use OpenMP parallelisation") - variant("python", default=False, description="Build Python extension module") + variant( + "python", + default=False, + when="build_system=meson", + description="Build Python extension module", + ) + + depends_on("meson@0.57.1:", type="build", when="build_system=meson") # mesonbuild/meson#8377 depends_on("blas") depends_on("lapack") - depends_on("mctc-lib") - depends_on("meson@0.57.1:", type="build") # mesonbuild/meson#8377 depends_on("pkgconfig", type="build") + depends_on("py-cffi", when="+python") depends_on("python@3.6:", when="+python") + for build_system in ["cmake", "meson"]: + depends_on(f"mctc-lib build_system={build_system}", when=f"build_system={build_system}") + depends_on(f"multicharge build_system={build_system}", when=f"build_system={build_system}") + extends("python", when="+python") + def url_for_version(self, version): + if version <= Version("3.6.0"): + return f"https://github.com/dftd4/dftd4/releases/download/v{version}/dftd4-{version}-source.tar.xz" + return super().url_for_version(version) + + +class MesonBuilder(meson.MesonBuilder): def meson_args(self): lapack = self.spec["lapack"].libs.names[0] if lapack == "lapack": @@ -57,7 +77,7 @@ def meson_args(self): "-Dpython={0}".format(str("+python" in self.spec).lower()), ] - def url_for_version(self, version): - if version <= Version("3.6.0"): - return f"https://github.com/dftd4/dftd4/releases/download/v{version}/dftd4-{version}-source.tar.xz" - return super().url_for_version(version) + +class CMakeBuilder(cmake.CMakeBuilder): + def cmake_args(self): + return [self.define_from_variant("WITH_OPENMP", "openmp")] diff --git a/var/spack/repos/builtin/packages/elsi/package.py b/var/spack/repos/builtin/packages/elsi/package.py index a1e358c9e99..8cedf803ff1 100644 --- a/var/spack/repos/builtin/packages/elsi/package.py +++ b/var/spack/repos/builtin/packages/elsi/package.py @@ -25,9 +25,9 @@ class Elsi(CMakePackage, CudaPackage): ) version("master", branch="master") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") generator("ninja") diff --git a/var/spack/repos/builtin/packages/mctc-lib/package.py b/var/spack/repos/builtin/packages/mctc-lib/package.py index a2e44ed023b..9f65b63fad6 100644 --- a/var/spack/repos/builtin/packages/mctc-lib/package.py +++ b/var/spack/repos/builtin/packages/mctc-lib/package.py @@ -2,20 +2,23 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems import cmake, meson from spack.package import * -class MctcLib(MesonPackage): +class MctcLib(MesonPackage, CMakePackage): """Modular computation toolchain library for quantum chemistry file IO""" homepage = "https://github.com/grimme-lab/mctc-lib" - url = "https://github.com/grimme-lab/mctc-lib/releases/download/v0.3.0/mctc-lib-0.3.0.tar.xz" + url = "https://github.com/grimme-lab/mctc-lib/releases/download/v0.0.0/mctc-lib-0.0.0.tar.xz" git = "https://github.com/grimme-lab/mctc-lib" maintainers("awvwgk") license("Apache-2.0") + build_system("cmake", "meson", default="meson") + version("main", branch="main") version("0.3.1", sha256="a5032a0bbbbacc952037c5215b71aa6b438767a84bafb60fda25ba43c8835513") version("0.3.0", sha256="81f3edbf322e6e28e621730a796278498b84af0f221f785c537a315312059bf0") @@ -24,9 +27,17 @@ class MctcLib(MesonPackage): variant("json", default=False, description="Enable support for JSON") - depends_on("meson@0.57.2:", type="build") + depends_on("meson@0.57.2:", type="build", when="build_system=meson") + depends_on("json-fortran@8:", when="+json") depends_on("pkgconfig", type="build") + +class CMakeBuilder(cmake.CMakeBuilder): + def cmake_args(self): + return [self.define_from_variant("WITH_JSON", "json")] + + +class MesonBuilder(meson.MesonBuilder): def meson_args(self): return ["-Djson={0}".format("enabled" if "+json" in self.spec else "disabled")] diff --git a/var/spack/repos/builtin/packages/multicharge/package.py b/var/spack/repos/builtin/packages/multicharge/package.py new file mode 100644 index 00000000000..0c16059434a --- /dev/null +++ b/var/spack/repos/builtin/packages/multicharge/package.py @@ -0,0 +1,50 @@ +# Copyright Spack Project Developers. See COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.build_systems import cmake, meson +from spack.package import * + + +class Multicharge(CMakePackage, MesonPackage): + """Electronegativity equilibration model for atomic partial charges""" + + homepage = "https://github.com/grimme-lab/multicharge" + url = "https://github.com/grimme-lab/multicharge/releases/download/v0.0.0/multicharge-0.0.0.tar.xz" + git = "https://github.com/grimme-lab/multicharge.git" + + maintainers("RMeli", "awvwgk") + + license("Apache-2.0", checked_by="RMeli") + + build_system("cmake", "meson", default="meson") + + version("0.3.0", sha256="e8f6615d445264798b12d2854e25c93938373dc149bb79e6eddd23fc4309749d") + + variant("openmp", default=True, description="Enable OpenMP support") + + depends_on("lapack") + depends_on("mctc-lib build_system=cmake", when="build_system=cmake") + depends_on("mctc-lib build_system=meson", when="build_system=meson") + + +class CMakeBuilder(cmake.CMakeBuilder): + def cmake_args(self): + args = [self.define_from_variant("WITH_OpenMP", "openmp")] + return args + + +class MesonBuilder(meson.MesonBuilder): + def meson_args(self): + lapack = self.spec["lapack"].libs.names[0] + if lapack == "lapack": + lapack = "netlib" + elif lapack.startswith("mkl"): + lapack = "mkl" + elif lapack != "openblas": + lapack = "auto" + + return [ + "-Dopenmp={0}".format(str("+openmp" in self.spec).lower()), + "-Dlapack={0}".format(lapack), + ]