1
# These lists are later turned into target properties on main caffe library target
2
set(Caffe_LINKER_LIBS "")
3
set(Caffe_INCLUDE_DIRS "")
4
set(Caffe_DEFINITIONS "")
5
set(Caffe_COMPILE_OPTIONS "")
8
find_package(Boost 1.54 REQUIRED COMPONENTS system thread filesystem)
9
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${Boost_INCLUDE_DIRS})
10
list(APPEND Caffe_LINKER_LIBS PUBLIC ${Boost_LIBRARIES})
13
find_package(Threads REQUIRED)
14
list(APPEND Caffe_LINKER_LIBS PRIVATE ${CMAKE_THREAD_LIBS_INIT})
18
# Ideally, this should be provided by the BLAS library IMPORTED target. However,
19
# nobody does this, so we need to link to OpenMP explicitly and have the maintainer
20
# to flick the switch manually as needed.
22
# Moreover, OpenMP package does not provide an IMPORTED target as well, and the
23
# suggested way of linking to OpenMP is to append to CMAKE_{C,CXX}_FLAGS.
24
# However, this naïve method will force any user of Caffe to add the same kludge
25
# into their buildsystem again, so we put these options into per-target PUBLIC
26
# compile options and link flags, so that they will be exported properly.
27
find_package(OpenMP REQUIRED)
28
list(APPEND Caffe_LINKER_LIBS PRIVATE ${OpenMP_CXX_FLAGS})
29
list(APPEND Caffe_COMPILE_OPTIONS PRIVATE ${OpenMP_CXX_FLAGS})
33
include("cmake/External/glog.cmake")
34
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${GLOG_INCLUDE_DIRS})
35
list(APPEND Caffe_LINKER_LIBS PUBLIC ${GLOG_LIBRARIES})
38
include("cmake/External/gflags.cmake")
39
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${GFLAGS_INCLUDE_DIRS})
40
list(APPEND Caffe_LINKER_LIBS PUBLIC ${GFLAGS_LIBRARIES})
43
include(cmake/ProtoBuf.cmake)
46
find_package(HDF5 COMPONENTS HL REQUIRED)
47
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${HDF5_INCLUDE_DIRS})
48
list(APPEND Caffe_LINKER_LIBS PUBLIC ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES})
50
# This code is taken from https://github.com/sh1r0/caffe-android-lib
52
find_package(HDF5 COMPONENTS HL REQUIRED)
53
include_directories(SYSTEM ${HDF5_INCLUDE_DIRS} ${HDF5_HL_INCLUDE_DIR})
54
list(APPEND Caffe_LINKER_LIBS ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES})
55
add_definitions(-DUSE_HDF5)
60
find_package(LMDB REQUIRED)
61
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${LMDB_INCLUDE_DIR})
62
list(APPEND Caffe_LINKER_LIBS PUBLIC ${LMDB_LIBRARIES})
63
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LMDB)
65
list(APPEND Caffe_DEFINITIONS PRIVATE -DALLOW_LMDB_NOLOCK)
71
find_package(LevelDB REQUIRED)
72
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${LevelDB_INCLUDES})
73
list(APPEND Caffe_LINKER_LIBS PUBLIC ${LevelDB_LIBRARIES})
74
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LEVELDB)
79
find_package(Snappy REQUIRED)
80
list(APPEND Caffe_INCLUDE_DIRS PRIVATE ${Snappy_INCLUDE_DIR})
81
list(APPEND Caffe_LINKER_LIBS PRIVATE ${Snappy_LIBRARIES})
85
include(cmake/Cuda.cmake)
88
message(STATUS "-- CUDA is disabled. Building without it...")
90
message(WARNING "-- CUDA is not detected by cmake. Building without it...")
93
list(APPEND Caffe_DEFINITIONS PUBLIC -DCPU_ONLY)
97
find_package(NCCL REQUIRED)
98
include_directories(SYSTEM ${NCCL_INCLUDE_DIR})
99
list(APPEND Caffe_LINKER_LIBS ${NCCL_LIBRARIES})
100
add_definitions(-DUSE_NCCL)
105
find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs)
106
if(NOT OpenCV_FOUND) # if not OpenCV 3.x, then imgcodecs are not found
107
find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc)
109
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenCV_INCLUDE_DIRS})
110
list(APPEND Caffe_LINKER_LIBS PUBLIC ${OpenCV_LIBS})
111
message(STATUS "OpenCV found (${OpenCV_CONFIG_PATH})")
112
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_OPENCV)
117
set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
118
set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL")
120
if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas")
121
find_package(Atlas REQUIRED)
122
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${Atlas_INCLUDE_DIR})
123
list(APPEND Caffe_LINKER_LIBS PUBLIC ${Atlas_LIBRARIES})
124
elseif(BLAS STREQUAL "Open" OR BLAS STREQUAL "open")
125
find_package(OpenBLAS REQUIRED)
126
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenBLAS_INCLUDE_DIR})
127
list(APPEND Caffe_LINKER_LIBS PUBLIC ${OpenBLAS_LIB})
128
elseif(BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl")
129
find_package(MKL REQUIRED)
130
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${MKL_INCLUDE_DIR})
131
list(APPEND Caffe_LINKER_LIBS PUBLIC ${MKL_LIBRARIES})
132
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_MKL)
135
find_package(vecLib REQUIRED)
136
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${vecLib_INCLUDE_DIR})
137
list(APPEND Caffe_LINKER_LIBS PUBLIC ${vecLib_LINKER_LIBS})
140
if(NOT vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*")
141
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_ACCELERATE)
148
if(NOT "${python_version}" VERSION_LESS "3.0.0")
150
find_package(PythonInterp 3.0)
151
find_package(PythonLibs 3.0)
152
find_package(NumPy 1.7.1)
153
# Find the matching boost python implementation
154
set(version ${PYTHONLIBS_VERSION_STRING})
156
STRING( REGEX REPLACE "[^0-9]" "" boost_py_version ${version} )
157
find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}")
158
set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
160
while(NOT "${version}" STREQUAL "" AND NOT Boost_PYTHON_FOUND)
161
STRING( REGEX REPLACE "([0-9.]+).[0-9]+" "\\1" version ${version} )
163
STRING( REGEX REPLACE "[^0-9]" "" boost_py_version ${version} )
164
find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}")
165
set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
167
STRING( REGEX MATCHALL "([0-9.]+).[0-9]+" has_more_version ${version} )
168
if("${has_more_version}" STREQUAL "")
172
if(NOT Boost_PYTHON_FOUND)
173
find_package(Boost 1.46 COMPONENTS python)
176
# disable Python 3 search
177
find_package(PythonInterp 2.7)
178
find_package(PythonLibs 2.7)
179
find_package(NumPy 1.7.1)
180
find_package(Boost 1.46 COMPONENTS python)
182
if(PYTHONLIBS_FOUND AND NUMPY_FOUND AND Boost_PYTHON_FOUND)
183
set(HAVE_PYTHON TRUE)
184
if(BUILD_python_layer)
185
list(APPEND Caffe_DEFINITIONS PRIVATE -DWITH_PYTHON_LAYER)
186
list(APPEND Caffe_INCLUDE_DIRS PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} PUBLIC ${Boost_INCLUDE_DIRS})
187
list(APPEND Caffe_LINKER_LIBS PRIVATE ${PYTHON_LIBRARIES} PUBLIC ${Boost_LIBRARIES})
194
find_package(MatlabMex)
196
set(HAVE_MATLAB TRUE)
199
# sudo apt-get install liboctave-dev
200
find_program(Octave_compiler NAMES mkoctfile DOC "Octave C++ compiler")
202
if(HAVE_MATLAB AND Octave_compiler)
203
set(Matlab_build_mex_using "Matlab" CACHE STRING "Select Matlab or Octave if both detected")
204
set_property(CACHE Matlab_build_mex_using PROPERTY STRINGS "Matlab;Octave")
210
find_package(Doxygen)