From 5b64c550486bcef598797d482e07ff6499901523 Mon Sep 17 00:00:00 2001 From: Ashwin Kumar Karnad <46030335+iamashwin99@users.noreply.github.com> Date: Tue, 9 Jan 2024 02:51:21 +0100 Subject: [bigdft] Enable building dynamic libraries (#41562) * bigdft: Add support for building shared libraries * bigdft: reformat with black * bigdft: use spec.satisfies instead of searching in spec --- var/spack/repos/builtin/packages/bigdft-atlab/package.py | 14 ++++++++++++++ var/spack/repos/builtin/packages/bigdft-chess/package.py | 5 +++++ var/spack/repos/builtin/packages/bigdft-core/package.py | 5 +++++ var/spack/repos/builtin/packages/bigdft-futile/package.py | 5 +++++ .../repos/builtin/packages/bigdft-libabinit/package.py | 5 +++++ var/spack/repos/builtin/packages/bigdft-psolver/package.py | 5 +++++ var/spack/repos/builtin/packages/bigdft-spred/package.py | 5 +++++ 7 files changed, 44 insertions(+) diff --git a/var/spack/repos/builtin/packages/bigdft-atlab/package.py b/var/spack/repos/builtin/packages/bigdft-atlab/package.py index a3955589e1..af1500f4c0 100644 --- a/var/spack/repos/builtin/packages/bigdft-atlab/package.py +++ b/var/spack/repos/builtin/packages/bigdft-atlab/package.py @@ -21,6 +21,9 @@ class BigdftAtlab(AutotoolsPackage): variant("mpi", default=True, description="Enable MPI support") variant("openmp", default=True, description="Enable OpenMP support") variant("openbabel", default=False, description="Enable detection of openbabel compilation") + variant( + "shared", default=True, description="Build shared libraries" + ) # Not default in bigdft, but is typically the default expectation depends_on("autoconf", type="build") depends_on("automake", type="build") @@ -39,20 +42,31 @@ class BigdftAtlab(AutotoolsPackage): prefix = self.prefix fcflags = [] + cflags = [] + cxxflags = [] + if "+openmp" in spec: fcflags.append(self.compiler.openmp_flag) + if spec.satisfies("+shared"): + fcflags.append("-fPIC") + cflags.append("-fPIC") + cxxflags.append("-fPIC") if self.spec.satisfies("%gcc@10:"): fcflags.append("-fallow-argument-mismatch") args = [ "FCFLAGS=%s" % " ".join(fcflags), + "CFLAGS=%s" % " ".join(cflags), + "CXXFLAGS=%s" % " ".join(cxxflags), "--with-futile-libs=%s" % spec["bigdft-futile"].libs.ld_flags, "--with-futile-incs=%s" % spec["bigdft-futile"].headers.include_flags + "/futile", "--with-moduledir=%s" % prefix.include, "--prefix=%s" % prefix, "--without-etsf-io", ] + if spec.satisfies("+shared"): + args.append("--enable-dynamic-libraries") if "+mpi" in spec: args.append("CC=%s" % spec["mpi"].mpicc) diff --git a/var/spack/repos/builtin/packages/bigdft-chess/package.py b/var/spack/repos/builtin/packages/bigdft-chess/package.py index 361e3e6587..5ff540f7c8 100644 --- a/var/spack/repos/builtin/packages/bigdft-chess/package.py +++ b/var/spack/repos/builtin/packages/bigdft-chess/package.py @@ -23,6 +23,9 @@ class BigdftChess(AutotoolsPackage, CudaPackage): variant("openmp", default=True, description="Enable OpenMP support") variant("scalapack", default=True, description="Enable SCALAPACK support") variant("ntpoly", default=False, description="Option to use NTPoly") + variant( + "shared", default=True, description="Build shared libraries" + ) # Not default in bigdft, but is typically the default expectation # variant('minpack', default=False, description='Give the link-line for MINPACK') depends_on("autoconf", type="build") @@ -73,6 +76,8 @@ class BigdftChess(AutotoolsPackage, CudaPackage): "--prefix=%s" % prefix, "--without-etsf-io", ] + if spec.satisfies("+shared"): + args.append("--enable-dynamic-libraries") if "+mpi" in spec: args.append("CC=%s" % spec["mpi"].mpicc) diff --git a/var/spack/repos/builtin/packages/bigdft-core/package.py b/var/spack/repos/builtin/packages/bigdft-core/package.py index e29ab9a2ac..90146355ee 100644 --- a/var/spack/repos/builtin/packages/bigdft-core/package.py +++ b/var/spack/repos/builtin/packages/bigdft-core/package.py @@ -23,6 +23,9 @@ class BigdftCore(AutotoolsPackage, CudaPackage): variant("openmp", default=True, description="Enable OpenMP support") variant("scalapack", default=True, description="Enable SCALAPACK support") variant("openbabel", default=False, description="Enable detection of openbabel compilation") + variant( + "shared", default=True, description="Build shared libraries" + ) # Not default in bigdft, but is typically the default expectation depends_on("autoconf", type="build") depends_on("automake", type="build") @@ -87,6 +90,8 @@ class BigdftCore(AutotoolsPackage, CudaPackage): "--prefix=%s" % prefix, "--without-etsf-io", ] + if spec.satisfies("+shared"): + args.append("--enable-dynamic-libraries") if "+mpi" in spec: args.append("CC=%s" % spec["mpi"].mpicc) diff --git a/var/spack/repos/builtin/packages/bigdft-futile/package.py b/var/spack/repos/builtin/packages/bigdft-futile/package.py index 3bce94cd52..3894c503de 100644 --- a/var/spack/repos/builtin/packages/bigdft-futile/package.py +++ b/var/spack/repos/builtin/packages/bigdft-futile/package.py @@ -24,6 +24,9 @@ class BigdftFutile(AutotoolsPackage, CudaPackage): variant("mpi", default=True, description="Enable MPI support") variant("openmp", default=True, description="Enable OpenMP support") + variant( + "shared", default=True, description="Build shared libraries" + ) # Not default in bigdft, but is typically the default expectation depends_on("autoconf", type="build") depends_on("automake", type="build") @@ -59,6 +62,8 @@ class BigdftFutile(AutotoolsPackage, CudaPackage): "--with-pyyaml-path=%s" % pyyaml, "--prefix=%s" % prefix, ] + if spec.satisfies("+shared"): + args.append("--enable-dynamic-libraries") if "+openmp" in spec: args.append("--with-openmp") diff --git a/var/spack/repos/builtin/packages/bigdft-libabinit/package.py b/var/spack/repos/builtin/packages/bigdft-libabinit/package.py index 6d14ea46f4..8a514181ae 100644 --- a/var/spack/repos/builtin/packages/bigdft-libabinit/package.py +++ b/var/spack/repos/builtin/packages/bigdft-libabinit/package.py @@ -26,6 +26,9 @@ class BigdftLibabinit(AutotoolsPackage): depends_on("libtool", type="build") variant("mpi", default=True, description="Enable MPI support") + variant( + "shared", default=True, description="Build shared libraries" + ) # Not default in bigdft, but is typically the default expectation depends_on("python@3.0:", type=("build", "run")) @@ -56,6 +59,8 @@ class BigdftLibabinit(AutotoolsPackage): "--with-moduledir=%s" % prefix.include, "--prefix=%s" % prefix, ] + if spec.satisfies("+shared"): + args.append("--enable-dynamic-libraries") if "+mpi" in spec: args.append("CC=%s" % spec["mpi"].mpicc) diff --git a/var/spack/repos/builtin/packages/bigdft-psolver/package.py b/var/spack/repos/builtin/packages/bigdft-psolver/package.py index 4655c754b2..b97a5fee0d 100644 --- a/var/spack/repos/builtin/packages/bigdft-psolver/package.py +++ b/var/spack/repos/builtin/packages/bigdft-psolver/package.py @@ -23,6 +23,9 @@ class BigdftPsolver(AutotoolsPackage, CudaPackage): variant("mpi", default=True, description="Enable MPI support") variant("openmp", default=True, description="Enable OpenMP support") variant("scalapack", default=True, description="Enable SCALAPACK support") + variant( + "shared", default=True, description="Build shared libraries" + ) # Not default in bigdft, but is typically the default expectation depends_on("autoconf", type="build") depends_on("automake", type="build") @@ -69,6 +72,8 @@ class BigdftPsolver(AutotoolsPackage, CudaPackage): "--prefix=%s" % prefix, "--without-etsf-io", ] + if spec.satisfies("+shared"): + args.append("--enable-dynamic-libraries") if "+mpi" in spec: args.append("CC=%s" % spec["mpi"].mpicc) diff --git a/var/spack/repos/builtin/packages/bigdft-spred/package.py b/var/spack/repos/builtin/packages/bigdft-spred/package.py index c95da03a98..c0e02da236 100644 --- a/var/spack/repos/builtin/packages/bigdft-spred/package.py +++ b/var/spack/repos/builtin/packages/bigdft-spred/package.py @@ -26,6 +26,9 @@ class BigdftSpred(AutotoolsPackage): variant("mpi", default=True, description="Enable MPI support") variant("openmp", default=True, description="Enable OpenMP support") variant("scalapack", default=True, description="Enable SCALAPACK support") + variant( + "shared", default=True, description="Build shared libraries" + ) # Not default in bigdft, but is typically the default expectation depends_on("python@3.0:", type=("build", "run")) @@ -72,6 +75,8 @@ class BigdftSpred(AutotoolsPackage): "--with-moduledir=%s" % prefix.include, "--prefix=%s" % prefix, ] + if spec.satisfies("+shared"): + args.append("--enable-dynamic-libraries") if "+mpi" in spec: args.append("CC=%s" % spec["mpi"].mpicc) -- cgit v1.2.3-70-g09d2