spack/var/spack/repos/builtin/packages/ngspice/package.py
2024-09-26 10:36:08 +02:00

183 lines
7.9 KiB
Python

# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Ngspice(AutotoolsPackage):
"""ngspice is the open source spice simulator for electric and
electronic circuits."""
homepage = "https://ngspice.sourceforge.net/"
url = "https://sourceforge.net/projects/ngspice/files/ngspice-33.tar.gz"
list_url = "https://sourceforge.net/projects/ngspice/files/ng-spice-rework"
list_depth = 1
git = "git://git.code.sf.net/p/ngspice/ngspice"
maintainers("aweits", "cessenat")
license("BSD-3-Clause")
# Master version by default adds the experimental adms feature
version("master", branch="master")
version("43", sha256="14dd6a6f08531f2051c13ae63790a45708bd43f3e77886a6a84898c297b13699")
version("42", sha256="737fe3846ab2333a250dfadf1ed6ebe1860af1d8a5ff5e7803c772cc4256e50a")
version("41", sha256="1ce219395d2f50c33eb223a1403f8318b168f1e6d1015a7db9dbf439408de8c4")
version("40", sha256="e303ca7bc0f594e2d6aa84f68785423e6bf0c8dad009bb20be4d5742588e890d")
version("39", sha256="bf94e811eaad8aaf05821d036a9eb5f8a65d21d30e1cab12701885e09618d771")
version("38", sha256="2c3e22f6c47b165db241cf355371a0a7558540ab2af3f8b5eedeeb289a317c56")
version("37", sha256="9beea6741a36a36a70f3152a36c82b728ee124c59a495312796376b30c8becbe")
version("34", sha256="2263fffc6694754972af7072ef01cfe62ac790800dad651bc290bfcae79bd7b5")
version("33", sha256="b99db66cc1c57c44e9af1ef6ccb1dcbc8ae1df3e35acf570af578f606f8541f1")
version("32", sha256="3cd90c4e94516d87c5b4d02a3a6405b1136b25d05c871d4fee1fd7c4c0d03ef2")
version("31", sha256="845f3b0c962e47ded051dfbc134c3c1e4ac925c9f0ce1cb3df64eb9b9da5c282")
version("30", sha256="08fe0e2f3768059411328a33e736df441d7e6e7304f8dad0ed5f28e15d936097")
version("29", sha256="8d6d0ffbc15f248eb6ec3bde3b9d1397fbc95cb677e1c6a14ff46065c7f95c4a")
version("27", sha256="0c08c7d57a2e21cf164496f3237f66f139e0c78e38345fbe295217afaf150695")
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
# kicad needs build=lib, i.e. --with--ngshared
variant(
"build",
default="lib",
description="Build type: lib=ngshared, bin otherwise",
values=("lib", "bin"),
multi=False,
)
variant("X", default=False, description="Use the X Window System")
variant(
"debug",
default="auto",
description="Enable debugging features: " "auto is yes for build=lib, no for build=bin",
values=("auto", "yes", "no"),
multi=False,
)
variant("xspice", default=False, description="Enable XSPICE enhancements")
variant("cider", default=False, description="Enable CIDER enhancements")
variant("openmp", default=False, description="Compile with multi-threading support")
variant("readline", default=True, description="Build readline support (for bin)")
variant("fft", default=True, description="Use external fftw lib")
variant("osdi", default=False, description="Use osdi/OpenVAF")
depends_on("fftw-api@3", when="+fft")
with when("+fft+openmp"):
depends_on("acfl threads=openmp", when="^[virtuals=fftw-api] acfl")
depends_on("amdfftw+openmp", when="^[virtuals=fftw-api] amdfftw")
depends_on("armpl-gcc threads=openmp", when="^[virtuals=fftw-api] armpl-gcc")
depends_on("cray-fftw+openmp", when="^[virtuals=fftw-api] cray-fftw")
depends_on("fftw+openmp", when="^[virtuals=fftw-api] fftw")
depends_on("fujitsu-fftw+openmp", when="^[virtuals=fftw-api] fujitsu-fftw")
depends_on("intel-mkl threads=openmp", when="^[virtuals=fftw-api] intel-mkl")
depends_on("intel-oneapi-mkl threads=openmp", when="^[virtuals=fftw-api] intel-oneapi-mkl")
depends_on(
"intel-parallel-studio threads=openmp",
when="^[virtuals=fftw-api] intel-parallel-studio",
)
with when("+fft~openmp"):
depends_on("acfl threads=none", when="^[virtuals=fftw-api] acfl")
depends_on("amdfftw~openmp", when="^[virtuals=fftw-api] amdfftw")
depends_on("armpl-gcc threads=none", when="^[virtuals=fftw-api] armpl-gcc")
depends_on("cray-fftw~openmp", when="^[virtuals=fftw-api] cray-fftw")
depends_on("fftw~openmp", when="^[virtuals=fftw-api] fftw")
depends_on("fujitsu-fftw~openmp", when="^[virtuals=fftw-api] fujitsu-fftw")
depends_on("intel-mkl threads=none", when="^[virtuals=fftw-api] intel-mkl")
depends_on("intel-oneapi-mkl threads=none", when="^[virtuals=fftw-api] intel-oneapi-mkl")
depends_on(
"intel-parallel-studio threads=none", when="^[virtuals=fftw-api] intel-parallel-studio"
)
depends_on("readline", when="+readline build=bin")
# Needed for autoreconf:
depends_on("bison", type="build", when="@master")
depends_on("flex", type="build", when="@master")
# INSTALL indicates dependency on these :
depends_on("freetype", when="+X build=bin")
depends_on("libxrender", when="+X build=bin")
depends_on("fontconfig", when="+X build=bin")
depends_on("libxft", when="+X build=bin")
depends_on("libxext", when="+X build=bin")
depends_on("libxmu", when="+X build=bin")
depends_on("libxaw", when="+X build=bin")
depends_on("libx11", when="+X build=bin")
# Need autotools when building on master:
depends_on("autoconf", type="build", when="@master")
depends_on("automake", type="build", when="@master")
depends_on("libtool", type="build", when="@master")
depends_on("adms", when="@master")
conflicts(
"%gcc@:4.9.9",
when="@32:",
msg="Failure to compile recent release with old gcc due to hicum2",
)
conflicts("@28", msg="This release does not compile")
@when("@master")
def autoreconf(self, spec, prefix):
Executable("./autogen.sh")("--adms")
def configure_args(self):
spec = self.spec
args = []
if "build=lib" in spec:
args.append("--with-ngshared")
# Legacy debug is activated in auto debug mode with build=lib
if "debug=no" in spec:
args.append("--disable-debug")
args.append("--without-x")
else:
if "debug=auto" in spec or "debug=no" in spec:
args.append("--disable-debug")
if "+readline" in spec:
args.append("--with-readline=yes")
if "+X" in spec:
args.append("--with-x")
x = spec["libx11"]
args.extend(
["--x-includes=%s" % x.prefix.include, "--x-libraries=%s" % x.prefix.lib]
)
else:
args.append("--without-x")
if "+xspice" in spec:
args.append("--enable-xspice")
if "+cider" in spec:
args.append("--enable-cider")
if "+openmp" in spec:
args.append("--enable-openmp")
if "~fft" in spec:
args.append("--with-fftw3=no")
if "+osdi" in spec:
args.append("--enable-osdi")
if "darwin" in spec.architecture:
args.append("--enable-pss")
if "@master" in spec:
args.append("--enable-adms")
# Do not hide compilation line (easier to debug compilation)
args.append("--disable-silent-rules")
return args
def flag_handler(self, name, flags):
if self.spec.satisfies("%nvhpc") and name == "cflags":
flags.append("-Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes")
flags.append("-Wnested-externs -Wredundant-decls")
if "debug=yes" in self.spec:
flags.append("-g")
return (None, None, flags)
def setup_run_environment(self, env):
if "build=lib" in self.spec:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)