Can CMake FindBLAS find OpenBLAS?

blas, cmake

Solution

CMake supports finding OpenBLAS using `FindBLAS` since CMake 3.6.0, as this commit finally made it into the release.

NB: OpenBLAS can also be used to substitute LAPACK, for which you should use the `FindLAPACK` command, that is also available since 3.6.0.

The "FindBLAS" and "FindLAPACK" modules learned to support OpenBLAS.

(See: https://blog.kitware.com/cmake-3-6-0-rc3-is-now-ready/)

Problem

For demonstration, I use the 3-line CMakeLists.txt: ``` cmake_minimum_required(VERSION 2.8) find_package( BLAS REQUIRED ) message( STATUS BLAS found: ${BLAS_LIBRARIES} ) ``` I have cblas, ATLAS and OpenBLAS including developer packages installed on a Debian Linux system, plus CMake 2.8.9. When I call ``` cmake . -DBLA_VENDOR=ATLAS -DCMAKE_PREFIX_PATH=/usr/lib/atlas-base ``` the ATLAS library nicely appears found: ``` -- The C compiler identification is GNU 4.7.2 -- The CXX compiler identification is GNU 4.7.2 -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Looking for dgemm_ -- Looking for dgemm_ - found -- A library with BLAS API found. -- BLASfound:/usr/lib/atlas-base/libf77blas.so/usr/lib/atlas-base/libatlas.so -- Configuring done -- Generating done -- Build files have been written to: /tmp ``` Similarly, just ``` cmake . ``` will find `/usr/lib/libblas.so` for me. (I do not forget to remove the cache files before the second call.) When I look into `/usr/share/cmake-2.8/Modules/FindBLAS.cmake`, I read as the permitted values of BLA_VENDOR: ``` ## Goto,ATLAS PhiPACK,CXML,DXML,SunPerf,SCSL,SGIMATH,IBMESSL,Intel10_32 (intel mkl v10 32 bit),Intel10_64lp (intel mkl v10 64 bit,lp thread model, lp64 model), ## Intel10_64lp_seq (intel mkl v10 64 bit,sequential code, lp64 model), ## Intel( older versions of mkl 32 and 64 bit), ACML,ACML_MP,ACML_GPU,Apple, NAS, Generic ``` That is, OpenBLAS is not listed. And a few random trials like ``` cmake . -DBLA_VENDOR=open -DCMAKE_PREFIX_PATH=/usr/lib/openblas-base ``` do not work either. Do I have to write my own FindBLAS in order to link to OpenBLAS with CMake?

Original source