/cmake/Dependencies.cmake

https://gitlab.com/admin-github-cloud/caffe · CMake · 178 lines · 133 code · 24 blank · 21 comment · 23 complexity · 5494eb07891307dfae45c025e3bca774 MD5 · raw file

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