diff --git a/Makefile.cblas b/Makefile.cblas new file mode 100644 index 0000000..106ad5e --- /dev/null +++ b/Makefile.cblas @@ -0,0 +1,97 @@ +OBJCOPY = objcopy + +ifndef SYMBOLPREFIX +SYMBOLPREFIX = +endif + +clean: + rm -f *.o libcblas.a libcblas.so* + +SLEV1= cblas_srotg.o cblas_srotmg.o cblas_srot.o cblas_srotm.o \ + cblas_sswap.o cblas_sscal.o cblas_scopy.o cblas_saxpy.o \ + cblas_sdot.o cblas_sdsdot.o cblas_snrm2.o cblas_sasum.o \ + cblas_isamax.o sdotsub.o sdsdotsub.o snrm2sub.o sasumsub.o \ + isamaxsub.o + +DLEV1= cblas_drotg.o cblas_drotmg.o cblas_drot.o cblas_drotm.o \ + cblas_dswap.o cblas_dscal.o cblas_dcopy.o cblas_daxpy.o \ + cblas_ddot.o cblas_dsdot.o cblas_dnrm2.o cblas_dasum.o \ + cblas_idamax.o ddotsub.f dsdotsub.o dnrm2sub.o \ + dasumsub.o idamaxsub.o + +CLEV1= cblas_cswap.o cblas_cscal.o cblas_csscal.o cblas_ccopy.o \ + cblas_caxpy.o cblas_cdotu_sub.o cblas_cdotc_sub.o \ + cblas_icamax.o cdotcsub.o cdotusub.o icamaxsub.o + +ZLEV1= cblas_zswap.o cblas_zscal.o cblas_zdscal.o cblas_zcopy.o \ + cblas_zaxpy.o cblas_zdotu_sub.o cblas_zdotc_sub.o cblas_dznrm2.o \ + cblas_dzasum.o cblas_izamax.o zdotcsub.o zdotusub.o \ + dzasumsub.o dznrm2sub.o izamaxsub.o + +SCLEV1= cblas_scasum.o scasumsub.o cblas_scnrm2.o scnrm2sub.o + +SLEV2= cblas_sgemv.o cblas_sgbmv.o cblas_sger.o cblas_ssbmv.o cblas_sspmv.o \ + cblas_sspr.o cblas_sspr2.o cblas_ssymv.o cblas_ssyr.o cblas_ssyr2.o \ + cblas_stbmv.o cblas_stbsv.o cblas_stpmv.o cblas_stpsv.o cblas_strmv.o \ + cblas_strsv.o + +DLEV2= cblas_dgemv.o cblas_dgbmv.o cblas_dger.o cblas_dsbmv.o cblas_dspmv.o \ + cblas_dspr.o cblas_dspr2.o cblas_dsymv.o cblas_dsyr.o cblas_dsyr2.o \ + cblas_dtbmv.o cblas_dtbsv.o cblas_dtpmv.o cblas_dtpsv.o cblas_dtrmv.o \ + cblas_dtrsv.o + +CLEV2= cblas_cgemv.o cblas_cgbmv.o cblas_chemv.o cblas_chbmv.o cblas_chpmv.o \ + cblas_ctrmv.o cblas_ctbmv.o cblas_ctpmv.o cblas_ctrsv.o cblas_ctbsv.o \ + cblas_ctpsv.o cblas_cgeru.o cblas_cgerc.o cblas_cher.o cblas_cher2.o \ + cblas_chpr.o cblas_chpr2.o + +ZLEV2= cblas_zgemv.o cblas_zgbmv.o cblas_zhemv.o cblas_zhbmv.o cblas_zhpmv.o \ + cblas_ztrmv.o cblas_ztbmv.o cblas_ztpmv.o cblas_ztrsv.o cblas_ztbsv.o \ + cblas_ztpsv.o cblas_zgeru.o cblas_zgerc.o cblas_zher.o cblas_zher2.o \ + cblas_zhpr.o cblas_zhpr2.o + +SLEV3= cblas_sgemm.o cblas_ssymm.o cblas_ssyrk.o cblas_ssyr2k.o cblas_strmm.o \ + cblas_strsm.o + +DLEV3= cblas_dgemm.o cblas_dsymm.o cblas_dsyrk.o cblas_dsyr2k.o cblas_dtrmm.o \ + cblas_dtrsm.o + +CLEV3= cblas_cgemm.o cblas_csymm.o cblas_chemm.o cblas_cherk.o \ + cblas_cher2k.o cblas_ctrmm.o cblas_ctrsm.o cblas_csyrk.o \ + cblas_csyr2k.o + +ZLEV3= cblas_zgemm.o cblas_zsymm.o cblas_zhemm.o cblas_zherk.o \ + cblas_zher2k.o cblas_ztrmm.o cblas_ztrsm.o cblas_zsyrk.o \ + cblas_zsyr2k.o + +OBJS= $(SLEV1) $(DLEV1) $(CLEV1) $(ZLEV1) $(SCLEV1) $(SLEV2) $(DLEV2) $(CLEV2) \ + $(ZLEV2) $(SLEV3) $(DLEV3) $(CLEV3) $(ZLEV3) + +static: $(OBJS) +ifeq "$(SYMBOLPREFIX)" "" + ar ruv libcblas.a $(OBJS) + ranlib libcblas.a +else + ar ruv libcblas$(SYMBOLPREFIX).a $(OBJS) + ranlib libcblas$(SYMBOLPREFIX).a + for i in `nm libcblas$(SYMBOLPREFIX).a |grep " T " | awk '{print $$3}'`; do echo "$$i" "64_$$i"; done > cblas-static-prefix.def.dirty + sort -n cblas-static-prefix.def.dirty | uniq > cblas-static-prefix.def + $(OBJCOPY) --redefine-syms cblas-static-prefix.def libcblas$(SYMBOLPREFIX).a libcblas$(SYMBOLPREFIX).a.fixed + rm -rf libcblas$(SYMBOLPREFIX).a + mv libcblas$(SYMBOLPREFIX).a.fixed libcblas$(SYMBOLPREFIX).a +endif + +shared: $(OBJS) +ifeq "$(SYMBOLPREFIX)" "" + # No renaming needed + cc $(CFLAGS) -shared -Wl,-soname,libcblas.so.@SHORTVER@ -o libcblas.so.@LONGVER@ $(OBJS) -L../../ -lblas -lm -lgfortran -lc +else + cc $(CFLAGS) -shared -Wl,-soname,libcblas$(SYMBOLPREFIX).so.@SHORTVER@ -o libcblas$(SYMBOLPREFIX).so.@LONGVER@ $(OBJS) -L../.. -lblas -lm -lgfortran -lc + # generate a list of all symbols in shared library and rename with SYMBOLPREFIX + for i in `readelf -Ws libcblas$(SYMBOLPREFIX).so.@LONGVER@ | awk '{print $$8}' | grep -v GLIBC |grep -v GFORTRAN |grep -v "Name" `; do echo "$$i" "64_$$i"; done > cblas-prefix.def.dirty + sort -n cblas-prefix.def.dirty | uniq > cblas-prefix.def + $(OBJCOPY) --redefine-syms cblas-prefix.def libcblas$(SYMBOLPREFIX).so.@LONGVER@ libcblas$(SYMBOLPREFIX).so.@LONGVER@.fixed + rm -rf libcblas$(SYMBOLPREFIX).so.@LONGVER@ + mv libcblas$(SYMBOLPREFIX).so.@LONGVER@.fixed libcblas$(SYMBOLPREFIX).so.@LONGVER@ +endif + diff --git a/lapack.spec b/lapack.spec index 87341c0..6436a82 100644 --- a/lapack.spec +++ b/lapack.spec @@ -10,7 +10,7 @@ Summary: Numerical linear algebra package libraries Name: lapack Version: %{mediumver}.0 -Release: 2%{?dist} +Release: 3%{?dist} License: BSD Group: System Environment/Libraries URL: http://www.netlib.org/lapack/ @@ -20,6 +20,7 @@ Source2: Makefile.blas Source3: Makefile.lapack Source4: http://www.netlib.org/lapack/lapackqref.ps Source5: http://www.netlib.org/blas/blasqr.ps +Source6: Makefile.cblas Patch3: lapack-3.7.1-make.inc.patch Patch4: lapack-3.7.1-lapacke-shared.patch Patch5: lapack-3.4.1-lapacke-disable-testing-functions.patch @@ -164,13 +165,16 @@ mv man/ manpages/ cp -f INSTALL/make.inc.gfortran make.inc cp -f %{SOURCE2} BLAS/SRC/Makefile cp -f %{SOURCE3} SRC/Makefile +cp -f %{SOURCE6} CBLAS/src/Makefile sed -i "s|@SHORTVER@|%{shortver}|g" BLAS/SRC/Makefile sed -i "s|@SHORTVER@|%{shortver}|g" SRC/Makefile sed -i "s|@SHORTVER@|%{shortver}|g" LAPACKE/Makefile +sed -i "s|@SHORTVER@|%{shortver}|g" CBLAS/src/Makefile sed -i "s|@LONGVER@|%{version}|g" BLAS/SRC/Makefile sed -i "s|@LONGVER@|%{version}|g" SRC/Makefile sed -i "s|@LONGVER@|%{version}|g" LAPACKE/Makefile +sed -i "s|@LONGVER@|%{version}|g" CBLAS/src/Makefile %build RPM_OPT_FLAGS="$RPM_OPT_FLAGS -frecursive" @@ -203,6 +207,29 @@ ln -s libblas.so.%{version} libblas.so ln -s libblas64_.so.%{version} libblas64_.so %endif +# Build CBLAS +cp CBLAS/include/cblas_mangling_with_flags.h.in CBLAS/include/cblas_mangling.h +pushd CBLAS/src +FFLAGS="$RPM_OPT_FLAGS" CFLAGS="$RPM_OPT_FLAGS -I../include" make static +cp libcblas.a ${RPM_BUILD_DIR}/%{name}-%{version}/ +make clean +FFLAGS="$RPM_OPT_FLAGS -fPIC" CFLAGS="$RPM_OPT_FLAGS -fPIC -I../include" make shared +cp libcblas.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/ +%if 0%{?arch64} +make clean +SYMBOLPREFIX="64_" FFLAGS="$RPM_OPT_FLAGS -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -I../include" make static +cp libcblas64_.a ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64_.a +make clean +SYMBOLPREFIX="64_" FFLAGS="$RPM_OPT_FLAGS -fPIC -fdefault-integer-8" CFLAGS="$RPM_OPT_FLAGS -fPIC -I../include" make shared +cp libcblas64_.so.%{version} ${RPM_BUILD_DIR}/%{name}-%{version}/libcblas64_.so.%{version} +%endif +popd + +ln -s libcblas.so.%{version} libcblas.so +%if 0%{?arch64} +ln -s libcblas64_.so.%{version} libcblas64_.so +%endif + # Build the static dlamch, dsecnd, lsame, second, slamch bits pushd INSTALL make NOOPT="$RPM_OPT_O_FLAGS" OPTS="$RPM_OPT_FLAGS" @@ -305,12 +332,12 @@ mkdir -p ${RPM_BUILD_ROOT}%{_libdir} mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man3 chmod 755 ${RPM_BUILD_ROOT}%{_mandir}/man3 -for f in liblapack.so.%{version} libblas.so.%{version} liblapacke.so.%{version} libblas.a liblapack.a liblapack_pic.a liblapacke.a; do +for f in liblapack.so.%{version} libblas.so.%{version} libcblas.so.%{version} liblapacke.so.%{version} libblas.a libcblas.a liblapack.a liblapack_pic.a liblapacke.a; do cp -f $f ${RPM_BUILD_ROOT}%{_libdir}/$f done %if 0%{?arch64} -for f in liblapack64_.so.%{version} libblas64_.so.%{version} libblas64_.a liblapack64_.a liblapack64_pic.a; do +for f in liblapack64_.so.%{version} libblas64_.so.%{version} libcblas64_.so.%{version} libblas64_.a libcblas64_.a liblapack64_.a liblapack64_pic.a; do cp -f $f ${RPM_BUILD_ROOT}%{_libdir}/$f done %endif @@ -365,17 +392,24 @@ find manpages/man/man3 -type f -printf "%{_mandir}/man3/%f*\n" > lapackmans cp -f manpages/blas/man/man3/* ${RPM_BUILD_ROOT}%{_mandir}/man3 cp -f manpages/man/man3/* ${RPM_BUILD_ROOT}%{_mandir}/man3 +# Cblas headers +mkdir -p %{buildroot}%{_includedir}/cblas/ +cp -a CBLAS/include/*.h %{buildroot}%{_includedir}/cblas/ + # Lapacke headers mkdir -p %{buildroot}%{_includedir}/lapacke/ cp -a LAPACKE/include/*.h %{buildroot}%{_includedir}/lapacke/ -cd ${RPM_BUILD_ROOT}%{_libdir} +pushd ${RPM_BUILD_ROOT}%{_libdir} ln -sf liblapack.so.%{version} liblapack.so ln -sf liblapack.so.%{version} liblapack.so.%{shortver} ln -sf liblapack.so.%{version} liblapack.so.%{mediumver} ln -sf libblas.so.%{version} libblas.so ln -sf libblas.so.%{version} libblas.so.%{shortver} ln -sf libblas.so.%{version} libblas.so.%{mediumver} +ln -sf libcblas.so.%{version} libcblas.so +ln -sf libcblas.so.%{version} libcblas.so.%{shortver} +ln -sf libcblas.so.%{version} libcblas.so.%{mediumver} ln -sf liblapacke.so.%{version} liblapacke.so ln -sf liblapacke.so.%{version} liblapacke.so.%{shortver} ln -sf liblapacke.so.%{version} liblapacke.so.%{mediumver} @@ -386,7 +420,38 @@ ln -sf liblapack64_.so.%{version} liblapack64_.so.%{mediumver} ln -sf libblas64_.so.%{version} libblas64_.so ln -sf libblas64_.so.%{version} libblas64_.so.%{shortver} ln -sf libblas64_.so.%{version} libblas64_.so.%{mediumver} +ln -sf libcblas64_.so.%{version} libcblas64_.so +ln -sf libcblas64_.so.%{version} libcblas64_.so.%{shortver} +ln -sf libcblas64_.so.%{version} libcblas64_.so.%{mediumver} %endif +popd + +# pkgconfig +mkdir -p %{buildroot}%{_libdir}/pkgconfig/ +cp -a lapack.pc.in %{buildroot}%{_libdir}/pkgconfig/lapack.pc +sed -i 's|@CMAKE_INSTALL_FULL_LIBDIR@|%{_libdir}|g' %{buildroot}%{_libdir}/pkgconfig/lapack.pc +sed -i 's|@CMAKE_INSTALL_FULL_INCLUDEDIR@|%{_includedir}|g' %{buildroot}%{_libdir}/pkgconfig/lapack.pc +sed -i 's|@LAPACK_VERSION@|%{version}|g' %{buildroot}%{_libdir}/pkgconfig/lapack.pc +cp -a %{buildroot}%{_libdir}/pkgconfig/lapack.pc %{buildroot}%{_libdir}/pkgconfig/lapack64.pc +sed -i 's|-llapack|-llapack64_|g' %{buildroot}%{_libdir}/pkgconfig/lapack64.pc +sed -i 's|blas|blas64|g' %{buildroot}%{_libdir}/pkgconfig/lapack64.pc +cp -a BLAS/blas.pc.in %{buildroot}%{_libdir}/pkgconfig/blas.pc +sed -i 's|@CMAKE_INSTALL_FULL_LIBDIR@|%{_libdir}|g' %{buildroot}%{_libdir}/pkgconfig/blas.pc +sed -i 's|@CMAKE_INSTALL_FULL_INCLUDEDIR@|%{_includedir}|g' %{buildroot}%{_libdir}/pkgconfig/blas.pc +sed -i 's|@LAPACK_VERSION@|%{version}|g' %{buildroot}%{_libdir}/pkgconfig/blas.pc +cp -a %{buildroot}%{_libdir}/pkgconfig/blas.pc %{buildroot}%{_libdir}/pkgconfig/blas64.pc +sed -i 's|-lblas|-lblas64_|g' %{buildroot}%{_libdir}/pkgconfig/blas64.pc +cp -a LAPACKE/lapacke.pc.in %{buildroot}%{_libdir}/pkgconfig/lapacke.pc +sed -i 's|@CMAKE_INSTALL_FULL_LIBDIR@|%{_libdir}|g' %{buildroot}%{_libdir}/pkgconfig/lapacke.pc +sed -i 's|@CMAKE_INSTALL_FULL_INCLUDEDIR@|%{_includedir}/lapacke|g' %{buildroot}%{_libdir}/pkgconfig/lapacke.pc +sed -i 's|@LAPACK_VERSION@|%{version}|g' %{buildroot}%{_libdir}/pkgconfig/lapacke.pc +cp -a CBLAS/cblas.pc.in %{buildroot}%{_libdir}/pkgconfig/cblas.pc +sed -i 's|@CMAKE_INSTALL_FULL_LIBDIR@|%{_libdir}|g' %{buildroot}%{_libdir}/pkgconfig/cblas.pc +sed -i 's|@CMAKE_INSTALL_FULL_INCLUDEDIR@|%{_includedir}/cblas|g' %{buildroot}%{_libdir}/pkgconfig/cblas.pc +sed -i 's|@LAPACK_VERSION@|%{version}|g' %{buildroot}%{_libdir}/pkgconfig/cblas.pc +cp -a %{buildroot}%{_libdir}/pkgconfig/cblas.pc %{buildroot}%{_libdir}/pkgconfig/cblas64.pc +sed -i 's|-lcblas|-lcblas64_|g' %{buildroot}%{_libdir}/pkgconfig/cblas64.pc +sed -i 's|Requires.private: blas|Requires.private: blas64|g' %{buildroot}%{_libdir}/pkgconfig/cblas64.pc %post -p /sbin/ldconfig @@ -415,6 +480,8 @@ ln -sf libblas64_.so.%{version} libblas64_.so.%{mediumver} %{_includedir}/lapacke/ %{_libdir}/liblapack.so %{_libdir}/liblapacke.so +%{_libdir}/pkgconfig/lapack.pc +%{_libdir}/pkgconfig/lapacke.pc %files static %{_libdir}/liblapack.a @@ -424,23 +491,34 @@ ln -sf libblas64_.so.%{version} libblas64_.so.%{mediumver} %files -n blas -f blasmans %doc blasqr.ps LICENSE %{_libdir}/libblas.so.* +%{_libdir}/libcblas.so.* %files -n blas-devel +%{_includedir}/cblas/ %{_libdir}/libblas.so +%{_libdir}/libcblas.so +%{_libdir}/pkgconfig/blas.pc +%{_libdir}/pkgconfig/cblas.pc %files -n blas-static %{_libdir}/libblas.a +%{_libdir}/libcblas.a %if 0%{?arch64} %files -n blas64 %doc LICENSE %{_libdir}/libblas64_.so.* +%{_libdir}/libcblas64_.so.* %files -n blas64-devel %{_libdir}/libblas64_.so +%{_libdir}/libcblas64_.so +%{_libdir}/pkgconfig/blas64.pc +%{_libdir}/pkgconfig/cblas64.pc %files -n blas64-static %{_libdir}/libblas64_.a +%{_libdir}/libcblas64_.a %files -n lapack64 %doc README.md LICENSE @@ -448,6 +526,7 @@ ln -sf libblas64_.so.%{version} libblas64_.so.%{mediumver} %files -n lapack64-devel %{_libdir}/liblapack64_.so +%{_libdir}/pkgconfig/lapack64.pc %files -n lapack64-static %{_libdir}/liblapack64_.a @@ -455,6 +534,10 @@ ln -sf libblas64_.so.%{version} libblas64_.so.%{mediumver} %endif %changelog +* Mon Dec 4 2017 Tom Callaway - 3.8.0-3 +- build cblas +- include pkgconfig files. + * Fri Nov 17 2017 Tom Callaway - 3.8.0-2 - add ilaenv2stage