[Bug 257400] science/py-scipy Add OPTION for Atlas blas

From: <bugzilla-noreply_at_freebsd.org>
Date: Fri, 11 Mar 2022 22:34:56 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=257400

alt2600@icloud.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #229421|0                           |1
        is obsolete|                            |

--- Comment #11 from alt2600@icloud.com ---
Created attachment 232395
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=232395&action=edit
git-diff-py-scipy-atlas-rev3.diff

with the 1.8.0 py-scipy release it has become trivially easy to support
multiple BLAS libraries, no more janky hacks adapted from py-numpy are
necessary. As I have heard no feedback in months on if this patch will be
accepted or not this will be the last time I update it for new versions of
py-scipy. At this point I'll just make it work for myself as need arises, and
if anyone else wants it this diff will show the basics, but essentially it just
takes a single radio that either uses blaslapack:atlas, for atlas, or uses the
lib depends on blas and openblas for openblas. In principal this should work
with netlib, but it you have atlas it will be chosen over netlib so I didnt
implement, but uses blaslapack should make it work fine if you do not have
openblas nor atlas installed. I kept OPENBLAS the default, despite it being
conflicting and not the default blas library for ports, as that is what it is
now.

for those looking in the future you can enable options like this

delete the LIB_DEPENDS line referencing blas and openblas and add this or just
add blaslapack:atlas to the USES line after deleting the LIB_DEPENDS line and
its ATLAS only for you.


OPTIONS_DEFAULT= OPENBLAS
OPTIONS_SINGLE=         BLASLIB
OPTIONS_SINGLE_BLASLIB= ATLAS OPENBLAS
ATLAS_USES=             blaslapack:atlas
OPENBLAS_LIB_DEPENDS=   libblas.so:math/blas \
                        libopenblas.so:math/openblas

tweak your default if you want or make sure to use OPTION_SET and OPTION_UNSET
using ports.conf if using portconf

== OPENBLAS OPTION configure snippet
lapack_opt_info:
lapack_mkl_info:
customize UnixCCompiler
C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG
-O2 -pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -O2
-pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -fPIC

creating /tmp/tmpnwlzq1iw/tmp
creating /tmp/tmpnwlzq1iw/tmp/tmpnwlzq1iw
compile options: '-MMD -MF /tmp/tmpnwlzq1iw/file.c.d -c'
cc: /tmp/tmpnwlzq1iw/file.c
  libraries mkl_rt not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

openblas_lapack_info:
C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG
-O2 -pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -O2
-pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -fPIC

