openblas-src 0.10.15

The package provides a source of BLAS and LAPACK via OpenBLAS.
Documentation
// FIXME This should be test also on Windows and macOS.
//
// However, we have several problems:
//
// - we cannot build Fortran part of OpenBLAS on windows-msvc platform
//   because the absence of Fortran compiler
//
// - In macOS, we can get gfortran by `brew install gcc`,
//   but it is too time-consuming to execute on CI.
//   GitHub Actions's macOS instance says gfotran is "installed",
//   but it is too fragile me to give up using it.
//
#![cfg(target_os = "linux")]

extern crate openblas_src as _src;

extern "C" {
    fn dormbr_(
        vect: *const u8,
        side: *const u8,
        trans: *const u8,
        m: *const i32,
        n: *const i32,
        k: *const i32,
        A: *const f64,
        lda: *const i32,
        tau: *const f64,
        C: *mut f64,
        ldc: *const i32,
        work: *mut f64,
        lwork: *const i32,
        info: *mut i32,
    );
}

// `dormbr_` is imported from reference LAPACK written in Fortran into OpenBLAS project.
// This test will fail to link when OpenBLAS does not build Fortran part.
#[test]
fn test_link_lapack() {
    let m = 1;
    let n = 1;
    let k = 1;
    let vect = b'Q';
    let side = b'L';
    let trans = b'N';
    let a = vec![0.0];
    let lda = 1;
    let mut c = vec![0.0];
    let ldc = 1;
    let tau = 0.0;
    let mut work = vec![0.0];
    let lwork = 1;
    let mut info = 0;
    unsafe {
        dormbr_(
            &vect,
            &side,
            &trans,
            &m,
            &n,
            &k,
            a.as_ptr(),
            &lda,
            &tau,
            c.as_mut_ptr(),
            &ldc,
            work.as_mut_ptr(),
            &lwork,
            &mut info,
        );
    }
}