Skip to content

Commit 009fdbb

Browse files
committed
build: fix OpenBLAS detection on Linux
1 parent 09c71ae commit 009fdbb

File tree

2 files changed

+90
-147
lines changed

2 files changed

+90
-147
lines changed

cmake/OpenCVFindLAPACK.cmake

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ macro(_find_header_file_in_dirs VAR NAME)
4444
endmacro()
4545

4646
macro(ocv_lapack_check)
47+
cmake_parse_arguments(LAPACK "" "IMPL;CBLAS_H;LAPACKE_H" "INCLUDE_DIR;LIBRARIES" ${ARGN})
48+
49+
ocv_debug_message("LAPACK_IMPL=${LAPACK_IMPL}")
50+
ocv_debug_message("LAPACK_CBLAS_H=${LAPACK_CBLAS_H}")
51+
ocv_debug_message("LAPACK_LAPACKE_H=${LAPACK_LAPACKE_H}")
52+
ocv_debug_message("LAPACK_INCLUDE_DIR=${LAPACK_INCLUDE_DIR}")
53+
ocv_debug_message("LAPACK_LIBRARIES=${LAPACK_LIBRARIES}")
54+
4755
string(REGEX REPLACE "[^a-zA-Z0-9_]" "_" _lapack_impl "${LAPACK_IMPL}")
4856
message(STATUS "LAPACK(${LAPACK_IMPL}): LAPACK_LIBRARIES: ${LAPACK_LIBRARIES}")
4957
_find_header_file_in_dirs(OPENCV_CBLAS_H_PATH_${_lapack_impl} "${LAPACK_CBLAS_H}" "${LAPACK_INCLUDE_DIR}")
@@ -169,34 +177,31 @@ if(WITH_LAPACK)
169177
if(NOT LAPACK_LIBRARIES AND NOT OPENCV_LAPACK_DISABLE_MKL)
170178
include(cmake/OpenCVFindMKL.cmake)
171179
if(HAVE_MKL)
172-
set(LAPACK_INCLUDE_DIR ${MKL_INCLUDE_DIRS})
173-
set(LAPACK_LIBRARIES ${MKL_LIBRARIES})
174-
set(LAPACK_CBLAS_H "mkl_cblas.h")
175-
set(LAPACK_LAPACKE_H "mkl_lapack.h")
176-
set(LAPACK_IMPL "MKL")
177-
ocv_lapack_check()
180+
ocv_lapack_check(IMPL "MKL"
181+
CBLAS_H "mkl_cblas.h"
182+
LAPACKE_H "mkl_lapack.h"
183+
INCLUDE_DIR "${MKL_INCLUDE_DIRS}"
184+
LIBRARIES "${MKL_LIBRARIES}")
178185
endif()
179186
endif()
180187
if(NOT LAPACK_LIBRARIES)
181188
include(cmake/OpenCVFindOpenBLAS.cmake)
182189
if(OpenBLAS_FOUND)
183-
set(LAPACK_INCLUDE_DIR ${OpenBLAS_INCLUDE_DIR})
184-
set(LAPACK_LIBRARIES ${OpenBLAS_LIB})
185-
set(LAPACK_CBLAS_H "cblas.h")
186-
set(LAPACK_LAPACKE_H "lapacke.h")
187-
set(LAPACK_IMPL "OpenBLAS")
188-
ocv_lapack_check()
190+
ocv_lapack_check(IMPL "OpenBLAS"
191+
CBLAS_H "cblas.h"
192+
LAPACKE_H "lapacke.h"
193+
INCLUDE_DIR "${OpenBLAS_INCLUDE_DIRS}"
194+
LIBRARIES "${OpenBLAS_LIBRARIES}")
189195
endif()
190196
endif()
191197
if(NOT LAPACK_LIBRARIES AND UNIX)
192198
include(cmake/OpenCVFindAtlas.cmake)
193199
if(ATLAS_FOUND)
194-
set(LAPACK_INCLUDE_DIR ${Atlas_INCLUDE_DIR})
195-
set(LAPACK_LIBRARIES ${Atlas_LIBRARIES})
196-
set(LAPACK_CBLAS_H "cblas.h")
197-
set(LAPACK_LAPACKE_H "lapacke.h")
198-
set(LAPACK_IMPL "Atlas")
199-
ocv_lapack_check()
200+
ocv_lapack_check(IMPL "Atlas"
201+
CBLAS_H "cblas.h"
202+
LAPACKE_H "lapacke.h"
203+
INCLUDE_DIR "${Atlas_INCLUDE_DIR}"
204+
LIBRARIES "${Atlas_LIBRARIES}")
200205
endif()
201206
endif()
202207
endif()
@@ -214,24 +219,26 @@ if(WITH_LAPACK)
214219
find_path(MKL_LAPACKE_INCLUDE_DIR "mkl_lapack.h")
215220
endif()
216221
if(MKL_LAPACKE_INCLUDE_DIR AND NOT OPENCV_LAPACK_DISABLE_MKL)
217-
set(LAPACK_INCLUDE_DIR ${MKL_LAPACKE_INCLUDE_DIR})
218-
set(LAPACK_CBLAS_H "mkl_cblas.h")
219-
set(LAPACK_LAPACKE_H "mkl_lapack.h")
220-
set(LAPACK_IMPL "LAPACK/MKL")
221-
ocv_lapack_check()
222+
ocv_lapack_check(IMPL "LAPACK/MKL"
223+
CBLAS_H "mkl_cblas.h"
224+
LAPACKE_H "mkl_lapack.h"
225+
INCLUDE_DIR "${MKL_LAPACKE_INCLUDE_DIR}"
226+
LIBRARIES "${LAPACK_LIBRARIES}")
222227
endif()
223228
if(NOT HAVE_LAPACK)
224-
if(LAPACKE_INCLUDE_DIR)
225-
set(LAPACK_INCLUDE_DIR ${LAPACKE_INCLUDE_DIR})
226-
set(LAPACK_CBLAS_H "cblas.h")
227-
set(LAPACK_LAPACKE_H "lapacke.h")
228-
set(LAPACK_IMPL "LAPACK/Generic")
229-
ocv_lapack_check()
229+
if(NOT DEFINED CBLAS_INCLUDE_DIR)
230+
find_path(CBLAS_INCLUDE_DIR "cblas.h")
231+
endif()
232+
if(CBLAS_INCLUDE_DIR AND LAPACKE_INCLUDE_DIR)
233+
ocv_lapack_check(IMPL "LAPACK/Generic"
234+
CBLAS_H "cblas.h"
235+
LAPACKE_H "lapacke.h"
236+
INCLUDE_DIR "${CBLAS_INCLUDE_DIR}" "${LAPACKE_INCLUDE_DIR}"
237+
LIBRARIES "${LAPACK_LIBRARIES}")
230238
elseif(APPLE)
231-
set(LAPACK_CBLAS_H "Accelerate/Accelerate.h")
232-
set(LAPACK_LAPACKE_H "Accelerate/Accelerate.h")
233-
set(LAPACK_IMPL "LAPACK/Apple")
234-
ocv_lapack_check()
239+
ocv_lapack_check(IMPL "LAPACK/Apple"
240+
CBLAS_H "Accelerate/Accelerate.h"
241+
LAPACKE_H "Accelerate/Accelerate.h")
235242
endif()
236243
endif()
237244
endif()
@@ -242,16 +249,17 @@ if(WITH_LAPACK)
242249
endif()
243250

