caffe

Форк
0
/
Dependencies.cmake 
211 строк · 7.3 Кб
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 "")
6

7
# ---[ Boost
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})
11

12
# ---[ Threads
13
find_package(Threads REQUIRED)
14
list(APPEND Caffe_LINKER_LIBS PRIVATE ${CMAKE_THREAD_LIBS_INIT})
15

16
# ---[ OpenMP
17
if(USE_OPENMP)
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.
21
  #
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})
30
endif()
31

32
# ---[ Google-glog
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})
36

37
# ---[ Google-gflags
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})
41

42
# ---[ Google-protobuf
43
include(cmake/ProtoBuf.cmake)
44

45
# ---[ HDF5
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})
49

50
# This code is taken from https://github.com/sh1r0/caffe-android-lib
51
if(USE_HDF5)
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)
56
endif()
57

58
# ---[ LMDB
59
if(USE_LMDB)
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)
64
  if(ALLOW_LMDB_NOLOCK)
65
    list(APPEND Caffe_DEFINITIONS PRIVATE -DALLOW_LMDB_NOLOCK)
66
  endif()
67
endif()
68

69
# ---[ LevelDB
70
if(USE_LEVELDB)
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)
75
endif()
76

77
# ---[ Snappy
78
if(USE_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})
82
endif()
83

84
# ---[ CUDA
85
include(cmake/Cuda.cmake)
86
if(NOT HAVE_CUDA)
87
  if(CPU_ONLY)
88
    message(STATUS "-- CUDA is disabled. Building without it...")
89
  else()
90
    message(WARNING "-- CUDA is not detected by cmake. Building without it...")
91
  endif()
92

93
  list(APPEND Caffe_DEFINITIONS PUBLIC -DCPU_ONLY)
94
endif()
95

96
if(USE_NCCL)
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)
101
endif()
102

103
# ---[ OpenCV
104
if(USE_OPENCV)
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)
108
  endif()
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)
113
endif()
114

115
# ---[ BLAS
116
if(NOT APPLE)
117
  set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
118
  set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL")
119

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)
133
  endif()
134
elseif(APPLE)
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})
138

139
  if(VECLIB_FOUND)
140
    if(NOT vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*")
141
      list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_ACCELERATE)
142
    endif()
143
  endif()
144
endif()
145

146
# ---[ Python
147
if(BUILD_python)
148
  if(NOT "${python_version}" VERSION_LESS "3.0.0")
149
    # use python3
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})
155

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})
159

160
    while(NOT "${version}" STREQUAL "" AND NOT Boost_PYTHON_FOUND)
161
      STRING( REGEX REPLACE "([0-9.]+).[0-9]+" "\\1" version ${version} )
162

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})
166

167
      STRING( REGEX MATCHALL "([0-9.]+).[0-9]+" has_more_version ${version} )
168
      if("${has_more_version}" STREQUAL "")
169
        break()
170
      endif()
171
    endwhile()
172
    if(NOT Boost_PYTHON_FOUND)
173
      find_package(Boost 1.46 COMPONENTS python)
174
    endif()
175
  else()
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)
181
  endif()
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})
188
    endif()
189
  endif()
190
endif()
191

192
# ---[ Matlab
193
if(BUILD_matlab)
194
  find_package(MatlabMex)
195
  if(MATLABMEX_FOUND)
196
    set(HAVE_MATLAB TRUE)
197
  endif()
198

199
  # sudo apt-get install liboctave-dev
200
  find_program(Octave_compiler NAMES mkoctfile DOC "Octave C++ compiler")
201

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")
205
  endif()
206
endif()
207

208
# ---[ Doxygen
209
if(BUILD_docs)
210
  find_package(Doxygen)
211
endif()
212

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.