diff --git a/doc/languages-frameworks/python.section.md b/doc/languages-frameworks/python.section.md
index f8884785e90..e6f0b64fa9c 100644
--- a/doc/languages-frameworks/python.section.md
+++ b/doc/languages-frameworks/python.section.md
@@ -1290,32 +1290,9 @@ self: super: {
### How to use Intel's MKL with numpy and scipy?
-A `site.cfg` is created that configures BLAS based on the `blas` parameter of
-the `numpy` derivation. By passing in `mkl`, `numpy` and packages depending on
-`numpy` will be built with `mkl`.
-
-The following is an overlay that configures `numpy` to use `mkl`:
-
-```nix
-self: super: {
- python37 = super.python37.override {
- packageOverrides = python-self: python-super: {
- numpy = python-super.numpy.override {
- blas = super.pkgs.mkl;
- };
- };
- };
-}
-```
-
-`mkl` requires an `openmp` implementation when running with multiple processors.
-By default, `mkl` will use Intel's `iomp` implementation if no other is
-specified, but this is a runtime-only dependency and binary compatible with the
-LLVM implementation. To use that one instead, Intel recommends users set it with
-`LD_PRELOAD`.
-
-Note that `mkl` is only available on `x86_64-{linux,darwin}` platforms;
-moreover, Hydra is not building and distributing pre-compiled binaries using it.
+MKL can be configured using an overlay. See the section “[Using
+overlays to configure
+alternatives](#sec-overlays-alternatives-blas-lapack)”.
### What inputs do `setup_requires`, `install_requires` and `tests_require` map to?
diff --git a/doc/using/overlays.xml b/doc/using/overlays.xml
index 7732e0ac217..5f808839dd0 100644
--- a/doc/using/overlays.xml
+++ b/doc/using/overlays.xml
@@ -177,7 +177,7 @@ self: super:
Intel
- MKL (only works on x86 architecture)
+ MKL (only works on x86 architecture, unfree)
The Nixpkgs attribute is mkl.
@@ -211,6 +211,44 @@ self: super:
using LD_PRELOAD of libblas.so.3 and
liblapack.so.3.
+
+ Intel MKL requires an openmp implementation
+ when running with multiple processors. By default,
+ mkl will use Intel’s iomp
+ implementation if no other is specified, but this is a
+ runtime-only dependency and binary compatible with the LLVM
+ implementation. To use that one instead, Intel recommends users
+ set it with LD_PRELOAD. Note that
+ mkl is only available on
+ x86_64-linux and
+ x86_64-darwin. Moreover, Hydra is not build
+ and distributing pre-compiled binaries using it.
+
+
+ For BLAS/LAPACK switching to work correctly, all packages must
+ depend on blas or lapack.
+ This ensures that only one BLAS/LAPACK library is used at one
+ time. There are two versions versions of BLAS/LAPACK currently
+ in the wild, LP64 (integer size = 32 bits)
+ and ILP64 (integer size = 64 bits). Some
+ software needs special flags or patches to work with
+ ILP64. You can check if
+ ILP64 is used in Nixpkgs with
+ blas.isILP64 and
+ lapack.isILP64. Some software does NOT work
+ with ILP64, and derivations need to specify
+ an assertion to prevent this. You can prevent
+ ILP64 from being used with the following:
+
+
+{ stdenv, blas, lapack, ... }:
+
+assert (!blas.isILP64) && (!lapack.isILP64);
+
+stdenv.mkDerivation {
+ ...
+}
+