244251
if(NOT LAPACK_LIBRARIES AND APPLE AND NOT OPENCV_LAPACK_FIND_PACKAGE_ONLY)
245-
set(LAPACK_INCLUDE_DIR "")
246-
set(LAPACK_LIBRARIES "-framework Accelerate")
247-
set(LAPACK_CBLAS_H "Accelerate/Accelerate.h")
248-
set(LAPACK_LAPACKE_H "Accelerate/Accelerate.h")
249-
set(LAPACK_IMPL "Apple")
250-
ocv_lapack_check()
252+
ocv_lapack_check(IMPL "Apple"
253+
CBLAS_H "Accelerate/Accelerate.h"
254+
LAPACKE_H "Accelerate/Accelerate.h"
255+
LIBRARIES "-framework Accelerate")
251256
endif()
252257

253258
if(NOT HAVE_LAPACK AND LAPACK_LIBRARIES AND LAPACK_CBLAS_H AND LAPACK_LAPACKE_H)
254-
ocv_lapack_check()
259+
ocv_lapack_check(IMPL "Unknown"
260+
CBLAS_H ${LAPACK_CBLAS_H}
261+
LAPACKE_H ${LAPACK_LAPACKE_H}
262+
LIBRARIES "${LAPACK_LIBRARIES}")
255263
endif()
256264