creating /tmp/tmpavviamb0/tmp
creating /tmp/tmpavviamb0/tmp/tmpavviamb0
compile options: '-c'
cc: /tmp/tmpavviamb0/source.c
cc /tmp/tmpavviamb0/tmp/tmpavviamb0/source.o -L/usr/local/lib
-L/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../
-lopenblas -lgfortran -o /tmp/tmpavviamb0/a.out
  FOUND:
    libraries = ['openblas', 'gfortran', 'openblas', 'gfortran']
    library_dirs = ['/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

  FOUND:
    libraries = ['openblas', 'gfortran', 'openblas', 'gfortran']
    library_dirs = ['/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

blas_opt_info:
blas_mkl_info:
  libraries mkl_rt not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

blis_info:
  libraries blis not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

openblas_info:
C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG
-O2 -pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -O2
-pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -fPIC

creating /tmp/tmpofuclsmh/tmp
creating /tmp/tmpofuclsmh/tmp/tmpofuclsmh
compile options: '-c'
cc: /tmp/tmpofuclsmh/source.c
cc /tmp/tmpofuclsmh/tmp/tmpofuclsmh/source.o -L/usr/local/lib
-L/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../
-lopenblas -lgfortran -o /tmp/tmpofuclsmh/a.out
  FOUND:
    libraries = ['openblas', 'gfortran', 'openblas', 'gfortran']
    library_dirs = ['/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

  FOUND:
    libraries = ['openblas', 'gfortran', 'openblas', 'gfortran']
    library_dirs = ['/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

non-existing path in 'scipy/signal/windows': 'tests'
non-existing path in 'scipy/sparse': 'sparsetools/sparsetools_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/bsr_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/csc_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/csr_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/other_impl.h'
[makenpz] scipy/special/tests/data/boost.npz not rebuilt
[makenpz] scipy/special/tests/data/gsl.npz not rebuilt
[makenpz] scipy/special/tests/data/local.npz not rebuilt
running config

===OPENBLAS OPTION check-orphans
====> Checking for pkg-plist issues (check-plist)
===> Parsing plist
===> Checking for items in STAGEDIR missing from pkg-plist
===> Checking for items in pkg-plist which are not in STAGEDIR
===> No pkg-plist issues found (check-plist)


===OPENBLAS OPTION pkg info -d
py38-scipy-1.8.0
Depends on     :
        py38-numpy-1.20.3,1
        openblas-0.3.18,1
        blas-3.10.0
        python38-3.8.12_2
        gcc10-10.3.0
        py38-setuptools-57.0.0


===ATLAS OPTION configure snippet
lapack_opt_info:
lapack_mkl_info:
customize UnixCCompiler
C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG
-O2 -pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -O2
-pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -fPIC

creating /tmp/tmppkk1xmzc/tmp
creating /tmp/tmppkk1xmzc/tmp/tmppkk1xmzc
compile options: '-MMD -MF /tmp/tmppkk1xmzc/file.c.d -c'
cc: /tmp/tmppkk1xmzc/file.c
  libraries mkl_rt not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

openblas_lapack_info:
  libraries openblas not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

openblas_clapack_info:
  libraries openblas,lapack not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

flame_info:
  libraries flame not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

atlas_3_10_threads_info:
Setting PTATLAS=ATLAS
  libraries lapack_atlas not found in /usr/lib
  libraries ptf77blas,ptcblas not found in /usr/lib
  libraries lapack_atlas not found in /usr/local/lib
<class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
Setting PTATLAS=ATLAS
get_default_fcompiler: matching types: '['gnu', 'gnu95']'
customize GnuFCompiler
Found executable /usr/local/bin/gfortran10
gnu: no Fortran 90 compiler found
Could not locate executable cc -shared
Found executable /usr/local/bin/ld
Found executable /usr/local/bin/ar
Found executable /usr/local/bin/ranlib
gnu: no Fortran 90 compiler found
customize Gnu95FCompiler
customize Gnu95FCompiler
customize Gnu95FCompiler using config
compiling '_configtest.c':

/* This file is generated from numpy/distutils/system_info.py */
void ATL_buildinfo(void);
int main(void) {
  ATL_buildinfo();
  return 0;
}

C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG
-O2 -pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -O2
-pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -fPIC

compile options: '-c'
cc: _configtest.c
cc _configtest.o -L/usr/local/lib -lptf77blas -lptcblas -o _configtest
ld: error: undefined symbol: ATL_buildinfo
>>> referenced by _configtest.c
>>>               _configtest.o:(main)
cc: error: linker command failed with exit code 1 (use -v to see invocation)
failure.
removing: _configtest.c _configtest.o _configtest.o.d
Status: 255
Output: compiling '_configtest.c':

/* This file is generated from numpy/distutils/system_info.py */
void ATL_buildinfo(void);
int main(void) {
  ATL_buildinfo();
  return 0;
}

C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG
-O2 -pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -O2
-pipe -march=westmere -fstack-protector-strong -fno-strict-aliasing -fPIC

compile options: '-c'
cc: _configtest.c
cc _configtest.o -L/usr/local/lib -lptf77blas -lptcblas -o _configtest

Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
  libraries tatlas not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
Library tatlas was not found. Ignoring
  FOUND:
    include_dirs = ['/usr/local/include']
    language = f77
    libraries = ['alapack', 'ptf77blas', 'ptcblas']
    library_dirs = ['/usr/local/lib']

  FOUND:
    include_dirs = ['/usr/local/include']
    language = f77
    libraries = ['alapack', 'ptf77blas', 'ptcblas']
    library_dirs = ['/usr/local/lib']

blas_opt_info:
blas_mkl_info:
  libraries mkl_rt not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

blis_info:
  libraries blis not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

openblas_info:
  libraries openblas not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

atlas_3_10_blas_threads_info:
Setting PTATLAS=ATLAS
  libraries tatlas not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

atlas_3_10_blas_info:
  libraries satlas not found in ['/usr/lib', '/usr/local/lib',
'/usr/local/lib/gcc10/gcc/x86_64-portbld-freebsd13.0/10.3.0/../../../']
  NOT AVAILABLE

atlas_blas_threads_info:
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
Setting PTATLAS=ATLAS
  FOUND:
    include_dirs = ['/usr/local/include']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
    libraries = ['ptf77blas', 'ptcblas', 'ptf77blas', 'ptcblas']
    library_dirs = ['/usr/local/lib']

  FOUND:
    include_dirs = ['/usr/local/include']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
    libraries = ['ptf77blas', 'ptcblas', 'ptf77blas', 'ptcblas']
    library_dirs = ['/usr/local/lib']

non-existing path in 'scipy/signal/windows': 'tests'
non-existing path in 'scipy/sparse': 'sparsetools/sparsetools_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/bsr_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/csc_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/csr_impl.h'
non-existing path in 'scipy/sparse': 'sparsetools/other_impl.h'
[makenpz] scipy/special/tests/data/boost.npz not rebuilt
[makenpz] scipy/special/tests/data/gsl.npz not rebuilt
[makenpz] scipy/special/tests/data/local.npz not rebuilt
running config


===ATLAS OPTION check-orphans
====> Checking for pkg-plist issues (check-plist)
===> Parsing plist
===> Checking for items in STAGEDIR missing from pkg-plist
===> Checking for items in pkg-plist which are not in STAGEDIR
===> No pkg-plist issues found (check-plist)


===ATLAS OPTION pkg info -d
py38-scipy-1.8.0:
        py38-numpy-1.20.3,1
        atlas-math-3.8.4_18,1
        python38-3.8.12_2
        gcc10-10.3.0
        py38-setuptools-57.0.0

-- 
You are receiving this mail because:
You are the assignee for the bug.
You are on the CC list for the bug.