From 41903d42aee8c4823b190b6b965a2c9ceb0f0699 Mon Sep 17 00:00:00 2001 From: Shunsuke Shimizu Date: Thu, 4 Jul 2019 13:03:24 +0900 Subject: [PATCH] explicitly search cblas_sgemm in ATLAS and OpenBLAS target --- chainerx_cc/cmake/FindBLAS.cmake | 38 +++++++++++++++++--------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/chainerx_cc/cmake/FindBLAS.cmake b/chainerx_cc/cmake/FindBLAS.cmake index 7e2462eaf3a5..ee628891027a 100644 --- a/chainerx_cc/cmake/FindBLAS.cmake +++ b/chainerx_cc/cmake/FindBLAS.cmake @@ -171,21 +171,6 @@ macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread) mark_as_advanced(${_prefix}${_combined_name}_WORKS) set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) endif() - if(_libraries_work) - # NOTE: ChainerX uses CBLAS API. Search `libcblas.so` if CBLAS functions are - # not provided in the blas library found. - set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_thread}) - check_function_exists("cblas_sgemm" ${_prefix}${_combined_name}_HAS_CBLAS) - if(NOT ${_prefix}${_combined_name}_HAS_CBLAS) - find_library(${_prefix}${_combined_name}_CBLAS_LIBRARY cblas) - if(${_prefix}${_combined_name}_CBLAS_LIBRARY) - set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}${_combined_name}_CBLAS_LIBRARY}) - else() - set(_libraries_work FALSE) - endif() - endif() - set(CMAKE_REQUIRED_LIBRARIES) - endif() if(_libraries_work) if("${_list}" STREQUAL "") set(${LIBRARIES} "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES") @@ -424,10 +409,11 @@ endif () if (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All") if(NOT BLAS_LIBRARIES) # OpenBLAS (http://www.openblas.net) + # ChainerX modification: check `cblas_sgemm`. check_fortran_libraries( BLAS_LIBRARIES BLAS - sgemm + cblas_sgemm "" "openblas" "" @@ -435,6 +421,21 @@ if (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All") endif() endif () +if (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + # ChainerX modification: search libcblas if `cblas_sgemm` not found. + # OpenBLAS might be built without cblas functions. + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + cblas_sgemm + "" + "openblas;cblas" + "" + ) + endif() +endif () + if (BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All") if(NOT BLAS_LIBRARIES) # FLAME's blis library (https://github.com/flame/blis) @@ -452,12 +453,13 @@ endif () if (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All") if(NOT BLAS_LIBRARIES) # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) + # ChainerX change: check `cblas_sgemm` and search libcblas. check_fortran_libraries( BLAS_LIBRARIES BLAS - dgemm + cblas_sgemm "" - "f77blas;atlas" + "f77blas;atlas;cblas" "" ) endif()