diff --git a/packages/netlib-xblas/package.py b/packages/netlib-xblas/package.py new file mode 100644 index 0000000000000000000000000000000000000000..01bdb992d37b1689770a7b43c4875723c5f09d3b --- /dev/null +++ b/packages/netlib-xblas/package.py @@ -0,0 +1,72 @@ +# Copyright 2013-2023 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 NetlibXblas(AutotoolsPackage): + """XBLAS is a reference implementation for extra precision BLAS. + + XBLAS is a reference implementation for the dense and banded BLAS + routines, along with extended and mixed precision version. Extended + precision is only used internally; input and output arguments remain + the same as in the existing BLAS. Extra precisions is implemented as + double-double (i.e., 128-bit total, 106-bit significand). Mixed + precision permits some input/output arguments of different types + (mixing real and complex) or precisions (mixing single and + double). This implementation is proof of concept, and no attempt was + made to optimize performance; performance should be as good as + straightforward but careful code written by hand.""" + + homepage = "https://www.netlib.org/xblas" + url = "https://www.netlib.org/xblas/xblas.tar.gz" + + version("1.0.248", sha256="b5fe7c71c2da1ed9bcdc5784a12c5fa9fb417577513fe8a38de5de0007f7aaa1") + + variant("fortran", default=True, description="Build Fortran interfaces") + variant("plain_blas", default=True, description="As part of XBLAS, build plain BLAS routines") + + provides("blas", when="+plain_blas") + + depends_on("m4", type="build") + + @property + def libs(self): + return find_libraries(["libxblas"], root=self.prefix, shared=False, recursive=True) + + def configure_args(self): + args = [] + + if self.spec.satisfies("~fortran"): + args += ["--disable-fortran"] + + if self.spec.satisfies("~plain_blas"): + args += ["--disable-plain-blas"] + + return args + + def install(self, spec, prefix): + mkdirp(prefix.lib) + install("libxblas.a", prefix.lib) + + if self.spec.satisfies("+plain_blas"): + # XBLAS should be a drop-in BLAS replacement + install("libxblas.a", join_path(prefix.lib, "libblas.a")) + + headers = [ + "f2c-bridge.h", + "blas_dense_proto.h", + "blas_enum.h", + "blas_extended.h", + "blas_extended_private.h", + "blas_extended_proto.h", + "blas_fpu.h", + "blas_malloc.h", + ] + mkdirp(prefix.include) + for h in headers: + install(join_path("src", h), prefix.include) + + return