Accepting request 533655 from home:eeich:hpc_alt

- Generate baselib.conf dynamically and only for the non-HPC
  builds: this avoids issues with the source validator.

- Convert openblas to multibuild.
- Add HPC build using environment modules.
  (FATE#321708).
- fix-arm64-cpuid-return.patch
  Fix CPUID detection on ARM (From OHPC).

OBS-URL: https://build.opensuse.org/request/show/533655
OBS-URL: https://build.opensuse.org/package/show/science/openblas?expand=0&rev=55
This commit is contained in:
Dmitry Roshchin 2017-10-16 15:00:39 +00:00 committed by Git OBS Bridge
parent 2dc7521b9a
commit 48de63cb9e
6 changed files with 411 additions and 271 deletions

23
README.HPC.SUSE Normal file
View File

@ -0,0 +1,23 @@
openSUSE specific packaging
===========================
OpenBLAS provides optimized implementations of BLAS and LAPACK.
openSUSE provides two variants:
* With OpenMP support
* With threading support
The serial variant has been dropped. To run a program
which requires the serial version (ie. because it is
multi-threaded itself), either specify the environment
variable OMP_NUM_THREADS=1 or place a call to
void openblas_set_num_threads(int num_threads);
in your program to limit the number of threads this library
uses to 1.
On x86 systems OpenBLAS uses dynamic architectures support,
so it contains all CPU-related optimizations.
How to switch between the various BLAS/LAPACK implementations
=============================================================
The openmp and threaded variants may be installed in parallel.
To select which one to use please use the 'modules' command.

10
_constraints Normal file
View File

@ -0,0 +1,10 @@
<constraints>
<hardware>
<disk>
<size unit="G">20</size>
</disk>
<memory>
<size unit="M">8000</size>
</memory>
</hardware>
</constraints>

7
_multibuild Normal file
View File

@ -0,0 +1,7 @@
<multibuild>
<package>serial</package>
<package>openmp</package>
<package>pthreads</package>
<package>gnu-hpc</package>
<package>gnu-hpc-pthreads</package>
</multibuild>

View File

@ -0,0 +1,25 @@
From 63d4fcdecd40cb9eee8228680521ff93a80a8e11 Mon Sep 17 00:00:00 2001
From: Eric Van Hensbergen <eric.vanhensbergen@arm.com>
Date: Tue, 23 Aug 2016 11:29:27 -0500
Subject: [PATCH] fix-arm64-cpuid-return
---
cpuid_arm64.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cpuid_arm64.c b/cpuid_arm64.c
index c7a27f8..95fc708 100644
--- a/cpuid_arm64.c
+++ b/cpuid_arm64.c
@@ -59,7 +59,7 @@ int get_feature(char *search)
fclose(infile);
- if( p == NULL ) return;
+ if( p == NULL ) return(0);
t = strtok(p," ");
while( t = strtok(NULL," "))
--
2.7.4

View File

@ -1,3 +1,18 @@
-------------------------------------------------------------------
Thu Oct 12 10:01:10 UTC 2017 - eich@suse.com
- Generate baselib.conf dynamically and only for the non-HPC
builds: this avoids issues with the source validator.
-------------------------------------------------------------------
Fri Sep 8 14:30:29 UTC 2017 - eich@suse.com
- Convert openblas to multibuild.
- Add HPC build using environment modules.
(FATE#321708).
- fix-arm64-cpuid-return.patch
Fix CPUID detection on ARM (From OHPC).
------------------------------------------------------------------- -------------------------------------------------------------------
Wed Aug 9 19:45:54 UTC 2017 - dmitry_r@opensuse.org Wed Aug 9 19:45:54 UTC 2017 - dmitry_r@opensuse.org

View File

@ -16,152 +16,233 @@
# #
Name: openblas %global flavor @BUILD_FLAVOR@%{nil}
Version: 0.2.20
%define _vers 0_2_20
%define vers 0.2.20
%define pname openblas
%if "%flavor" == ""
%define package_name %{pname}
ExclusiveArch: do_not_build
%endif
%global build_flags USE_THREAD=1 USE_OPENMP=1
%if "%flavor" == "serial"
%define build_flags USE_THREAD=0 USE_OPENMP=0
%define openblas_so_prio 20
# we build devel packages only from one flavor
%define build_devel 1
%{bcond_with hpc}
%endif
%if "%flavor" == "pthreads"
%define build_flags USE_THREAD=1 USE_OPENMP=0
%ifarch %ix86 x86_64
%define openblas_so_prio 50
%else
%define openblas_so_prio 20
%endif
%{bcond_with hpc}
%endif
%if "%flavor" == "openmp"
%ifarch %ix86 x86_64
%define openblas_so_prio 20
%else
%define openblas_so_prio 50
%endif
%{bcond_with hpc}
%endif
%if "%flavor" == "gnu-hpc"
%define compiler_family gnu
%undefine c_f_ver
%{bcond_without hpc}
%endif
%if "%flavor" == "gnu6-hpc"
%define compiler_family gnu
%define c_f_ver 6
%{bcond_without hpc}
%endif
%if "%flavor" == "gnu-hpc-pthreads"
%define compiler_family gnu
%undefine c_f_ver
%define ext pthreads
%define build_flags USE_THREAD=1 USE_OPENMP=0
%{bcond_without hpc}
%endif
%if "%flavor" == "gnu6-hpc-pthreads"
%define compiler_family gnu
%define c_f_ver 6
%define ext pthreads
%define build_flags USE_THREAD=1 USE_OPENMP=0
%{bcond_without hpc}
%endif
%if %{without hpc}
%if 0%{!?package_name:1}
%define package_name %{pname}_%{flavor}
%endif
%define so_v 0
%define p_prefix %_prefix
%define p_includedir %_includedir/%pname
%define p_libdir %_libdir
%define p_cmakedir %{p_libdir}/cmake/%{pname}
%define num_threads 64
%else
%define package_name %{hpc_package_name %_vers}
%define p_prefix %hpc_prefix
%define p_includedir %hpc_includedir
%define p_libdir %hpc_libdir
%define p_cmakedir %{hpc_libdir}/cmake
%define num_threads 256
%{hpc_init -c %{compiler_family} %{?c_f_ver:-v %{c_f_ver}} %{?ext:-e %{ext}}}
%endif
Name: %{package_name}
Version: %vers
Release: 0 Release: 0
Summary: An optimized BLAS library based on GotoBLAS2 Summary: An optimized BLAS library based on GotoBLAS2
License: BSD-3-Clause License: BSD-3-Clause
Group: Productivity/Scientific/Math Group: Productivity/Scientific/Math
Url: http://www.openblas.net Url: http://www.openblas.net
Source0: https://github.com/xianyi/OpenBLAS/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Source0: https://github.com/xianyi/OpenBLAS/archive/v%{version}.tar.gz#/%{pname}-%{version}.tar.gz
Source1: README.SUSE Source1: README.SUSE
Source2: README.HPC.SUSE
# PATCH-FIX-UPSTREAM c_xerbla_no-void-return.patch # PATCH-FIX-UPSTREAM c_xerbla_no-void-return.patch
Patch1: c_xerbla_no-void-return.patch Patch1: c_xerbla_no-void-return.patch
# PATCH-FIX-UPSTREAM openblas-noexecstack.patch # PATCH-FIX-UPSTREAM openblas-noexecstack.patch
Patch2: openblas-noexecstack.patch Patch2: openblas-noexecstack.patch
# PATCH-FIX-UPSTREADM fix-arm64-cpuid-return.patch
Patch4: fix-arm64-cpuid-return.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
%if %{without hpc}
BuildRequires: gcc-fortran BuildRequires: gcc-fortran
BuildRequires: update-alternatives BuildRequires: update-alternatives
Requires(post): update-alternatives Requires(post): update-alternatives
Requires(preun): update-alternatives Requires(preun): update-alternatives
%else
BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel
BuildRequires: lua-lmod
BuildRequires: suse-hpc
%global dep_summary %{summary}
%endif
%description %description
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version. OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
%package -n lib%{name}_serial0 %package -n lib%{name}%{?so_v}
Summary: An optimized BLAS library based on GotoBLAS2, serial version Summary: An optimized BLAS library based on GotoBLAS2, %{flavor} version
Group: System/Libraries Group: System/Libraries
%if %{without hpc}
Requires(post): update-alternatives Requires(post): update-alternatives
Requires(preun): update-alternatives Requires(preun): update-alternatives
Obsoletes: lib%{name}0 < %{version} %if "%flavor" == "serial"
Provides: lib%{name}0 = %{version} Obsoletes: lib%{pname}%{so_v} < %{version}
Provides: lib%{pname}%{so_v} = %{version}
%else
Obsoletes: lib%{pname}0
%endif
%if "%flavor" == "pthreads"
Obsoletes: lib%{pname}p0
%endif
%if "%flavor" == "openmp"
Obsoletes: lib%{pname}o0
%endif
%else # with hpc
Requires: lua-lmod
%endif
%description -n lib%{name}_serial0 %description -n lib%{name}%{?so_v}
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version. OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
%package -n lib%{name}_serial-devel %{?with_hpc:%{hpc_master_package -l -L}}
Summary: Development libraries for OpenBLAS, serial version
Group: Development/Libraries/C and C++
Requires: %{name}-devel-headers = %{version}
Requires: lib%{name}_serial0 = %{version}
%description -n lib%{name}_serial-devel %package -n lib%{name}-devel
Summary: Development libraries for OpenBLAS, %{flavor} version
Group: Development/Libraries/C and C++
Requires: lib%{name}%{?so_v} = %{version}
%if %{without hpc}
Requires: %{pname}-devel-headers = %{version}
%else
%hpc_requires_devel
%endif
%description -n lib%{name}-devel
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version. OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains the development libraries for serial OpenBLAS version. This package contains the development libraries for serial OpenBLAS version.
%package -n lib%{name}_openmp0 %{?with_hpc:%{hpc_master_package -l -L devel}}
Summary: An optimized BLAS library based on GotoBLAS2, OpenMP version
Group: System/Libraries
Requires(post): update-alternatives
Requires(preun): update-alternatives
Obsoletes: lib%{name}0
Obsoletes: lib%{name}o0
%description -n lib%{name}_openmp0
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains the library compiled with OpenMP support.
%package -n lib%{name}_openmp-devel
Summary: Development libraries for OpenBLAS, OpenMP version
Group: Development/Libraries/C and C++
Requires: %{name}-devel-headers = %{version}
Requires: lib%{name}_openmp0 = %{version}
%description -n lib%{name}_openmp-devel
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains the development libraries for OpenMP OpenBLAS version.
%package -n lib%{name}_pthreads0
Summary: An optimized BLAS library based on GotoBLAS2, pthreads version
Group: System/Libraries
Requires(post): update-alternatives
Requires(preun): update-alternatives
Obsoletes: lib%{name}0
Obsoletes: lib%{name}p0
%description -n lib%{name}_pthreads0
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains the library compiled with threading support.
%package -n lib%{name}_pthreads-devel
Summary: Development headers and libraries for OpenBLAS, pthreads version
Group: Development/Libraries/C and C++
Requires: %{name}-devel-headers = %{version}
Requires: lib%{name}_pthreads0 = %{version}
%description -n lib%{name}_pthreads-devel
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains the development libraries for pthreads OpenBLAS version.
%package devel
Summary: Development headers and libraries for OpenBLAS
Group: Development/Libraries/C and C++
Requires: %{name}-devel-headers = %{version}
%ifarch %ix86 x86_64
Requires: lib%{name}_pthreads-devel = %{version}
%else
Requires: lib%{name}_openmp-devel = %{version}
%endif
%description devel
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains the development libraries and headers for OpenBLAS.
%package devel-headers
Summary: Development headers for OpenBLAS
Group: Development/Libraries/C and C++
Conflicts: %{name}-devel < %{version}
BuildArch: noarch
%description devel-headers
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains headers for OpenBLAS.
%package devel-static %package devel-static
Summary: Static version of OpenBLAS Summary: Static version of OpenBLAS
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Requires: %{name}-devel = %{version} %if %{without hpc}
Requires: %{pname}-devel = %{version}
%else
Requires: lib%{name}-devel = %{version}
%endif
%description devel-static %description devel-static
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version. OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains the static libraries. This package contains the static libraries.
%prep %package -n %{pname}-devel
%setup -q -c -T Summary: Development headers and libraries for OpenBLAS
Group: Development/Libraries/C and C++
Requires: %{pname}-devel-headers = %{version}
%ifarch %ix86 x86_64
Requires: lib%{pname}_pthreads-devel = %{version}
%else
Requires: lib%{pname}_openmp-devel = %{version}
%endif
# Untar source %description -n %{pname}-devel
tar -zxf %{SOURCE0} OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
cd OpenBLAS-%{version}
%package -n %{pname}-devel-headers
Summary: Development headers for OpenBLAS
Group: Development/Libraries/C and C++
Conflicts: %{pname}-devel < %{version}
BuildArch: noarch
%description -n %{pname}-devel-headers
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
This package contains headers for OpenBLAS.
%prep
%setup -q -n OpenBLAS-%{version}
%patch1 -p1 %patch1 -p1
%patch2 -p1 %patch2 -p1
cd .. %patch4 -p1
# Prepare build for serial, pthreads and OpenMP versions
cp -ar OpenBLAS-%{version} openmp
cp -ar OpenBLAS-%{version} pthreads
mv OpenBLAS-%{version} serial
%if %{without hpc}
cp %{SOURCE1} . cp %{SOURCE1} .
%else
cp %{SOURCE2} .
%endif
%build %build
%if %{with hpc}
%hpc_debug
%hpc_setup_compiler
%endif
# Only x86/x86-64 CPUs support DYNAMIC_ARCH # Only x86/x86-64 CPUs support DYNAMIC_ARCH
%ifarch %ix86 x86_64 %ifarch %ix86 x86_64
%define openblas_target DYNAMIC_ARCH=1 %define openblas_target DYNAMIC_ARCH=1
@ -171,227 +252,206 @@ cp %{SOURCE1} .
%define openblas_target TARGET=ARMV8 %define openblas_target TARGET=ARMV8
%endif %endif
# Make serial, threaded and OpenMP versions # Make serial, threaded and OpenMP versions
make -C serial %{?openblas_target} USE_THREAD=0 USE_OPENMP=0 LIBNAMESUFFIX=serial \ make %{?_smp_mflags} %{?openblas_target} %{?build_flags} \
FC=gfortran CC=gcc COMMON_OPT="%{optflags}" NUM_THREADS=64 V=1 COMMON_OPT="%{optflags}" \
make -C openmp %{?openblas_target} USE_THREAD=1 USE_OPENMP=1 LIBNAMESUFFIX=openmp \ NUM_THREADS=%{num_threads} V=1 \
FC=gfortran CC=gcc COMMON_OPT="%{optflags}" NUM_THREADS=64 V=1 OPENBLAS_LIBRARY_DIR=%{p_libdir} \
make -C pthreads %{?openblas_target} USE_THREAD=1 USE_OPENMP=0 LIBNAMESUFFIX=pthreads \ OPENBLAS_INCLUDE_DIR=%{hpc_includedir} \
FC=gfortran CC=gcc COMMON_OPT="%{optflags}" NUM_THREADS=64 V=1 OPENBLAS_CMAKE_DIR=%{p_cmakedir} \
PREFIX=%{p_prefix} \
%{!?with_hpc:LIBNAMESUFFIX=%flavor FC=gfortran CC=gcc}
%install %install
%if %{with hpc}
%hpc_setup_compiler
%endif
# Install serial library and headers # Install serial library and headers
make -C serial USE_THREAD=0 LIBNAMESUFFIX=serial \ %make_install %{?build_flags} \
OPENBLAS_LIBRARY_DIR=%{buildroot}%{_libdir} \ OPENBLAS_LIBRARY_DIR=%{p_libdir} \
OPENBLAS_INCLUDE_DIR=%{buildroot}%{_includedir}/%{name} \ OPENBLAS_INCLUDE_DIR=%{p_includedir} \
OPENBLAS_CMAKE_DIR=%{buildroot}%{_libdir}/cmake/%{name} \ OPENBLAS_CMAKE_DIR=%{p_cmakedir} \
PREFIX=%{buildroot}%{_prefix} install PREFIX=%{p_prefix} \
%{!?with_hpc:LIBNAMESUFFIX=%flavor}
# Delete info about OBS host cpu
%ifarch %ix86 x86_64
sed -i '/#define OPENBLAS_NEEDBUNDERSCORE/,/#define OPENBLAS_VERSION/{//!d}' \
%{buildroot}%{p_includedir}/openblas_config.h
%endif
%if %{without hpc}
%if 0%{!?build_devel:1}
# We need the includes only once
rm -rf %{buildroot}%{p_includedir}/
rm -rf %{buildroot}%{p_libdir}/cmake/
%else
# Fix cmake config file
sed -i 's|%{buildroot}||g' %{buildroot}%{p_cmakedir}/*.cmake
sed -i 's|_serial||g' %{buildroot}%{p_cmakedir}/*.cmake
%endif
# Put libraries in correct location # Put libraries in correct location
rm -rf %{buildroot}%{_libdir}/lib%{name}* rm -rf %{buildroot}%{p_libdir}/lib%{name}*
# Install the serial library # Install the serial library
install -D -p -m 755 serial/lib%{name}_serial.so %{buildroot}%{_libdir}/lib%{name}_serial.so.0 install -D -p -m 755 lib%{name}.so %{buildroot}%{p_libdir}/lib%{name}.so.0
install -D -p -m 644 serial/lib%{name}_serial.a %{buildroot}%{_libdir}/lib%{name}_serial.a install -D -p -m 644 lib%{name}.a %{buildroot}%{p_libdir}/lib%{name}.a
# Install the OpenMP library
install -D -p -m 755 openmp/lib%{name}_openmp.so %{buildroot}%{_libdir}/lib%{name}_openmp.so.0
install -D -p -m 644 openmp/lib%{name}_openmp.a %{buildroot}%{_libdir}/lib%{name}_openmp.a
# Install the threaded library
install -D -p -m 755 pthreads/lib%{name}_pthreads.so %{buildroot}%{_libdir}/lib%{name}_pthreads.so.0
install -D -p -m 644 pthreads/lib%{name}_pthreads.a %{buildroot}%{_libdir}/lib%{name}_pthreads.a
# Fix source permissions (also applies to LAPACK) # Fix source permissions (also applies to LAPACK)
find -name \*.f -exec chmod 644 {} + find -name \*.f -exec chmod 644 {} +
# Remove pkgconfig file, it can't be configured for different library suffixes we use and, as such, is useless # Remove pkgconfig file, it can't be configured for different library suffixes we use and, as such, is useless
rm -fr %{buildroot}%{_libdir}/pkgconfig/ rm -fr %{buildroot}%{p_libdir}/pkgconfig/
# Dummy target for update-alternatives # Dummy target for update-alternatives
install -d %{buildroot}/%{_sysconfdir}/alternatives install -d %{buildroot}/%{_sysconfdir}/alternatives
ln -s lib%{name}.so.0 %{buildroot}/%{_libdir}/lib%{name}.so.0 ln -s lib%{pname}.so.0 %{buildroot}/%{p_libdir}/lib%{pname}.so.0
ln -s lib%{name}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/lib%{name}.so.0 ln -s lib%{pname}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/lib%{pname}.so.0
ln -s lib%{name}.so.0 %{buildroot}/%{_libdir}/libblas.so.3 ln -s lib%{pname}.so.0 %{buildroot}/%{p_libdir}/libblas.so.3
ln -s lib%{name}.so.0 %{buildroot}/%{_libdir}/libcblas.so.3 ln -s lib%{pname}.so.0 %{buildroot}/%{p_libdir}/libcblas.so.3
ln -s lib%{name}.so.0 %{buildroot}/%{_libdir}/liblapack.so.3 ln -s lib%{pname}.so.0 %{buildroot}/%{p_libdir}/liblapack.so.3
ln -s lib%{name}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/libblas.so.3 ln -s lib%{pname}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/libblas.so.3
ln -s lib%{name}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/libcblas.so.3 ln -s lib%{pname}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/libcblas.so.3
ln -s lib%{name}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/liblapack.so.3 ln -s lib%{pname}.so.0 %{buildroot}/%{_sysconfdir}/alternatives/liblapack.so.3
# Fix symlinks # Fix symlinks
pushd %{buildroot}%{_libdir} pushd %{buildroot}%{p_libdir}
%if 0%{?build_devel}
ln -sf lib%{pname}.so.0 lib%{pname}.so
%endif
ln -sf lib%{name}.so.0 lib%{name}.so ln -sf lib%{name}.so.0 lib%{name}.so
# Serial libraries
ln -sf lib%{name}_serial.so.0 lib%{name}_serial.so
# OpenMP libraries
ln -sf lib%{name}_openmp.so.0 lib%{name}_openmp.so
# Threaded libraries
ln -sf lib%{name}_pthreads.so.0 lib%{name}_pthreads.so
# Fix cmake config file %else # with hpc
sed -i 's|%{buildroot}||g' %{buildroot}%{_libdir}/cmake/%{name}/*.cmake
sed -i 's|_serial||g' %{buildroot}%{_libdir}/cmake/%{name}/*.cmake
# Delete info about OBS host cpu # HPC module file
%ifarch %ix86 x86_64 %hpc_write_modules_files
sed -i '/#define OPENBLAS_NEEDBUNDERSCORE/,/#define OPENBLAS_VERSION/{//!d}' %{buildroot}%{_includedir}/%{name}/openblas_config.h #%%Module1.0#####################################################################
%endif
%post -n lib%{name}_serial0 proc ModulesHelp { } {
puts stderr " "
puts stderr "This module loads the %{pname} library built with the %{compiler_family} compiler toolchain."
puts stderr "\nVersion %{version}\n"
}
module-whatis "Name: %{PNAME} built with %{compiler_family} toolchain"
module-whatis "Version: %{version}"
module-whatis "Category: runtime library"
module-whatis "Description: %{dep_summary}"
module-whatis "%{url}"
set version %{version}
prepend-path LD_LIBRARY_PATH %{p_libdir}
setenv %{hpc_upcase %pname}_DIR %{hpc_prefix}
if {[file isdirectory %{hpc_includedir}]} {
prepend-path LIBRARY_PATH %{hpc_libdir}
prepend-path CPATH %{hpc_includedir}
prepend-path C_INCLUDE_PATH %{hpc_includedir}
prepend-path CPLUS_INCLUDE_PATH %{hpc_includedir}
prepend-path INCLUDE %{hpc_includedir}
%hpc_modulefile_add_pkgconfig_path
setenv %{hpc_upcase %pname}_LIB %{hpc_libdir}
}
family "openblas"
EOF
%{hpc_write_pkgconfig -l %{pname}}
%endif # with hpc
%if %{without hpc}
%post -n lib%{name}%{so_v}
%{_sbindir}/update-alternatives --install \ %{_sbindir}/update-alternatives --install \
%{_libdir}/libblas.so.3 libblas.so.3 %{_libdir}/lib%{name}_serial.so.0 20 %{p_libdir}/libblas.so.3 libblas.so.3 %{p_libdir}/lib%{name}.so.%{so_v} 20
%{_sbindir}/update-alternatives --install \ %{_sbindir}/update-alternatives --install \
%{_libdir}/libcblas.so.3 libcblas.so.3 %{_libdir}/lib%{name}_serial.so.0 20 %{p_libdir}/libcblas.so.3 libcblas.so.3 %{p_libdir}/lib%{name}.so.%{so_v} 20
%{_sbindir}/update-alternatives --install \ %{_sbindir}/update-alternatives --install \
%{_libdir}/liblapack.so.3 liblapack.so.3 %{_libdir}/lib%{name}_serial.so.0 20 %{p_libdir}/liblapack.so.3 liblapack.so.3 %{p_libdir}/lib%{name}.so.%{so_v} 20
%{_sbindir}/update-alternatives --install \ %{_sbindir}/update-alternatives --install \
%{_libdir}/lib%{name}.so.0 lib%{name}.so.0 %{_libdir}/lib%{name}_serial.so.0 20 %{p_libdir}/lib%{pname}.so.%{so_v} lib%{name}.so.%{so_v} %{p_libdir}/lib%{name}.so.%{so_v} %openblas_so_prio
/sbin/ldconfig /sbin/ldconfig
%preun -n lib%{name}_serial0 %preun -n lib%{name}%{so_v}
if [ "$1" = 0 ] ; then if [ "$1" = 0 ] ; then
%{_sbindir}/update-alternatives --remove libblas.so.3 %{_libdir}/lib%{name}_serial.so.0 %{_sbindir}/update-alternatives --remove libblas.so.3 %{p_libdir}/lib%{name}.so.%{so_v}
%{_sbindir}/update-alternatives --remove libcblas.so.3 %{_libdir}/lib%{name}_serial.so.0 %{_sbindir}/update-alternatives --remove libcblas.so.3 %{p_libdir}/lib%{name}.so.%{so_v}
%{_sbindir}/update-alternatives --remove liblapack.so.3 %{_libdir}/lib%{name}_serial.so.0 %{_sbindir}/update-alternatives --remove liblapack.so.3 %{p_libdir}/lib%{name}.so.%{so_v}
%{_sbindir}/update-alternatives --remove lib%{name}.so.0 %{_libdir}/lib%{name}_serial.so.0 %{_sbindir}/update-alternatives --remove lib%{name}.so.0 %{p_libdir}/lib%{name}.so.%{so_v}
fi fi
%postun -n lib%{name}_serial0 -p /sbin/ldconfig %postun -n lib%{name}%{so_v} -p /sbin/ldconfig
%posttrans -n lib%{name}_serial0 %posttrans -n lib%{name}%{so_v}
if [ "$1" = 0 ] ; then if [ "$1" = 0 ] ; then
if ! [ -f %{_libdir}/lib%{name}.so.0 ] ; then if ! [ -f %{p_libdir}/lib%{name}.so.%{so_v} ] ; then
%{_sbindir}/update-alternatives --auto lib%{name}.so.0 %{_sbindir}/update-alternatives --auto lib%{pname}.so.%{so_v}
fi fi
fi fi
%post -n lib%{name}_openmp0
%{_sbindir}/update-alternatives --install \
%{_libdir}/libblas.so.3 libblas.so.3 %{_libdir}/lib%{name}_openmp.so.0 20
%{_sbindir}/update-alternatives --install \
%{_libdir}/libcblas.so.3 libcblas.so.3 %{_libdir}/lib%{name}_openmp.so.0 20
%{_sbindir}/update-alternatives --install \
%{_libdir}/liblapack.so.3 liblapack.so.3 %{_libdir}/lib%{name}_openmp.so.0 20
%{_sbindir}/update-alternatives --install \
%ifarch %ix86 x86_64
%{_libdir}/lib%{name}.so.0 lib%{name}.so.0 %{_libdir}/lib%{name}_openmp.so.0 20
%else %else
%{_libdir}/lib%{name}.so.0 lib%{name}.so.0 %{_libdir}/lib%{name}_openmp.so.0 50
%postun -n lib%{name}
%hpc_module_delete_if_default
%endif %endif
/sbin/ldconfig
%preun -n lib%{name}_openmp0 %if %{without hpc}
if [ "$1" = 0 ] ; then %define libname %name
%{_sbindir}/update-alternatives --remove libblas.so.3 %{_libdir}/lib%{name}_openmp.so.0
%{_sbindir}/update-alternatives --remove libcblas.so.3 %{_libdir}/lib%{name}_openmp.so.0
%{_sbindir}/update-alternatives --remove liblapack.so.3 %{_libdir}/lib%{name}_openmp.so.0
%{_sbindir}/update-alternatives --remove lib%{name}.so.0 %{_libdir}/lib%{name}_openmp.so.0
fi
%postun -n lib%{name}_openmp0 -p /sbin/ldconfig
%posttrans -n lib%{name}_openmp0
if [ "$1" = 0 ] ; then
if ! [ -f %{_libdir}/lib%{name}.so.0 ] ; then
%{_sbindir}/update-alternatives --auto lib%{name}.so.0
fi
fi
%post -n lib%{name}_pthreads0
%{_sbindir}/update-alternatives --install \
%{_libdir}/libblas.so.3 libblas.so.3 %{_libdir}/lib%{name}_pthreads.so.0 20
%{_sbindir}/update-alternatives --install \
%{_libdir}/libcblas.so.3 libcblas.so.3 %{_libdir}/lib%{name}_pthreads.so.0 20
%{_sbindir}/update-alternatives --install \
%{_libdir}/liblapack.so.3 liblapack.so.3 %{_libdir}/lib%{name}_pthreads.so.0 20
%{_sbindir}/update-alternatives --install \
%ifarch %ix86 x86_64
%{_libdir}/lib%{name}.so.0 lib%{name}.so.0 %{_libdir}/lib%{name}_pthreads.so.0 50
%else %else
%{_libdir}/lib%{name}.so.0 lib%{name}.so.0 %{_libdir}/lib%{name}_pthreads.so.0 20 %define libname %pname
%endif %endif
/sbin/ldconfig
%preun -n lib%{name}_pthreads0 %files -n lib%{name}%{?so_v}
if [ "$1" = 0 ] ; then
%{_sbindir}/update-alternatives --remove libblas.so.3 %{_libdir}/lib%{name}_pthreads.so.0
%{_sbindir}/update-alternatives --remove libcblas.so.3 %{_libdir}/lib%{name}_pthreads.so.0
%{_sbindir}/update-alternatives --remove liblapack.so.3 %{_libdir}/lib%{name}_pthreads.so.0
%{_sbindir}/update-alternatives --remove lib%{name}.so.0 %{_libdir}/lib%{name}_pthreads.so.0
fi
%postun -n lib%{name}_pthreads0 -p /sbin/ldconfig
%posttrans -n lib%{name}_pthreads0
if [ "$1" = 0 ] ; then
if ! [ -f %{_libdir}/lib%{name}.so.0 ] ; then
%{_sbindir}/update-alternatives --auto lib%{name}.so.0
fi
fi
%files -n lib%{name}_serial0
%defattr(-,root,root,-) %defattr(-,root,root,-)
%{_libdir}/lib%{name}_serial.so.0 %{p_libdir}/lib%{libname}.so.0
%ghost %{_libdir}/lib%{name}.so.0 %if %{without hpc}
%ghost %{_libdir}/libblas.so.3 %ghost %{p_libdir}/lib%{pname}.so.%{so_v}
%ghost %{_libdir}/libcblas.so.3 %ghost %{p_libdir}/libblas.so.3
%ghost %{_libdir}/liblapack.so.3 %ghost %{p_libdir}/libcblas.so.3
%ghost %{_sysconfdir}/alternatives/lib%{name}.so.0 %ghost %{p_libdir}/liblapack.so.3
%ghost %{_sysconfdir}/alternatives/lib%{pname}.so.%{so_v}
%ghost %{_sysconfdir}/alternatives/libblas.so.3 %ghost %{_sysconfdir}/alternatives/libblas.so.3
%ghost %{_sysconfdir}/alternatives/libcblas.so.3 %ghost %{_sysconfdir}/alternatives/libcblas.so.3
%ghost %{_sysconfdir}/alternatives/liblapack.so.3 %ghost %{_sysconfdir}/alternatives/liblapack.so.3
%else
%hpc_dirs
%{p_libdir}/libopenblas*r*.so
%hpc_modules_files
%endif
%files -n lib%{name}_serial-devel %files -n lib%{name}-devel
%defattr(-,root,root,-) %defattr(-,root,root,-)
%{_libdir}/lib%{name}_serial.so %{p_libdir}/lib%{libname}.so
%if %{with hpc}
%files -n lib%{name}_openmp0 %doc Changelog.txt GotoBLAS* LICENSE README.md README.HPC.SUSE
%defattr(-,root,root,-) %hpc_pkgconfig_file
%{_libdir}/lib%{name}_openmp.so.0 %{p_cmakedir}/
%ghost %{_libdir}/lib%{name}.so.0 %{p_includedir}/
%ghost %{_libdir}/libblas.so.3 %endif
%ghost %{_libdir}/libcblas.so.3
%ghost %{_libdir}/liblapack.so.3
%ghost %{_sysconfdir}/alternatives/lib%{name}.so.0
%ghost %{_sysconfdir}/alternatives/libblas.so.3
%ghost %{_sysconfdir}/alternatives/libcblas.so.3
%ghost %{_sysconfdir}/alternatives/liblapack.so.3
%files -n lib%{name}_openmp-devel
%defattr(-,root,root,-)
%{_libdir}/lib%{name}_openmp.so
%files -n lib%{name}_pthreads0
%defattr(-,root,root,-)
%{_libdir}/lib%{name}_pthreads.so.0
%ghost %{_libdir}/lib%{name}.so.0
%ghost %{_libdir}/libblas.so.3
%ghost %{_libdir}/libcblas.so.3
%ghost %{_libdir}/liblapack.so.3
%ghost %{_sysconfdir}/alternatives/lib%{name}.so.0
%ghost %{_sysconfdir}/alternatives/libblas.so.3
%ghost %{_sysconfdir}/alternatives/libcblas.so.3
%ghost %{_sysconfdir}/alternatives/liblapack.so.3
%files -n lib%{name}_pthreads-devel
%defattr(-,root,root,-)
%{_libdir}/lib%{name}_pthreads.so
%files devel
%defattr(-,root,root,-)
%doc serial/Changelog.txt serial/GotoBLAS* serial/LICENSE serial/README.md README.SUSE
%{_libdir}/lib%{name}.so
%dir %{_libdir}/cmake
%{_libdir}/cmake/%{name}/
%files devel-headers
%defattr(-,root,root,-)
%{_includedir}/%{name}/
%files devel-static %files devel-static
%defattr(-,root,root,-) %defattr(-,root,root,-)
%{_libdir}/lib%{name}_serial.a #%%{p_libdir}/lib%{libname}.a
%{_libdir}/lib%{name}_openmp.a %{p_libdir}/libopenblas*.a
%{_libdir}/lib%{name}_pthreads.a
%if 0%{?build_devel}
%files -n %{pname}-devel
%defattr(-,root,root,-)
%doc Changelog.txt GotoBLAS* LICENSE README.md README.SUSE
%{p_libdir}/libopenblas.so
%dir %{p_libdir}/cmake
%{p_cmakedir}/
%files -n %{pname}-devel-headers
%defattr(-,root,root,-)
%{p_includedir}/
%endif
%changelog %changelog