From 5e0ebf26f89edd69874be16c8bc0e1e3735de50f Mon Sep 17 00:00:00 2001 From: Tadas Baltrusaitis Date: Fri, 22 Jun 2018 08:08:45 +0100 Subject: [PATCH] Attempt to force the use of OpenBLAS --- CMakeLists.txt | 22 ++--- cmake/modules/FindOpenBLAS.cmake | 107 ++++++++++++++++++++++ lib/local/FaceAnalyser/CMakeLists.txt | 8 +- lib/local/GazeAnalyser/CMakeLists.txt | 8 +- lib/local/LandmarkDetector/CMakeLists.txt | 8 +- 5 files changed, 123 insertions(+), 30 deletions(-) create mode 100644 cmake/modules/FindOpenBLAS.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index a84880d5..8652883e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,21 +11,19 @@ add_definitions(-DCONFIG_DIR="${CONFIG_DIR}") # make sure we'll use OpenBLAS only: there's a header file naming difference between different # implementations; so OpenFace wants cblas.h; -set(BLA_VENDOR "OpenBLAS") -find_package( BLAS QUIET) +#set(BLA_VENDOR "OpenBLAS") +#find_package( BLAS QUIET) -if ( BLAS_LIBRARIES STREQUAL "FALSE") - unset(BLAS_LIBRARIES) -endif() +#if ( BLAS_LIBRARIES STREQUAL "FALSE") +# unset(BLAS_LIBRARIES) +#endif() -if ( ${BLAS_FOUND} ) - MESSAGE("BLAS information:") - MESSAGE(" BLAS Vendor: ${BLA_VENDOR}") - MESSAGE(" BLAS_LIBRARIES: ${BLAS_LIBRARIES}") - MESSAGE(" BLAS_ROOT_DIR: ${BLAS_ROOT_DIR}") +if ( ${OpenBLAS_FOUND} ) + MESSAGE("OpenBLAS information:") + MESSAGE(" OpenBLAS_LIBRARIES: ${OpenBLAS_LIB}") + MESSAGE(" OpenBLAS_INCLUDE_DIR: ${OpenBLAS_INCLUDE_DIR}") else() - message(WARNING "BLAS not found in the system. Using the one vended with OpenFace.") - include_directories(lib/3rdParty/OpenBLAS/include) + message(FATAL_ERROR "OpenBLAS not found in the system. Using the one vended with OpenFace.") endif() find_package( OpenCV 3.3 REQUIRED COMPONENTS core imgproc calib3d highgui objdetect) diff --git a/cmake/modules/FindOpenBLAS.cmake b/cmake/modules/FindOpenBLAS.cmake new file mode 100644 index 00000000..db79f4db --- /dev/null +++ b/cmake/modules/FindOpenBLAS.cmake @@ -0,0 +1,107 @@ +#COPYRIGHT +# +#All contributions by the University of California: +#Copyright (c) 2014, 2015, The Regents of the University of California (Regents) +#All rights reserved. +# +#All other contributions: +#Copyright (c) 2014, 2015, the respective contributors +#All rights reserved. +# +#Caffe uses a shared copyright model: each contributor holds copyright over +#their contributions to Caffe. The project versioning records all such +#contribution and copyright details. If a contributor wants to further mark +#their specific copyright on a particular contribution, they should indicate +#their copyright solely in the commit message of the change when it is +#committed. +# +#LICENSE +# +#Redistribution and use in source and binary forms, with or without +#modification, are permitted provided that the following conditions are met: +# +#1. Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +#2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +#ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +#(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +#ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +#(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +#SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +#CONTRIBUTION AGREEMENT +# +#By contributing to the BVLC/caffe repository through pull-request, comment, +#or otherwise, the contributor releases their content to the +#license and copyright terms herein. + +SET(Open_BLAS_INCLUDE_SEARCH_PATHS + $ENV{OpenBLAS_HOME} + $ENV{OpenBLAS_HOME}/include + /opt/OpenBLAS/include + /usr/local/include/openblas + /usr/include/openblas + /usr/local/include/openblas-base + /usr/include/openblas-base + /usr/local/include + /usr/lib/x86_64-linux-gnu + /usr/include +) + +SET(Open_BLAS_LIB_SEARCH_PATHS + $ENV{OpenBLAS}cd + $ENV{OpenBLAS}/lib + $ENV{OpenBLAS_HOME} + $ENV{OpenBLAS_HOME}/lib + /opt/OpenBLAS/lib + /usr/local/lib64 + /usr/local/lib + /lib/openblas-base + /lib64/ + /lib/ + /usr/lib/openblas-base + /usr/lib64 + /usr/lib + ) + +FIND_PATH(OpenBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${Open_BLAS_INCLUDE_SEARCH_PATHS} NO_DEFAULT_PATH) +FIND_LIBRARY(OpenBLAS_LIB NAMES openblas PATHS ${Open_BLAS_LIB_SEARCH_PATHS} NO_DEFAULT_PATH) + +SET(OpenBLAS_FOUND ON) + +# Check include files +IF(NOT OpenBLAS_INCLUDE_DIR) + SET(OpenBLAS_FOUND OFF) + MESSAGE(STATUS "Could not find OpenBLAS include. Turning OpenBLAS_FOUND off") +ENDIF() + +# Check libraries +IF(NOT OpenBLAS_LIB) + SET(OpenBLAS_FOUND OFF) + MESSAGE(STATUS "Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off") +ENDIF() + +IF (OpenBLAS_FOUND) + IF (NOT OpenBLAS_FIND_QUIETLY) + MESSAGE(STATUS "Found OpenBLAS libraries: ${OpenBLAS_LIB}") + MESSAGE(STATUS "Found OpenBLAS include: ${OpenBLAS_INCLUDE_DIR}") + ENDIF (NOT OpenBLAS_FIND_QUIETLY) +ELSE (OpenBLAS_FOUND) + IF (OpenBLAS_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find OpenBLAS") + ENDIF (OpenBLAS_FIND_REQUIRED) +ENDIF (OpenBLAS_FOUND) + +MARK_AS_ADVANCED( + OpenBLAS_INCLUDE_DIR + OpenBLAS_LIB + OpenBLAS +) \ No newline at end of file diff --git a/lib/local/FaceAnalyser/CMakeLists.txt b/lib/local/FaceAnalyser/CMakeLists.txt index aa11cc81..1a983f9c 100644 --- a/lib/local/FaceAnalyser/CMakeLists.txt +++ b/lib/local/FaceAnalyser/CMakeLists.txt @@ -38,14 +38,10 @@ target_include_directories(FaceAnalyser PUBLIC ${Boost_INCLUDE_DIRS}) target_include_directories(FaceAnalyser PUBLIC ${Boost_INCLUDE_DIRS}/boost) target_include_directories(FaceAnalyser PUBLIC ${OpenCV_INCLUDE_DIRS}) -target_link_libraries(FaceAnalyser PUBLIC ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${BLAS_LIBRARIES}) +target_link_libraries(FaceAnalyser PUBLIC ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${OpenBLAS_LIB}) target_link_libraries(FaceAnalyser PUBLIC dlib) -if(${BLAS_FOUND}) - target_include_directories(FaceAnalyser PRIVATE ${BLAS_ROOT_DIR}) -else() - target_include_directories(FaceAnalyser PRIVATE ../../3rdParty/OpenBLAS/include) -endif() +target_include_directories(FaceAnalyser PRIVATE ${OpenBLAS_INCLUDE_DIR}) install (TARGETS FaceAnalyser EXPORT OpenFaceTargets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) install (FILES ${HEADERS} DESTINATION include/OpenFace) \ No newline at end of file diff --git a/lib/local/GazeAnalyser/CMakeLists.txt b/lib/local/GazeAnalyser/CMakeLists.txt index f2c194d0..6f78eee1 100644 --- a/lib/local/GazeAnalyser/CMakeLists.txt +++ b/lib/local/GazeAnalyser/CMakeLists.txt @@ -25,14 +25,10 @@ target_include_directories(GazeAnalyser PUBLIC ${Boost_INCLUDE_DIRS}) target_include_directories(GazeAnalyser PUBLIC ${Boost_INCLUDE_DIRS}/boost) target_include_directories(GazeAnalyser PUBLIC ${OpenCV_INCLUDE_DIRS}) -target_link_libraries(GazeAnalyser PUBLIC ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${BLAS_LIBRARIES}) +target_link_libraries(GazeAnalyser PUBLIC ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${OpenBLAS_LIB}) target_link_libraries(GazeAnalyser PUBLIC dlib) -if(${BLAS_FOUND}) - target_include_directories(GazeAnalyser PRIVATE ${BLAS_ROOT_DIR}) -else() - target_include_directories(GazeAnalyser PRIVATE ../../3rdParty/OpenBLAS/include) -endif() +target_include_directories(GazeAnalyser PRIVATE ${OpenBLAS_INCLUDE_DIR}) install (TARGETS GazeAnalyser EXPORT OpenFaceTargets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) install (FILES ${HEADERS} DESTINATION include/OpenFace) \ No newline at end of file diff --git a/lib/local/LandmarkDetector/CMakeLists.txt b/lib/local/LandmarkDetector/CMakeLists.txt index cc0e8ebd..be75d9c3 100644 --- a/lib/local/LandmarkDetector/CMakeLists.txt +++ b/lib/local/LandmarkDetector/CMakeLists.txt @@ -50,14 +50,10 @@ target_include_directories(LandmarkDetector PUBLIC ${Boost_INCLUDE_DIRS}) target_include_directories(LandmarkDetector PUBLIC ${Boost_INCLUDE_DIRS}/boost) target_include_directories(LandmarkDetector PUBLIC ${OpenCV_INCLUDE_DIRS}) -target_link_libraries(LandmarkDetector PUBLIC ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${BLAS_LIBRARIES}) +target_link_libraries(LandmarkDetector PUBLIC ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES} ${OpenBLAS_LIB}) target_link_libraries(LandmarkDetector PUBLIC dlib) -if(${BLAS_FOUND}) - target_include_directories(LandmarkDetector PRIVATE ${BLAS_ROOT_DIR}) -else() - target_include_directories(LandmarkDetector PRIVATE ../../3rdParty/OpenBLAS/include) -endif() +target_include_directories(LandmarkDetector PRIVATE ${OpenBLAS_INCLUDE_DIR}) install (TARGETS LandmarkDetector EXPORT OpenFaceTargets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) install (FILES ${HEADERS} DESTINATION include/OpenFace) \ No newline at end of file