Hi Gentoo devs,

I redesigned the solution for BLAS/LAPACK runtime switching.
New solution is based on eselect+ld.so.conf . See following.

> Goal
> ----
> 
>   * When a program is linked against libblas.so or liblapack.so
>     provided by any BLAS/LAPACK provider, the eselect-based solution
>     will allow user to switch the underlying library without recompiling
>     anything.

Instead of manipulating symlinks, I wrote a dedicated eselect module
for BLAS:

https://github.com/cdluminate/my-overlay/blob/master/app-eselect/eselect-blas/files/blas.eselect-0.2

This implementation will generate a corresponding ld.so.conf file
on switching and refresh ld.so cache.

advantages:

1. not longer manipulates symlinks under package manager directory,
   see https://bugs.gentoo.org/531842 and https://bugs.gentoo.org/632624

2. we don't have to think about static lib and header switching like
   Debian does.

>   * When a program is linked against a specific implementation, e.g.
>     libmkl_rt.so, the solution doesn't break anything.

This still holds with the new solution.

> Solution
> --------
> 
> Similar to Debian's update-alternatives mechanism, Gentoo's eselect
> is good at dealing with drop-in replacements as well. My preliminary

The redesigned solution totally diverted from Debian's solution.

* sci-libs/lapack provides standard API and ABI for BLAS/CBLAS/LAPACK
  and LAPACKE. It provides a default set of libblas.so, libcblas.so,
  and liblapack.so . Reverse dependencies linked against the three
  libraries (reference blas) will take advantage of the runtime
  switching mechanism through USE="virtual-blas virtual-lapack".
  Reverse dependencies linked to specific implementations such as
  libopenblas.so won't be affected at all.

* every non-standard BLAS/LAPACK implementations could be registered
  as alternatives via USE="virtual-blas virtual-lapack". Once the
  virtual-* flags are toggled, the ebuild file will build some
  extra shared objects with correct SONAME.

  For example:

  /usr/lib64/libblis.so.2 (SONAME=libblis.so.2, general purpose)
  /usr/lib64/blas/blis/libblas.so.3 (USE="virtual-blas",
SONAME=libblas.so.3)
  /usr/lib64/blas/blis/libcblas.so.3 (USE="virtual-blas",
SONAME=libcblas.so.3)

* Reverse dependencies of BLAS/LAPACK could optionally provide the
  "virtual-blas virtual-lapack" USE flags.

  if use virtual-*:
      link against reference blas/lapack
  else:
      link against whatever the ebuild maintainer like and get rid
      of the switching mechanism

> Proposed Changes
> ----------------
> 
> 1. Deprecate sci-libs/{blas,cblas,lapack,lapacke}-reference from gentoo
>    main repo. They use exactly the same source tarball. It's not quite
>    helpful to package these components in a fine-grained manner. A
> single
>    sci-libs/lapack package is enough.

sci-libs/{blas,cblas,lapack,lapacke}::gentoo should be deprecated. They
are based on exactly the same source tarball, and maintaining 4 ebuild
files for a single tarball is not a good choice IHMO. Those old ebuild
files seems to leverage the flexibility of upstream build system
because it enables one to, for example, skip the reference blas build
and use an existing optimized BLAS impelementation and hence introduce
flexibility. That flexibility is hard to maintain and is not necessary
anymore with the new runtime switching mechanism.

That's why I propose to merge the 4 ebuild into a single one:
sci-libs/lapack. We don't need to add the "reference" postfix
because no upstream will loot the name "lapack". When talking
about "lapack" it's always the reference implementation.

> 2. Merge the "cblas" eselect unit into "blas" unit. It is potentially
>    harmful when "blas" and "cblas" point to different implementations.
>    That means "app-eselect/eselect-cblas" should be deprecated.

eselect-cblas should be deprecated. That affects gsl because it is
registered as an cblas alternative. gsl doesn't provide the standard
BLAS (fortran) API+ABI so it will not be added as a runtime switching
candidate.

Does this redesinged solution look acceptable now?

Best,
Mo.

Reply via email to