257265
set(LAPACK_INCLUDE_DIR ${LAPACK_INCLUDE_DIR} CACHE PATH "Path to BLAS include dir" FORCE)

cmake/OpenCVFindOpenBLAS.cmake

Lines changed: 42 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,42 @@
1-
#COPYRIGHT
2-
#
3-
#All contributions by the University of California:
4-
#Copyright (c) 2014, 2015, The Regents of the University of California (Regents)
5-
#All rights reserved.
6-
#
7-
#All other contributions:
8-
#Copyright (c) 2014, 2015, the respective contributors
9-
#All rights reserved.
10-
#
11-
#Caffe uses a shared copyright model: each contributor holds copyright over
12-
#their contributions to Caffe. The project versioning records all such
13-
#contribution and copyright details. If a contributor wants to further mark
14-
#their specific copyright on a particular contribution, they should indicate
15-
#their copyright solely in the commit message of the change when it is
16-
#committed.
17-
#
18-
#LICENSE
19-
#
20-
#Redistribution and use in source and binary forms, with or without
21-
#modification, are permitted provided that the following conditions are met:
22-
#
23-
#1. Redistributions of source code must retain the above copyright notice, this
24-
# list of conditions and the following disclaimer.
25-
#2. Redistributions in binary form must reproduce the above copyright notice,
26-
# this list of conditions and the following disclaimer in the documentation
27-
# and/or other materials provided with the distribution.
28-
#
29-
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
30-
#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
31-
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
32-
#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
33-
#ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34-
#(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35-
#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
36-
#ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37-
#(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
38-
#SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39-
#
40-
#CONTRIBUTION AGREEMENT
41-
#
42-
#By contributing to the BVLC/caffe repository through pull-request, comment,
43-
#or otherwise, the contributor releases their content to the
44-
#license and copyright terms herein.
45-
46-
SET(Open_BLAS_INCLUDE_SEARCH_PATHS
47-
$ENV{OpenBLAS_HOME}
48-
$ENV{OpenBLAS_HOME}/include
49-
$ENV{OpenBLAS_HOME}/include/openblas
50-
/opt/OpenBLAS/include
51-
/usr/local/include/openblas
52-
/usr/include/openblas
53-
/usr/local/include/openblas-base
54-
/usr/include/openblas-base
55-
/usr/local/include
56-
/usr/include
57-
)
58-
59-
SET(Open_BLAS_LIB_SEARCH_PATHS
60-
$ENV{OpenBLAS}
61-
$ENV{OpenBLAS}/lib
62-
$ENV{OpenBLAS_HOME}
63-
$ENV{OpenBLAS_HOME}/lib
64-
/opt/OpenBLAS/lib
65-
/usr/local/lib64
66-
/usr/local/lib
67-
/lib/openblas-base
68-
/lib64/
69-
/lib/
70-
/usr/lib/openblas-base
71-
/usr/lib64
72-
/usr/lib
73-
)
74-
75-
FIND_PATH(OpenBLAS_INCLUDE_DIR NAMES cblas.h PATHS ${Open_BLAS_INCLUDE_SEARCH_PATHS} NO_DEFAULT_PATH)
76-
FIND_LIBRARY(OpenBLAS_LIB NAMES openblas libopenblas PATHS ${Open_BLAS_LIB_SEARCH_PATHS} NO_DEFAULT_PATH)
77-
78-
SET(OpenBLAS_FOUND ON)
79-
80-
# Check include files
81-
IF(NOT OpenBLAS_INCLUDE_DIR)
82-
SET(OpenBLAS_FOUND OFF)
83-
MESSAGE(STATUS "Could not find OpenBLAS include. Turning OpenBLAS_FOUND off")
84-
ENDIF()
85-
86-
# Check libraries
87-
IF(NOT OpenBLAS_LIB)
88-
SET(OpenBLAS_FOUND OFF)
89-
MESSAGE(STATUS "Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off")
90-
ENDIF()
91-
92-
IF (OpenBLAS_FOUND)
93-
IF (NOT OpenBLAS_FIND_QUIETLY)
94-
MESSAGE(STATUS "Found OpenBLAS libraries: ${OpenBLAS_LIB}")
95-
MESSAGE(STATUS "Found OpenBLAS include: ${OpenBLAS_INCLUDE_DIR}")
96-
ENDIF (NOT OpenBLAS_FIND_QUIETLY)
97-
ELSE (OpenBLAS_FOUND)
98-
IF (OpenBLAS_FIND_REQUIRED)
99-
MESSAGE(FATAL_ERROR "Could not find OpenBLAS")
100-
ENDIF (OpenBLAS_FIND_REQUIRED)
101-
ENDIF (OpenBLAS_FOUND)
102-
103-
MARK_AS_ADVANCED(
104-
OpenBLAS_INCLUDE_DIR
105-
OpenBLAS_LIB
106-
OpenBLAS
107-
)
1+
# Search for OpenBLAS library
2+
3+
if(NOT OpenBLAS_FOUND AND NOT SKIP_OPENBLAS_PACKAGE)
4+
find_package(OpenBLAS QUIET)
5+
if(OpenBLAS_FOUND)
6+
message(STATUS "Found OpenBLAS package")
7+
endif()
8+
endif()
9+
10+
if(NOT OpenBLAS_FOUND)
11+
find_library(OpenBLAS_LIBRARIES NAMES openblas PATHS ENV "OpenBLAS" ENV "OpenBLAS_HOME" PATH_SUFFIXES "lib" NO_DEFAULT_PATH)
12+
find_path(OpenBLAS_INCLUDE_DIRS NAMES cblas.h PATHS ENV "OpenBLAS" ENV "OpenBLAS_HOME" PATH_SUFFIXES "include" NO_DEFAULT_PATH)
13+
find_path(OpenBLAS_LAPACKE_DIR NAMES lapacke.h PATHS "${OpenBLAS_INCLUDE_DIRS}" ENV "OpenBLAS" ENV "OpenBLAS_HOME" PATH_SUFFIXES "include" NO_DEFAULT_PATH)
14+
if(OpenBLAS_LIBRARIES AND OpenBLAS_INCLUDE_DIRS)
15+
message(STATUS "Found OpenBLAS using environment hint")
16+
set(OpenBLAS_FOUND ON)
17+
else()
18+
ocv_clear_vars(OpenBLAS_LIBRARIES OpenBLAS_INCLUDE_DIRS)
19+
endif()
20+
endif()
21+
22+
if(NOT OpenBLAS_FOUND)
23+
find_library(OpenBLAS_LIBRARIES NAMES openblas)
24+
find_path(OpenBLAS_INCLUDE_DIRS NAMES cblas.h)
25+
find_path(OpenBLAS_LAPACKE_DIR NAMES lapacke.h PATHS "${OpenBLAS_INCLUDE_DIRS}")
26+
if(OpenBLAS_LIBRARIES AND OpenBLAS_INCLUDE_DIRS)
27+
message(STATUS "Found OpenBLAS in the system")
28+
set(OpenBLAS_FOUND ON)
29+
else()
30+
ocv_clear_vars(OpenBLAS_LIBRARIES OpenBLAS_INCLUDE_DIRS)
31+
endif()
32+
endif()
33+
34+
if(OpenBLAS_FOUND)
35+
if(OpenBLAS_LAPACKE_DIR)
36+
set(OpenBLAS_INCLUDE_DIRS "${OpenBLAS_INCLUDE_DIRS};${OpenBLAS_LAPACKE_DIR}")
37+
endif()
38+
message(STATUS "OpenBLAS_LIBRARIES=${OpenBLAS_LIBRARIES}")
39+
message(STATUS "OpenBLAS_INCLUDE_DIRS=${OpenBLAS_INCLUDE_DIRS}")
40+
endif()
41+
42+
mark_as_advanced(OpenBLAS_LIBRARIES OpenBLAS_INCLUDE_DIRS OpenBLAS_LAPACKE_DIR)

0 commit comments

Comments
 (0)