Merge pull request #3088 from lukeyeager/bvlc/lmdb-nolock
[platform/upstream/caffeonacl.git] / cmake / Dependencies.cmake
1 # This list is required for static linking and exported to CaffeConfig.cmake
2 set(Caffe_LINKER_LIBS "")
3
4 # ---[ Boost
5 find_package(Boost 1.46 REQUIRED COMPONENTS system thread)
6 include_directories(SYSTEM ${Boost_INCLUDE_DIR})
7 list(APPEND Caffe_LINKER_LIBS ${Boost_LIBRARIES})
8
9 # ---[ Threads
10 find_package(Threads REQUIRED)
11 list(APPEND Caffe_LINKER_LIBS ${CMAKE_THREAD_LIBS_INIT})
12
13 # ---[ Google-glog
14 include("cmake/External/glog.cmake")
15 include_directories(SYSTEM ${GLOG_INCLUDE_DIRS})
16 list(APPEND Caffe_LINKER_LIBS ${GLOG_LIBRARIES})
17
18 # ---[ Google-gflags
19 include("cmake/External/gflags.cmake")
20 include_directories(SYSTEM ${GFLAGS_INCLUDE_DIRS})
21 list(APPEND Caffe_LINKER_LIBS ${GFLAGS_LIBRARIES})
22
23 # ---[ Google-protobuf
24 include(cmake/ProtoBuf.cmake)
25
26 # ---[ HDF5
27 find_package(HDF5 COMPONENTS HL REQUIRED)
28 include_directories(SYSTEM ${HDF5_INCLUDE_DIRS} ${HDF5_HL_INCLUDE_DIR})
29 list(APPEND Caffe_LINKER_LIBS ${HDF5_LIBRARIES})
30
31 # ---[ LMDB
32 if(USE_LMDB)
33   find_package(LMDB REQUIRED)
34   include_directories(SYSTEM ${LMDB_INCLUDE_DIR})
35   list(APPEND Caffe_LINKER_LIBS ${LMDB_LIBRARIES})
36   add_definitions(-DUSE_LMDB)
37   if(ALLOW_LMDB_NOLOCK)
38     add_definitions(-DALLOW_LMDB_NOLOCK)
39   endif()
40 endif()
41
42 # ---[ LevelDB
43 if(USE_LEVELDB)
44   find_package(LevelDB REQUIRED)
45   include_directories(SYSTEM ${LevelDB_INCLUDE})
46   list(APPEND Caffe_LINKER_LIBS ${LevelDB_LIBRARIES})
47   add_definitions(-DUSE_LEVELDB)
48 endif()
49
50 # ---[ Snappy
51 if(USE_LEVELDB)
52   find_package(Snappy REQUIRED)
53   include_directories(SYSTEM ${Snappy_INCLUDE_DIR})
54   list(APPEND Caffe_LINKER_LIBS ${Snappy_LIBRARIES})
55 endif()
56
57 # ---[ CUDA
58 include(cmake/Cuda.cmake)
59 if(NOT HAVE_CUDA)
60   if(CPU_ONLY)
61     message(STATUS "-- CUDA is disabled. Building without it...")
62   else()
63     message(WARNING "-- CUDA is not detected by cmake. Building without it...")
64   endif()
65
66   # TODO: remove this not cross platform define in future. Use caffe_config.h instead.
67   add_definitions(-DCPU_ONLY)
68 endif()
69
70 # ---[ OpenCV
71 if(USE_OPENCV)
72   find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs)
73   if(NOT OpenCV_FOUND) # if not OpenCV 3.x, then imgcodecs are not found
74     find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc)
75   endif()
76   include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS})
77   list(APPEND Caffe_LINKER_LIBS ${OpenCV_LIBS})
78   message(STATUS "OpenCV found (${OpenCV_CONFIG_PATH})")
79   add_definitions(-DUSE_OPENCV)
80 endif()
81
82 # ---[ BLAS
83 if(NOT APPLE)
84   set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
85   set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL")
86
87   if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas")
88     find_package(Atlas REQUIRED)
89     include_directories(SYSTEM ${Atlas_INCLUDE_DIR})
90     list(APPEND Caffe_LINKER_LIBS ${Atlas_LIBRARIES})
91   elseif(BLAS STREQUAL "Open" OR BLAS STREQUAL "open")
92     find_package(OpenBLAS REQUIRED)
93     include_directories(SYSTEM ${OpenBLAS_INCLUDE_DIR})
94     list(APPEND Caffe_LINKER_LIBS ${OpenBLAS_LIB})
95   elseif(BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl")
96     find_package(MKL REQUIRED)
97     include_directories(SYSTEM ${MKL_INCLUDE_DIR})
98     list(APPEND Caffe_LINKER_LIBS ${MKL_LIBRARIES})
99     add_definitions(-DUSE_MKL)
100   endif()
101 elseif(APPLE)
102   find_package(vecLib REQUIRED)
103   include_directories(SYSTEM ${vecLib_INCLUDE_DIR})
104   list(APPEND Caffe_LINKER_LIBS ${vecLib_LINKER_LIBS})
105 endif()
106
107 # ---[ Python
108 if(BUILD_python)
109   if(NOT "${python_version}" VERSION_LESS "3.0.0")
110     # use python3
111     find_package(PythonInterp 3.0)
112     find_package(PythonLibs 3.0)
113     find_package(NumPy 1.7.1)
114     # Find the matching boost python implementation
115     set(version ${PYTHONLIBS_VERSION_STRING})
116     
117     STRING( REPLACE "." "" boost_py_version ${version} )
118     find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}")
119     set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
120     
121     while(NOT "${version}" STREQUAL "" AND NOT Boost_PYTHON_FOUND)
122       STRING( REGEX REPLACE "([0-9.]+).[0-9]+" "\\1" version ${version} )
123       
124       STRING( REPLACE "." "" boost_py_version ${version} )
125       find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}")
126       set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND})
127       
128       STRING( REGEX MATCHALL "([0-9.]+).[0-9]+" has_more_version ${version} )
129       if("${has_more_version}" STREQUAL "")
130         break()
131       endif()
132     endwhile()
133     if(NOT Boost_PYTHON_FOUND)
134       find_package(Boost 1.46 COMPONENTS python)
135     endif()
136   else()
137     # disable Python 3 search
138     find_package(PythonInterp 2.7)
139     find_package(PythonLibs 2.7)
140     find_package(NumPy 1.7.1)
141     find_package(Boost 1.46 COMPONENTS python)
142   endif()
143   if(PYTHONLIBS_FOUND AND NUMPY_FOUND AND Boost_PYTHON_FOUND)
144     set(HAVE_PYTHON TRUE)
145     if(BUILD_python_layer)
146       add_definitions(-DWITH_PYTHON_LAYER)
147       include_directories(SYSTEM ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})
148       list(APPEND Caffe_LINKER_LIBS ${PYTHON_LIBRARIES} ${Boost_LIBRARIES})
149     endif()
150   endif()
151 endif()
152
153 # ---[ Matlab
154 if(BUILD_matlab)
155   find_package(MatlabMex)
156   if(MATLABMEX_FOUND)
157     set(HAVE_MATLAB TRUE)
158   endif()
159
160   # sudo apt-get install liboctave-dev
161   find_program(Octave_compiler NAMES mkoctfile DOC "Octave C++ compiler")
162
163   if(HAVE_MATLAB AND Octave_compiler)
164     set(Matlab_build_mex_using "Matlab" CACHE STRING "Select Matlab or Octave if both detected")
165     set_property(CACHE Matlab_build_mex_using PROPERTY STRINGS "Matlab;Octave")
166   endif()
167 endif()
168
169 # ---[ Doxygen
170 if(BUILD_docs)
171   find_package(Doxygen)
172 endif()