Egbert Eich
ca90d2bfd2
- Set -mfpmath=sse for the entire build for ix86 platforms on SLE/Leap. Since we build for x86_64, we know that sse is available. On Factory we leave -ffloat-store for the test suite only as this option comes at a performance penalty. We may see precision related issues in the test suite with future compilers regardless. OBS-URL: https://build.opensuse.org/request/show/1067530 OBS-URL: https://build.opensuse.org/package/show/science/lapack?expand=0&rev=38
446 lines
16 KiB
RPMSpec
446 lines
16 KiB
RPMSpec
#
|
|
# spec file for package lapack
|
|
#
|
|
# Copyright (c) 2023 SUSE LLC
|
|
#
|
|
# All modifications and additions to the file contributed by third parties
|
|
# remain the property of their copyright owners, unless otherwise agreed
|
|
# upon. The license for this file, and modifications and additions to the
|
|
# file, is the same license as for the pristine package itself (unless the
|
|
# license for the pristine package is not an Open Source License, in which
|
|
# case the license is the MIT License). An "Open Source License" is a
|
|
# license that conforms to the Open Source Definition (Version 1.9)
|
|
# published by the Open Source Initiative.
|
|
|
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
|
#
|
|
|
|
|
|
%bcond_without tmg
|
|
|
|
%if 0%{?suse_version} > 1500
|
|
%define a_x _%{_arch}
|
|
%endif
|
|
|
|
Name: lapack
|
|
Version: 3.9.0
|
|
Release: 0
|
|
Summary: Linear Algebra Package
|
|
License: BSD-3-Clause
|
|
Group: Development/Libraries/Parallel
|
|
URL: https://www.netlib.org/lapack/
|
|
Source0: https://github.com/Reference-LAPACK/lapack/archive/v%{version}.tar.gz#/lapack-%{version}.tar.gz
|
|
Source98: lapack.rpmlintrc
|
|
Source99: baselibs.conf
|
|
Patch1: lapack-3.2.2.patch
|
|
# PATCH-FIX-UPSTREAM -- https://github.com/Reference-LAPACK/lapack/commit/489a2884c22e.patch
|
|
Patch2: Fix-MinGW-build-error.patch
|
|
# PATCH-FIX-UPSTREAM -- https://github.com/Reference-LAPACK/lapack/commit/d168b4d2ae67.patch
|
|
Patch3: Fix-some-minor-inconsistencies-in-LAPACKE_czgesvdq.patch
|
|
# PATCH-FIX-UPSTREAM -- https://github.com/Reference-LAPACK/lapack/commit/ea2a102d3827.patch
|
|
Patch4: Avoid-out-of-bounds-accesses-in-complex-EIG-tests.patch
|
|
# PATCH-FIX-UPSTREAM -- https://github.com/Reference-LAPACK/lapack/commit/38f3eeee3108b18158409ca2a100e6fe03754781
|
|
Patch5: Fix-out-of-bounds-read.patch
|
|
# PATCH-FIX-UPSTREAM
|
|
Patch6: https://github.com/Reference-LAPACK/lapack/commit/87536aa3c8bb.patch#/Restore_missing_deprecated_prototypes.patch
|
|
|
|
BuildRequires: gcc-fortran
|
|
BuildRequires: python3-base
|
|
BuildRequires: update-alternatives
|
|
Requires(pre): update-alternatives
|
|
|
|
%description
|
|
LAPACK provides routines for solving systems of simultaneous linear
|
|
equations, least-squares solutions of linear systems of equations,
|
|
eigenvalue problems, and singular value problems. The associated matrix
|
|
factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are
|
|
also provided, as are related computations such as reordering of the
|
|
Schur factorizations and estimating condition numbers. Dense and banded
|
|
matrices are handled, but not general sparse matrices. In all areas,
|
|
similar functionality is provided for real and complex matrices, in
|
|
both single and double precision.
|
|
|
|
%package -n liblapack3
|
|
Summary: LAPACK Shared Library
|
|
Group: Development/Libraries/Parallel
|
|
Requires(pre): update-alternatives
|
|
|
|
%description -n liblapack3
|
|
LAPACK provides routines for solving systems of simultaneous linear
|
|
equations, least-squares solutions of linear systems of equations,
|
|
eigenvalue problems, and singular value problems. The associated matrix
|
|
factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are
|
|
also provided, as are related computations such as reordering of the
|
|
Schur factorizations and estimating condition numbers. Dense and banded
|
|
matrices are handled, but not general sparse matrices. In all areas,
|
|
similar functionality is provided for real and complex matrices, in
|
|
both single and double precision.
|
|
|
|
%package -n libblas3
|
|
Summary: BLAS Shared Library
|
|
Group: Development/Libraries/Parallel
|
|
Requires(pre): update-alternatives
|
|
|
|
%description -n libblas3
|
|
BLAS (Basic Linear Algebra Subprograms) is a standard library for
|
|
numerical algebra. BLAS provides a number of basic algorithms for
|
|
linear algebra.
|
|
|
|
%package devel
|
|
Summary: Linear Algebra Package
|
|
Group: Development/Libraries/Parallel
|
|
Requires: blas-devel = %{version}
|
|
Requires: liblapack3 = %{version}
|
|
Provides: lapack = %{version}
|
|
Obsoletes: lapack < %{version}
|
|
|
|
%description devel
|
|
LAPACK provides routines for solving systems of simultaneous linear
|
|
equations, least-squares solutions of linear systems of equations,
|
|
eigenvalue problems, and singular value problems. The associated matrix
|
|
factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are
|
|
also provided, as are related computations such as reordering of the
|
|
Schur factorizations and estimating condition numbers. Dense and banded
|
|
matrices are handled, but not general sparse matrices. In all areas,
|
|
similar functionality is provided for real and complex matrices, in
|
|
both single and double precision.
|
|
|
|
%package devel-static
|
|
Summary: Linear Algebra Package - static libraries
|
|
Group: Development/Libraries/Parallel
|
|
Requires: lapack-devel = %{version}
|
|
|
|
%description devel-static
|
|
LAPACK provides routines for solving systems of simultaneous linear
|
|
equations, least-squares solutions of linear systems of equations,
|
|
eigenvalue problems, and singular value problems. The associated matrix
|
|
factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are
|
|
also provided, as are related computations such as reordering of the
|
|
Schur factorizations and estimating condition numbers. Dense and banded
|
|
matrices are handled, but not general sparse matrices. In all areas,
|
|
similar functionality is provided for real and complex matrices, in
|
|
both single and double precision.
|
|
|
|
%package -n blas-devel
|
|
Summary: Basic Linear Algebra Subprograms
|
|
Group: Development/Libraries/Parallel
|
|
Requires: libblas3 = %{version}
|
|
Provides: blas = %{version}
|
|
Obsoletes: blas < %{version}
|
|
|
|
%description -n blas-devel
|
|
BLAS (Basic Linear Algebra Subprograms) is a standard library for
|
|
numerical algebra. BLAS provides a number of basic algorithms for
|
|
linear algebra. BLAS is fast and well-tested, was written in FORTRAN 77
|
|
and built with gfortran. BLAS manual pages are available in the
|
|
blas-man package.
|
|
|
|
%package -n blas-devel-static
|
|
Summary: Basic Linear Algebra Subprograms
|
|
Group: Development/Libraries/Parallel
|
|
Requires: blas-devel = %{version}
|
|
|
|
%description -n blas-devel-static
|
|
BLAS (Basic Linear Algebra Subprograms) is a standard library for
|
|
numerical algebra. BLAS provides a number of basic algorithms for
|
|
linear algebra. BLAS is fast and well-tested, was written in FORTRAN 77
|
|
and built with gfortran. BLAS manual pages are available in the
|
|
blas-man package.
|
|
|
|
%package -n liblapacke3
|
|
Summary: LAPACKE development files
|
|
Group: Development/Libraries/C and C++
|
|
Requires(pre): update-alternatives
|
|
|
|
%description -n liblapacke3
|
|
This library provides a native C interface to LAPACK routines available
|
|
at www.netlib.org/lapack to facilitate usage of LAPACK functionality
|
|
for C programmers.
|
|
|
|
This implementation introduces:
|
|
- row-major and column-major matrix layout controlled by the first function
|
|
parameter;
|
|
- an implementation with working arrays (middle-level interface) as well as
|
|
without working arrays (high-level interface);
|
|
- input scalars passed by value;
|
|
- error code as a return value instead of the INFO parameter.
|
|
|
|
%package -n lapacke-devel
|
|
Summary: LAPACKE development files
|
|
Group: Development/Libraries/C and C++
|
|
Requires: liblapacke3 = %{version}
|
|
Provides: lapacke = %{version}
|
|
|
|
%description -n lapacke-devel
|
|
LAPACKE headers and development files.
|
|
|
|
%package -n lapacke-devel-static
|
|
Summary: LAPACKE static libraries
|
|
Group: Development/Libraries/C and C++
|
|
Requires: lapacke-devel = %{version}
|
|
|
|
%description -n lapacke-devel-static
|
|
LAPACKE development files - static libraries.
|
|
|
|
%package -n libcblas3
|
|
Summary: CBLAS Shared Library
|
|
Group: Development/Libraries/C and C++
|
|
Requires(pre): update-alternatives
|
|
# Only version ever packaged separately
|
|
Obsoletes: libcblas3 == 20110120
|
|
|
|
%description -n libcblas3
|
|
This library provides a native C interface to BLAS routines available
|
|
at www.netlib.org/blas to facilitate usage of BLAS functionality
|
|
for C programmers.
|
|
|
|
%package -n cblas-devel
|
|
Summary: CBLAS development files
|
|
Group: Development/Libraries/C and C++
|
|
Requires: libcblas3 = %{version}
|
|
Provides: cblas = %{version}
|
|
|
|
%description -n cblas-devel
|
|
cblas headers and development files.
|
|
|
|
%package -n cblas-devel-static
|
|
Summary: CBLAS - static libraries
|
|
Group: Development/Libraries/C and C++
|
|
Requires: cblas-devel = %{version}
|
|
|
|
%description -n cblas-devel-static
|
|
The cblas-devel-static package contains the CBLAS static libraries
|
|
for -static linking. You do not need these, unless you link
|
|
statically, which is highly discouraged.
|
|
|
|
%ifarch %{ix86}
|
|
%if 0%{?sle_version:%sle_version} >= 150100
|
|
%global precflags "-mfpmath=sse"
|
|
%global test_precflags %precflags
|
|
%else
|
|
%global test_precflags "-ffloat-store"
|
|
%endif
|
|
%endif
|
|
|
|
%prep
|
|
%setup -q
|
|
%autopatch -p1
|
|
sed -i -e '1 s@env python@python3@' lapack_testing.py
|
|
|
|
%build
|
|
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
|
|
%global optflags_f %{optflags}
|
|
|
|
cp make.inc.example make.inc
|
|
# for ABI compatibility we need to build the deprecated interfaces
|
|
echo 'BUILD_DEPRECATED = Yes' >> make.inc
|
|
%{?with_tmg:echo 'LAPACKE_WITH_TMG = Yes' >> make.inc}
|
|
|
|
%make_build cleanlib
|
|
%make_build blaslib \
|
|
FFLAGS="%{optflags_f} %{?precflags} -fPIC"
|
|
mkdir tmp
|
|
( cd tmp; ar x ../librefblas.a )
|
|
gfortran -shared -Wl,-soname=libblas.so.3 -o libblas.so.%{version} -Wl,--no-undefined tmp/*.o
|
|
ln -s libblas.so.%{version} libblas.so
|
|
rm -rf tmp
|
|
|
|
%make_build cblaslib \
|
|
CFLAGS="%{optflags} %{?precflags} -fPIC -DADD_ "
|
|
mkdir tmp
|
|
( cd tmp; ar x ../libcblas.a )
|
|
gfortran -shared -Wl,-soname=libcblas.so.3 -o libcblas.so.%{version} -Wl,--no-undefined tmp/*.o -L. -lblas
|
|
ln -s libcblas.so.%{version} libcblas.so
|
|
rm -rf tmp
|
|
|
|
# May need to be included in liblapack
|
|
%make_build -C TESTING/MATGEN FFLAGS="%{optflags_f} %{?test_precflags} %{?with_tmg:-fPIC}"
|
|
|
|
%make_build lapacklib \
|
|
FFLAGS="%{optflags_f} %{?precflags} -fPIC"
|
|
mkdir tmp
|
|
( cd tmp; ar x ../liblapack.a; %{?with_tmg: ar x ../libtmglib.a; ar cr ../liblapack.a *.o; ranlib ../liblapack.a })
|
|
gfortran -shared -Wl,-soname=liblapack.so.3 -o liblapack.so.%{version} -Wl,--no-undefined tmp/*.o -L. -lblas
|
|
ln -s liblapack.so.%{version} liblapack.so
|
|
rm -rf tmp
|
|
|
|
make %{?_smp_mflags} lapackelib \
|
|
CFLAGS="%{optflags} %{?precflags} -fPIC -DADD_ -DHAVE_LAPACK_CONFIG_H -DLAPACK_COMPLEX_STRUCTURE"
|
|
mkdir tmp
|
|
( cd tmp; ar x ../liblapacke.a )
|
|
gfortran -shared -Wl,-soname=liblapacke.so.3 -o liblapacke.so.%{version} -Wl,--no-undefined tmp/*.o -L. -llapack
|
|
ln -s liblapacke.so.%{version} liblapacke.so
|
|
rm -rf tmp
|
|
|
|
# Build test binaries - blas
|
|
%make_build -C BLAS/TESTING FFLAGS="%{optflags_f} %{?test_precflags}"
|
|
# Build test binaries - cblas
|
|
%make_build -C CBLAS/testing FFLAGS="%{optflags_f} %{?test_precflags}"
|
|
# Build test binaries - lapack
|
|
%make_build -C TESTING/LIN FFLAGS="%{optflags_f} %{?test_precflags}"
|
|
%make_build -C TESTING/EIG FFLAGS="%{optflags_f} %{?test_precflags}"
|
|
|
|
%check
|
|
# Increase stack size, required for xeigtstz, see
|
|
# https://github.com/Reference-LAPACK/lapack/issues/335
|
|
# Remove for lapack > 3.9
|
|
ulimit -s 16384
|
|
|
|
%make_build blas_testing FFLAGS="%{optflags_f} %{?test_precflags}"
|
|
if grep -B15 -A15 FAIL BLAS/TESTING/*.out; then
|
|
echo
|
|
echo "blas_testing FAILED"
|
|
false
|
|
fi
|
|
|
|
%make_build cblas_testing CFLAGS="%{optflags} -fPIC"
|
|
grep -B15 -A15 FAIL CBLAS/testing/*.out && false
|
|
|
|
%make_build lapack_testing FFLAGS="%{optflags_f} %{?test_precflags}"
|
|
if grep -B15 -A15 FAIL TESTING/*.out; then
|
|
echo
|
|
echo "lapack_testing FAILED"
|
|
false
|
|
fi
|
|
|
|
%install
|
|
install -d %{buildroot}/%{_libdir}
|
|
install -d %{buildroot}/%{_sysconfdir}/alternatives
|
|
install -d %{buildroot}/%{_includedir}
|
|
## BLAS
|
|
install -d %{buildroot}/%{_libdir}/blas
|
|
install -m 644 librefblas.a %{buildroot}/%{_libdir}/libblas.a
|
|
install -m 755 libblas.so.%{version} %{buildroot}/%{_libdir}/blas
|
|
ln -s libblas.so.%{version} %{buildroot}/%{_libdir}/blas/libblas.so.3
|
|
ln -s blas/libblas.so.%{version} %{buildroot}/%{_libdir}/libblas.so
|
|
ln -s %{_sysconfdir}/alternatives/libblas.so.3%{?a_x} %{buildroot}/%{_libdir}/libblas.so.3
|
|
## CBLAS
|
|
install -m 644 CBLAS/include/*.h %{buildroot}/%{_includedir}
|
|
install -m 644 libcblas.a %{buildroot}/%{_libdir}
|
|
install -m 755 libcblas.so.%{version} %{buildroot}/%{_libdir}/blas
|
|
ln -s libcblas.so.%{version} %{buildroot}/%{_libdir}/blas/libcblas.so.3
|
|
ln -s blas/libcblas.so.%{version} %{buildroot}/%{_libdir}/libcblas.so
|
|
ln -s %{_sysconfdir}/alternatives/libcblas.so.3%{?a_x} %{buildroot}/%{_libdir}/libcblas.so.3
|
|
## LAPACK
|
|
install -d %{buildroot}/%{_libdir}/lapack
|
|
install -m 644 liblapack.a %{buildroot}/%{_libdir}
|
|
install -m 755 liblapack.so.%{version} %{buildroot}/%{_libdir}/lapack
|
|
ln -s liblapack.so.%{version} %{buildroot}/%{_libdir}/lapack/liblapack.so.3
|
|
ln -s lapack/liblapack.so.%{version} %{buildroot}/%{_libdir}/liblapack.so
|
|
ln -s %{_sysconfdir}/alternatives/liblapack.so.3%{?a_x} %{buildroot}/%{_libdir}/liblapack.so.3
|
|
## LAPACKE
|
|
install -m 644 LAPACKE/include/*.h %{buildroot}/%{_includedir}
|
|
install -m 644 liblapacke.a %{buildroot}/%{_libdir}
|
|
install -m 755 liblapacke.so.%{version} %{buildroot}/%{_libdir}/lapack
|
|
ln -s liblapacke.so.%{version} %{buildroot}/%{_libdir}/lapack/liblapacke.so.3
|
|
ln -s lapack/liblapacke.so.%{version} %{buildroot}/%{_libdir}/liblapacke.so
|
|
ln -s %{_sysconfdir}/alternatives/liblapacke.so.3%{?a_x} %{buildroot}/%{_libdir}/liblapacke.so.3
|
|
|
|
%post -n libblas3
|
|
%{_sbindir}/update-alternatives --install \
|
|
%{_libdir}/libblas.so.3 libblas.so.3%{?a_x} %{_libdir}/blas/libblas.so.3 50
|
|
/sbin/ldconfig
|
|
|
|
%postun -n libblas3
|
|
/sbin/ldconfig
|
|
if [ ! %{_libdir}/blas/libblas.so.3 ] ; then
|
|
%{_sbindir}/update-alternatives --remove libblas.so.3%{?a_x} %{_libdir}/blas/libblas.so.3
|
|
fi
|
|
|
|
%post -n liblapack3
|
|
%{_sbindir}/update-alternatives --install \
|
|
%{_libdir}/liblapack.so.3 liblapack.so.3%{?a_x} %{_libdir}/lapack/liblapack.so.3 50
|
|
/sbin/ldconfig
|
|
|
|
%postun -n liblapack3
|
|
/sbin/ldconfig
|
|
if [ ! -f %{_libdir}/lapack/liblapack.so.3 ] ; then
|
|
%{_sbindir}/update-alternatives --remove liblapack.so.3%{?a_x} %{_libdir}/lapack/liblapack.so.3
|
|
fi
|
|
|
|
%post -n libcblas3
|
|
%{_sbindir}/update-alternatives --install \
|
|
%{_libdir}/libcblas.so.3 libcblas.so.3%{?a_x} %{_libdir}/blas/libcblas.so.3 50
|
|
/sbin/ldconfig
|
|
|
|
%postun -n libcblas3
|
|
/sbin/ldconfig
|
|
if [ ! -f %{_libdir}/blas/libcblas.so.3 ] ; then
|
|
%{_sbindir}/update-alternatives --remove libcblas.so.3%{?a_x} %{_libdir}/blas/libcblas.so.3
|
|
fi
|
|
|
|
%post -n liblapacke3
|
|
%{_sbindir}/update-alternatives --install \
|
|
%{_libdir}/liblapacke.so.3 liblapacke.so.3%{?a_x} %{_libdir}/lapack/liblapacke.so.3 50
|
|
/sbin/ldconfig
|
|
|
|
%postun -n liblapacke3
|
|
/sbin/ldconfig
|
|
if [ ! -f %{_libdir}/lapack/liblapacke.so.3 ] ; then
|
|
%{_sbindir}/update-alternatives --remove liblapacke.so.3%{?a_x} %{_libdir}/lapack/liblapacke.so.3
|
|
fi
|
|
|
|
%files -n liblapack3
|
|
%doc README.md
|
|
%license LICENSE
|
|
%dir %{_libdir}/lapack
|
|
%{_libdir}/lapack/liblapack.so.%{version}
|
|
%{_libdir}/lapack/liblapack.so.3
|
|
%ghost %{_libdir}/liblapack.so.3
|
|
%ghost %{_sysconfdir}/alternatives/liblapack.so.3%{?a_x}
|
|
|
|
%files -n libblas3
|
|
%doc README.md
|
|
%license LICENSE
|
|
%dir %{_libdir}/blas
|
|
%{_libdir}/blas/libblas.so.%{version}
|
|
%{_libdir}/blas/libblas.so.3
|
|
%ghost %{_libdir}/libblas.so.3
|
|
%ghost %{_sysconfdir}/alternatives/libblas.so.3%{?a_x}
|
|
|
|
%files devel
|
|
%{_libdir}/liblapack.so
|
|
|
|
%files devel-static
|
|
%{_libdir}/liblapack.a
|
|
|
|
%files -n blas-devel
|
|
%{_libdir}/libblas.so
|
|
|
|
%files -n blas-devel-static
|
|
%{_libdir}/libblas.a
|
|
|
|
%files -n liblapacke3
|
|
%{_libdir}/lapack/liblapacke.so.%{version}
|
|
%{_libdir}/lapack/liblapacke.so.3
|
|
%ghost %{_libdir}/liblapacke.so.3
|
|
%ghost %{_sysconfdir}/alternatives/liblapacke.so.3%{?a_x}
|
|
|
|
%files -n lapacke-devel
|
|
%doc LAPACKE/README
|
|
%license LAPACKE/LICENSE
|
|
%{_libdir}/liblapacke.so
|
|
%{_includedir}/lapack*.h
|
|
|
|
%files -n lapacke-devel-static
|
|
%{_libdir}/liblapacke.a
|
|
|
|
%files -n libcblas3
|
|
%doc README.md
|
|
%license LICENSE
|
|
%dir %{_libdir}/blas
|
|
%{_libdir}/blas/libcblas.so.%{version}
|
|
%{_libdir}/blas/libcblas.so.3
|
|
%ghost %{_libdir}/libcblas.so.3
|
|
%ghost %{_sysconfdir}/alternatives/libcblas.so.3%{?a_x}
|
|
|
|
%files -n cblas-devel
|
|
%doc CBLAS/README
|
|
%{_libdir}/libcblas.so
|
|
%{_includedir}/cblas*.h
|
|
|
|
%files -n cblas-devel-static
|
|
%{_libdir}/libcblas.a
|
|
|
|
%changelog
|