commit 3552ee45575e631984ae94b5facefcd76b0f4693 Author: AlexZ11 Date: Fri Nov 29 19:37:41 2019 +0800 openblas:Initialize diff --git a/openblas-0.2.15-constructor.patch b/openblas-0.2.15-constructor.patch new file mode 100644 index 0000000..6b6a092 --- /dev/null +++ b/openblas-0.2.15-constructor.patch @@ -0,0 +1,19 @@ +diff -up OpenBLAS-0.2.15/driver/others/memory.c.priority OpenBLAS-0.2.15/driver/others/memory.c +--- OpenBLAS-0.2.15/driver/others/memory.c.priority 2015-10-27 21:44:50.000000000 +0100 ++++ OpenBLAS-0.2.15/driver/others/memory.c 2016-01-13 21:12:01.862225898 +0100 +@@ -146,8 +146,15 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF + #define CONSTRUCTOR __attribute__ ((constructor)) + #define DESTRUCTOR __attribute__ ((destructor)) + #else ++#if __GNUC__ && INIT_PRIORITY && ((GCC_VERSION >= 40300) || (CLANG_VERSION >= 20900)) + #define CONSTRUCTOR __attribute__ ((constructor(101))) + #define DESTRUCTOR __attribute__ ((destructor(101))) ++#elif __GNUC__ && INIT_PRIORITY ++#define CONSTRUCTOR __attribute__ ((constructor)) ++#define DESTRUCTOR __attribute__ ((destructor)) ++#else ++#define CONSTRUCTOR ++#define DESTRUCTOR + #endif + + #ifdef DYNAMIC_ARCH diff --git a/openblas-0.2.15-system_lapack.patch b/openblas-0.2.15-system_lapack.patch new file mode 100644 index 0000000..4b843a9 --- /dev/null +++ b/openblas-0.2.15-system_lapack.patch @@ -0,0 +1,87 @@ +diff -up OpenBLAS-0.2.15/Makefile.system_lapack OpenBLAS-0.2.15/Makefile +--- OpenBLAS-0.2.15/Makefile.system_lapack 2015-10-27 13:44:50.000000000 -0700 ++++ OpenBLAS-0.2.15/Makefile 2015-10-28 09:14:56.696685503 -0700 +@@ -16,11 +16,7 @@ BLASDIRS += reference + endif + + SUBDIRS = $(BLASDIRS) +-ifneq ($(NO_LAPACK), 1) +-SUBDIRS += lapack +-endif +- +-LAPACK_NOOPT := $(filter-out -O0 -O1 -O2 -O3 -Ofast,$(LAPACK_FFLAGS)) ++SUBDIRS += lapack + + SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench + +@@ -211,57 +207,8 @@ hpl_p : + fi; \ + done + +-ifeq ($(NO_LAPACK), 1) + netlib : +- +-else +-netlib : lapack_prebuild +-ifndef NOFORTRAN +- @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib +- @$(MAKE) -C $(NETLIB_LAPACK_DIR) tmglib +-endif +-ifndef NO_LAPACKE +- @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib +-endif +-endif +- +-prof_lapack : lapack_prebuild +- @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapack_prof +- +-lapack_prebuild : +-ifndef NOFORTRAN +- -@echo "FORTRAN = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "OPTS = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "POPTS = $(LAPACK_FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "NOOPT = -O0 $(LAPACK_NOOPT)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "PNOOPT = $(LAPACK_FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "LOADOPTS = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "CC = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "override CFLAGS = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "ARCH = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "ARCHFLAGS = -ru" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "RANLIB = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "LAPACKLIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "TMGLIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "BLASLIB = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "LAPACKELIB = ../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "SUFFIX = $(SUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "PSUFFIX = $(PSUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "CEXTRALIB = $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc +-ifeq ($(FC), gfortran) +- -@echo "TIMER = INT_ETIME" >> $(NETLIB_LAPACK_DIR)/make.inc +-ifdef SMP +- -@echo "LOADER = $(FC) -pthread" >> $(NETLIB_LAPACK_DIR)/make.inc +-else +- -@echo "LOADER = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc +-endif +-else +- -@echo "TIMER = NONE" >> $(NETLIB_LAPACK_DIR)/make.inc +- -@echo "LOADER = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc +-endif +- -@cat make.inc >> $(NETLIB_LAPACK_DIR)/make.inc +-endif ++ @$(MAKE) -C $(NETLIB_LAPACK_DIR) + + large.tgz : + ifndef NOFORTRAN +diff -up OpenBLAS-0.2.15/Makefile.system.system_lapack OpenBLAS-0.2.15/Makefile.system +--- OpenBLAS-0.2.15/Makefile.system.system_lapack 2015-10-27 13:44:50.000000000 -0700 ++++ OpenBLAS-0.2.15/Makefile.system 2015-10-28 09:14:39.994350500 -0700 +@@ -9,7 +9,7 @@ ifndef TOPDIR + TOPDIR = . + endif + +-NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib ++NETLIB_LAPACK_DIR = $(TOPDIR)/netliblapack + + # Default C compiler + # - Only set if not specified on the command line or inherited from the environment. diff --git a/openblas-0.2.5-libname.patch b/openblas-0.2.5-libname.patch new file mode 100644 index 0000000..e30ab8b --- /dev/null +++ b/openblas-0.2.5-libname.patch @@ -0,0 +1,24 @@ +diff -up OpenBLAS-0.2.5/Makefile.system.orig OpenBLAS-0.2.5/Makefile.system +--- OpenBLAS-0.2.5/Makefile.system.orig 2012-11-27 01:24:53.000000000 +0200 ++++ OpenBLAS-0.2.5/Makefile.system 2012-12-24 16:13:57.316689688 +0200 +@@ -758,16 +758,16 @@ ifndef SMP + LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX) + LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX) + else +-LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX) +-LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX) ++LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX) ++LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX) + endif + else + ifndef SMP + LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX) + LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX) + else +-LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX) +-LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX) ++LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX) ++LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX) + endif + endif + diff --git a/openblas-0.3.2-tests.patch b/openblas-0.3.2-tests.patch new file mode 100644 index 0000000..0c75289 --- /dev/null +++ b/openblas-0.3.2-tests.patch @@ -0,0 +1,18 @@ +diff -up OpenBLAS-0.3.2/Makefile.tests OpenBLAS-0.3.2/Makefile +--- OpenBLAS-0.3.2/Makefile.tests 2018-08-02 14:12:01.615117002 +0200 ++++ OpenBLAS-0.3.2/Makefile 2018-08-02 14:13:29.582918971 +0200 +@@ -122,11 +122,11 @@ tests : + ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN))) + touch $(LIBNAME) + ifndef NO_FBLAS +- $(MAKE) -C test all +- $(MAKE) -C utest all ++ $(MAKE) -C test FC="$(FC)" CC="$(CC)" COMMON_OPT="$(COMMON_OPT)" FCOMMON_OPT="$(FCOMMON_OPT)" all ++ $(MAKE) -C utest FC="$(FC)" CC="$(CC)" COMMON_OPT="$(COMMON_OPT)" FCOMMON_OPT="$(FCOMMON_OPT)" all + endif + ifndef NO_CBLAS +- $(MAKE) -C ctest all ++ $(MAKE) -C ctest FC="$(FC)" CC="$(CC)" COMMON_OPT="$(COMMON_OPT)" FCOMMON_OPT="$(FCOMMON_OPT)" all + endif + endif + diff --git a/openblas-0.3.3-tls.patch b/openblas-0.3.3-tls.patch new file mode 100644 index 0000000..38ebefc --- /dev/null +++ b/openblas-0.3.3-tls.patch @@ -0,0 +1,12 @@ +diff -up OpenBLAS-0.3.3/Makefile.rule.tls OpenBLAS-0.3.3/Makefile.rule +--- OpenBLAS-0.3.3/Makefile.rule.tls 2018-08-31 00:07:48.000000000 +0200 ++++ OpenBLAS-0.3.3/Makefile.rule 2018-09-29 19:00:47.804678736 +0200 +@@ -113,7 +113,7 @@ USE_SIMPLE_THREADED_LEVEL3 = 1 + # thread-local storage instead of a central memory buffer in memory.c + # Note that if your system uses GLIBC, it needs to have at least glibc 2.21 + # for this to work. +-USE_TLS = 1 ++#USE_TLS = 1 + + # If you want to drive whole 64bit region by BLAS. Not all Fortran + # compiler supports this. It's safe to keep comment it out if you diff --git a/openblas-0.3.3.tar.gz b/openblas-0.3.3.tar.gz new file mode 100644 index 0000000..a714db3 Binary files /dev/null and b/openblas-0.3.3.tar.gz differ diff --git a/openblas.spec b/openblas.spec new file mode 100644 index 0000000..f44628e --- /dev/null +++ b/openblas.spec @@ -0,0 +1,360 @@ +%bcond_with system_lapack + +Name: openblas +Version: 0.3.3 +Release: 3 +Summary: An optimized BLAS library based on GotoBLAS2 1.13 BSD version +License: BSD +URL: https://github.com/xianyi/OpenBLAS/ +Source0: https://github.com/xianyi/OpenBLAS/archive/v%{version}/openblas-%{version}.tar.gz +Patch0000: openblas-0.2.15-system_lapack.patch +Patch0001: openblas-0.2.5-libname.patch +Patch0002: openblas-0.2.15-constructor.patch +Patch0003: openblas-0.3.2-tests.patch +Patch0004: openblas-0.3.3-tls.patch +Requires: %{name}-devel = %{version}-%{release} +BuildRequires: gcc gcc-gfortran perl-devel + +%if %{with system_lapack} +BuildRequires: lapack-static lapack64-static +%global lapacke 0 +%else +%global lapacke 1 +Provides: bundled(lapack) = 3.8.0 +%endif + +Provides: openblas-serial = %{version}-%{release} openblas-openmp = %{version}-%{release} +Provides: openblas-threads = %{version}-%{release} openblas-serial64 = %{version}-%{release} +Provides: openblas-openmp64 = %{version}-%{release} openblas-threads64 = %{version}-%{release} +Provides: openblas-serial64_ = %{version}-%{release} openblas-openmp64_ = %{version}-%{release} +Provides: openblas-threads64_ = %{version}-%{release} openblas-Rblas = %{version}-%{release} +Provides: openblas-static = %{version}-%{release} +Obsoletes: openblas-serial < %{version}-%{release} openblas-openmp < %{version}-%{release} +Obsoletes: openblas-threads < %{version}-%{release} openblas-serial64 < %{version}-%{release} +Obsoletes: openblas-openmp64 < %{version}-%{release} openblas-threads64 < %{version}-%{release} +Obsoletes: openblas-serial64_ < %{version}-%{release} openblas-openmp64_ < %{version}-%{release} +Obsoletes: openblas-threads64_ < %{version}-%{release} openblas-Rblas < %{version}-%{release} +Obsoletes: openblas-static < %{version}-%{release} + +ExclusiveArch: x86_64 aarch64 + +%description +OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD \ +version. The Lab of Parallel Software and Computationla Science, ISCAS \ +supports this project, see: http://www.rdcps.ac.cn + + +%package devel +Summary: Development headers and libraries for OpenBLAS +Requires: %{name} = %{version}-%{release} %{name}-srpm-macros + +%description devel +This package contains the development headers and libraries for openblas. + +%prep +%setup -q -c +cd OpenBLAS-%{version} +%if %{with system_lapack} +%patch0000 -p1 -b .system_lapack +%endif +%patch0001 -p1 -b .libname +%patch0003 -p1 -b .tests +%patch0004 -p1 -b .tls + +# Set source permissions +find -name \*.f -exec chmod 644 {} \; + +%if %{with system_lapack} +rm -rf lapack-netlib +%endif + +# Make serial, threaded, OpenMP, 64-bit versions +# and an libRblas.so +cd .. +cp -ar OpenBLAS-%{version} openmp +cp -ar OpenBLAS-%{version} threaded +for d in {serial,threaded,openmp}64{,_}; do + cp -ar OpenBLAS-%{version} $d +done +cp -ar OpenBLAS-%{version} Rblas +mv OpenBLAS-%{version} serial + +sed -i 's\.so.$(MAJOR_VERSION)\.so\g' Rblas/Makefile +sed -i 's\.so.$(MAJOR_VERSION)\.so\g' Rblas/exports/Makefile +sed -i 's\@ln -fs $(LIBSONAME) $(LIBPREFIX).so\#@ln -fs $(LIBSONAME) $(LIBPREFIX).so\g' Rblas/Makefile + +%if %{with system_lapack} +mkdir netliblapack +cd netliblapack +ar x %{_libdir}/liblapack_pic.a +for f in laswp getf2 getrf potf2 potrf lauu2 lauum trti2 trtri getrs; do + \rm {c,d,s,z}$f.o +done + +%if %{lapacke} +ar x %{_libdir}/liblapacke.a +%endif + +# Create makefile +echo "TOPDIR = .." > Makefile +echo "include ../Makefile.system" >> Makefile +echo "COMMONOBJS = \\" >> Makefile +for i in *.o; do + echo "$i \\" >> Makefile +done +echo -e "\n\ninclude \$(TOPDIR)/Makefile.tail" >> Makefile + +%if %{lapacke} +# Copy include files +cp -a %{_includedir}/lapacke . +%endif +cd .. + +# Copy in place +for d in serial threaded openmp; do + cp -pr netliblapack $d +done +rm -rf netliblapack + + +# Setup 64-bit interface LAPACK +mkdir netliblapack64 +cd netliblapack64 +ar x %{_libdir}/liblapack64_pic.a +# Get rid of duplicate functions. See list in Makefile of lapack directory +for f in laswp getf2 getrf potf2 potrf lauu2 lauum trti2 trtri getrs; do + \rm {c,d,s,z}$f.o +done + +# LAPACKE, no 64-bit interface +%if %{lapacke} +ar x %{_libdir}/liblapacke.a +%endif + +# Create makefile for 64-bit interface +echo "TOPDIR = .." > Makefile +echo "include ../Makefile.system" >> Makefile +echo "COMMONOBJS = \\" >> Makefile +for i in *.o; do + echo "$i \\" >> Makefile +done +echo -e "\n\ninclude \$(TOPDIR)/Makefile.tail" >> Makefile + +%if %{lapacke} +# Copy include files +cp -a %{_includedir}/lapacke . +%endif +cd .. + +# Copy in place +for d in {serial,threaded,openmp}64{,_}; do + cp -pr netliblapack64 $d/netliblapack +done +rm -rf netliblapack64 +%endif + +%build +%if !%{lapacke} +LAPACKE="NO_LAPACKE=1" +%endif + +# Maximum possible amount of processors +NMAX="NUM_THREADS=128" + +%ifarch x86_64 +TARGET="TARGET=CORE2 DYNAMIC_ARCH=1 DYNAMIC_OLDER=1" +%endif +%ifarch aarch64 +TARGET="TARGET=ARMV8 DYNAMIC_ARCH=0" +%endif + +COMMON="%{optflags} -fPIC" +FCOMMON="%{optflags} -fPIC -frecursive" +# Use Fedora linker flags +export LDFLAGS="%{__global_ldflags}" + +make -C Rblas $TARGET USE_THREAD=0 USEOPENMP=0 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libRblas" LIBSONAME="libRblas.so" $AVX $LAPACKE INTERFACE64=0 + +# Declare some necessary build flags +COMMON="%{optflags} -fPIC" +FCOMMON="$COMMON -frecursive" +make -C serial $TARGET USE_THREAD=0 USE_OPENMP=0 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblas" $AVX $LAPACKE INTERFACE64=0 +make -C threaded $TARGET USE_THREAD=1 USE_OPENMP=0 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblasp" $AVX $LAPACKE INTERFACE64=0 + +# USE_THREAD determines use of SMP, not of pthreads +COMMON="%{optflags} -fPIC -fopenmp -pthread" +FCOMMON="$COMMON -frecursive" +make -C openmp $TARGET USE_THREAD=1 USE_OPENMP=1 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblaso" $AVX $LAPACKE INTERFACE64=0 + +COMMON="%{optflags} -fPIC" +FCOMMON="$COMMON -frecursive -fdefault-integer-8" +make -C serial64 $TARGET USE_THREAD=0 USE_OPENMP=0 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblas64" $AVX $LAPACKE INTERFACE64=1 +make -C threaded64 $TARGET USE_THREAD=1 USE_OPENMP=0 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblasp64" $AVX $LAPACKE INTERFACE64=1 + +COMMON="%{optflags} -fPIC -fopenmp -pthread" +FCOMMON="$COMMON -frecursive -fdefault-integer-8" +make -C openmp64 $TARGET USE_THREAD=1 USE_OPENMP=1 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblaso64" $AVX $LAPACKE INTERFACE64=1 + +COMMON="%{optflags} -fPIC" +FCOMMON="$COMMON -frecursive -fdefault-integer-8" +make -C serial64_ $TARGET USE_THREAD=0 USE_OPENMP=0 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblas64_" $AVX $LAPACKE INTERFACE64=1 SYMBOLSUFFIX=64_ +make -C threaded64_ $TARGET USE_THREAD=1 USE_OPENMP=0 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblasp64_" $AVX $LAPACKE INTERFACE64=1 SYMBOLSUFFIX=64_ + +COMMON="%{optflags} -fPIC -fopenmp -pthread" +FCOMMON="$COMMON -frecursive -fdefault-integer-8" +make -C openmp64_ $TARGET USE_THREAD=1 USE_OPENMP=1 FC=gfortran CC=gcc COMMON_OPT="$COMMON" FCOMMON_OPT="$FCOMMON" $NMAX LIBPREFIX="libopenblaso64_" $AVX $LAPACKE INTERFACE64=1 SYMBOLSUFFIX=64_ + +%install +rm -rf %{buildroot} +# Install serial library and headers +make -C serial USE_THREAD=0 PREFIX=%{buildroot} OPENBLAS_LIBRARY_DIR=%{buildroot}%{_libdir} OPENBLAS_INCLUDE_DIR=%{buildroot}%{_includedir}/%name OPENBLAS_BINARY_DIR=%{buildroot}%{_bindir} OPENBLAS_CMAKE_DIR=%{buildroot}%{_libdir}/cmake install + +# Copy lapacke include files +%if %{with system_lapack} && %{lapacke} +cp -a %{_includedir}/lapacke %{buildroot}%{_includedir}/%{name} +%endif + +# Fix name of libraries +%ifarch aarch64 +suffix="_armv8" +%endif +slibname=`basename %{buildroot}%{_libdir}/libopenblas${suffix}-*.so .so` +mv %{buildroot}%{_libdir}/${slibname}.a %{buildroot}%{_libdir}/lib%{name}.a +if [[ "$suffix" != "" ]]; then + sname=$(echo $slibname | sed "s|$suffix||g") + mv %{buildroot}%{_libdir}/${slibname}.so %{buildroot}%{_libdir}/${sname}.so +else + sname=${slibname} +fi + +# Install the Rblas library +mkdir -p %{buildroot}%{_libdir}/R/lib/ +install -p -m 755 Rblas/libRblas.so %{buildroot}%{_libdir}/R/lib/ + +# Install the OpenMP library +olibname=`echo ${slibname} | sed "s|lib%{name}|lib%{name}o|g"` +install -D -p -m 644 openmp/${olibname}.a %{buildroot}%{_libdir}/lib%{name}o.a +if [[ "$suffix" != "" ]]; then + oname=$(echo $olibname | sed "s|$suffix||g") +else + oname=${olibname} +fi +install -D -p -m 755 openmp/${olibname}.so %{buildroot}%{_libdir}/${oname}.so + +# Install the threaded library +plibname=`echo ${slibname} | sed "s|lib%{name}|lib%{name}p|g"` +install -D -p -m 644 threaded/${plibname}.a %{buildroot}%{_libdir}/lib%{name}p.a +if [[ "$suffix" != "" ]]; then + pname=$(echo $plibname | sed "s|$suffix||g") +else + pname=${plibname} +fi +install -D -p -m 755 threaded/${plibname}.so %{buildroot}%{_libdir}/${pname}.so + +# Install the 64-bit interface libraries + +slibname64=`echo ${slibname} | sed "s|lib%{name}|lib%{name}64|g"` +install -D -p -m 644 serial64/${slibname64}.a %{buildroot}%{_libdir}/lib%{name}64.a +slibname64_=`echo ${slibname} | sed "s|lib%{name}|lib%{name}64_|g"` +install -D -p -m 644 serial64_/${slibname64_}.a %{buildroot}%{_libdir}/lib%{name}64_.a + +if [[ "$suffix" != "" ]]; then + sname64=$(echo ${slibname64} | sed "s|$suffix||g") + sname64_=$(echo ${slibname64_} | sed "s|$suffix||g") +else + sname64=${slibname64} + sname64_=${slibname64_} +fi +install -D -p -m 755 serial64/${slibname64}.so %{buildroot}%{_libdir}/${sname64}.so +install -D -p -m 755 serial64_/${slibname64_}.so %{buildroot}%{_libdir}/${sname64_}.so + +olibname64=`echo ${slibname} | sed "s|lib%{name}|lib%{name}o64|g"` +install -D -p -m 644 openmp64/${olibname64}.a %{buildroot}%{_libdir}/lib%{name}o64.a +olibname64_=`echo ${slibname} | sed "s|lib%{name}|lib%{name}o64_|g"` +install -D -p -m 644 openmp64_/${olibname64_}.a %{buildroot}%{_libdir}/lib%{name}o64_.a + +if [[ "$suffix" != "" ]]; then + oname64=$(echo ${olibname64} | sed "s|$suffix||g") + oname64_=$(echo ${olibname64_} | sed "s|$suffix||g") +else + oname64=${olibname64} + oname64_=${olibname64_} +fi +install -D -p -m 755 openmp64/${olibname64}.so %{buildroot}%{_libdir}/${oname64}.so +install -D -p -m 755 openmp64_/${olibname64_}.so %{buildroot}%{_libdir}/${oname64_}.so + +plibname64=`echo ${slibname} | sed "s|lib%{name}|lib%{name}p64|g"` +install -D -p -m 644 threaded64/${plibname64}.a %{buildroot}%{_libdir}/lib%{name}p64.a +plibname64_=`echo ${slibname} | sed "s|lib%{name}|lib%{name}p64_|g"` +install -D -p -m 644 threaded64_/${plibname64_}.a %{buildroot}%{_libdir}/lib%{name}p64_.a + +if [[ "$suffix" != "" ]]; then + pname64=$(echo $plibname64 | sed "s|$suffix||g") + pname64_=$(echo $plibname64_ | sed "s|$suffix||g") +else + pname64=${plibname64} + pname64_=${plibname64_} +fi +install -D -p -m 755 threaded64/${plibname64}.so %{buildroot}%{_libdir}/${pname64}.so +install -D -p -m 755 threaded64_/${plibname64_}.so %{buildroot}%{_libdir}/${pname64_}.so + +# Fix symlinks +cd %{buildroot}%{_libdir} + +# Serial libraries +ln -sf ${sname}.so lib%{name}.so +ln -sf ${sname}.so lib%{name}.so.0 +# OpenMP libraries +ln -sf ${oname}.so lib%{name}o.so +ln -sf ${oname}.so lib%{name}o.so.0 +# Threaded libraries +ln -sf ${pname}.so lib%{name}p.so +ln -sf ${pname}.so lib%{name}p.so.0 + +# 64bit Serial libraries +ln -sf ${sname64}.so lib%{name}64.so +ln -sf ${sname64}.so lib%{name}64.so.0 +ln -sf ${sname64_}.so lib%{name}64_.so +ln -sf ${sname64_}.so lib%{name}64_.so.0 +# 64bit OpenMP libraries +ln -sf ${oname64}.so lib%{name}o64.so +ln -sf ${oname64}.so lib%{name}o64.so.0 +ln -sf ${oname64_}.so lib%{name}o64_.so +ln -sf ${oname64_}.so lib%{name}o64_.so.0 +# 64bit Threaded libraries +ln -sf ${pname64}.so lib%{name}p64.so +ln -sf ${pname64}.so lib%{name}p64.so.0 +ln -sf ${pname64_}.so lib%{name}p64_.so +ln -sf ${pname64_}.so lib%{name}p64_.so.0 + + +# Get rid of generated CMake config +rm -rf %{buildroot}%{_libdir}/cmake +# Get rid of generated pkgconfig +rm -rf %{buildroot}%{_libdir}/pkgconfig + +%post +/sbin/ldconfig + +%postun +/sbin/ldconfig + +%files +%license serial/LICENSE +%doc serial/Changelog.txt serial/GotoBLAS* +%{_libdir}/lib%{name}*-*.so +%{_libdir}/lib%{name}*.so.* +%{_libdir}/R/lib/libRblas.so +%{_libdir}/lib%{name}*.a + +%files devel +%{_includedir}/%{name}/ +%{_libdir}/lib%{name}.so +%{_libdir}/lib%{name}o.so +%{_libdir}/lib%{name}p.so +%{_libdir}/lib%{name}*64.so +%{_libdir}/lib%{name}*64_.so + +%changelog +* Wed Nov 13 2019 Alex Chao - 0.3.3-3 +- Package init