diff --git a/CMakeLists.txt b/CMakeLists.txt index b494fdd75ae7..b42cd79d74f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,6 +91,7 @@ option(BUILD_CYTHON_MODULES "Build cython modules." OFF) option(LOG_FATAL_THROW "Log exceptions but do not abort" ON) cmake_dependent_option(USE_SPLIT_ARCH_DLL "Build a separate DLL for each Cuda arch (Windows only)." ON "MSVC" OFF) cmake_dependent_option(USE_CCACHE "Attempt using CCache to wrap the compilation" ON "UNIX" OFF) +option(USE_STATIC_LINK_TO_OPENBLAS "Statically link to openblas to avoid name clashing" ON) message(STATUS "CMAKE_CROSSCOMPILING ${CMAKE_CROSSCOMPILING}") @@ -889,3 +890,7 @@ if(BUILD_CYTHON_MODULES) message(FATAL_ERROR "No python interpreter found to build cython modules") endif() endif() + +if(USE_STATIC_LINK_TO_OPENBLAS AND USE_BLAS STREQUAL "open") + set_target_properties(mxnet PROPERTIES LINK_FLAGS "-Wl,--version-script=${PROJECT_SOURCE_DIR}/cmake/exclude_openblas.ver") +endif() diff --git a/cmake/Modules/FindOpenBLAS.cmake b/cmake/Modules/FindOpenBLAS.cmake index a3a79caae461..bdda43399fa3 100644 --- a/cmake/Modules/FindOpenBLAS.cmake +++ b/cmake/Modules/FindOpenBLAS.cmake @@ -53,7 +53,7 @@ SET(Open_BLAS_LIB_SEARCH_PATHS ) FIND_PATH(OpenBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${Open_BLAS_INCLUDE_SEARCH_PATHS}) -FIND_LIBRARY(OpenBLAS_LIB NAMES openblas PATHS ${Open_BLAS_LIB_SEARCH_PATHS}) +FIND_LIBRARY(OpenBLAS_LIB NAMES libopenblas.a openblas PATHS ${Open_BLAS_LIB_SEARCH_PATHS}) IF(NOT OpenBLAS_LIB) FIND_FILE(OpenBLAS_LIB NAMES libopenblas.dll.a PATHS ${Open_BLAS_LIB_SEARCH_PATHS}) ENDIF() diff --git a/cmake/exclude_openblas.ver b/cmake/exclude_openblas.ver new file mode 100644 index 000000000000..d23d0fbb80b9 --- /dev/null +++ b/cmake/exclude_openblas.ver @@ -0,0 +1,21 @@ + +{ + local: + cblas_*; + *portrf_; + *portri_; + *gelqf_; + *orglq_; + *geqrf_; + *orgqr_; + *syevd_; + *gesvd_; + *gesdd_; + *geev_; + *getrf_; + *getri_; + *gesv_; + *gelsd_; +}; + +