|
|
|
set(Caffe_LINKER_LIBS "") |
|
set(Caffe_INCLUDE_DIRS "") |
|
set(Caffe_DEFINITIONS "") |
|
set(Caffe_COMPILE_OPTIONS "") |
|
|
|
|
|
find_package(Boost 1.54 REQUIRED COMPONENTS system thread filesystem) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${Boost_INCLUDE_DIRS}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${Boost_LIBRARIES}) |
|
|
|
|
|
find_package(Threads REQUIRED) |
|
list(APPEND Caffe_LINKER_LIBS PRIVATE ${CMAKE_THREAD_LIBS_INIT}) |
|
|
|
|
|
if(USE_OPENMP) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
find_package(OpenMP REQUIRED) |
|
list(APPEND Caffe_LINKER_LIBS PRIVATE ${OpenMP_CXX_FLAGS}) |
|
list(APPEND Caffe_COMPILE_OPTIONS PRIVATE ${OpenMP_CXX_FLAGS}) |
|
endif() |
|
|
|
|
|
include("cmake/External/glog.cmake") |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${GLOG_INCLUDE_DIRS}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${GLOG_LIBRARIES}) |
|
|
|
|
|
include("cmake/External/gflags.cmake") |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${GFLAGS_INCLUDE_DIRS}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${GFLAGS_LIBRARIES}) |
|
|
|
|
|
include(cmake/ProtoBuf.cmake) |
|
|
|
|
|
find_package(HDF5 COMPONENTS HL REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${HDF5_INCLUDE_DIRS}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES}) |
|
|
|
|
|
if(USE_HDF5) |
|
find_package(HDF5 COMPONENTS HL REQUIRED) |
|
include_directories(SYSTEM ${HDF5_INCLUDE_DIRS} ${HDF5_HL_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES}) |
|
add_definitions(-DUSE_HDF5) |
|
endif() |
|
|
|
|
|
if(USE_LMDB) |
|
find_package(LMDB REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${LMDB_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${LMDB_LIBRARIES}) |
|
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LMDB) |
|
if(ALLOW_LMDB_NOLOCK) |
|
list(APPEND Caffe_DEFINITIONS PRIVATE -DALLOW_LMDB_NOLOCK) |
|
endif() |
|
endif() |
|
|
|
|
|
if(USE_LEVELDB) |
|
find_package(LevelDB REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${LevelDB_INCLUDES}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${LevelDB_LIBRARIES}) |
|
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_LEVELDB) |
|
endif() |
|
|
|
|
|
if(USE_LEVELDB) |
|
find_package(Snappy REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PRIVATE ${Snappy_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS PRIVATE ${Snappy_LIBRARIES}) |
|
endif() |
|
|
|
|
|
include(cmake/Cuda.cmake) |
|
if(NOT HAVE_CUDA) |
|
if(CPU_ONLY) |
|
message(STATUS "-- CUDA is disabled. Building without it...") |
|
else() |
|
message(WARNING "-- CUDA is not detected by cmake. Building without it...") |
|
endif() |
|
|
|
list(APPEND Caffe_DEFINITIONS PUBLIC -DCPU_ONLY) |
|
endif() |
|
|
|
if(USE_NCCL) |
|
find_package(NCCL REQUIRED) |
|
include_directories(SYSTEM ${NCCL_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS ${NCCL_LIBRARIES}) |
|
add_definitions(-DUSE_NCCL) |
|
endif() |
|
|
|
|
|
if(USE_OPENCV) |
|
find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs) |
|
if(NOT OpenCV_FOUND) |
|
find_package(OpenCV REQUIRED COMPONENTS core highgui imgproc) |
|
endif() |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenCV_INCLUDE_DIRS}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${OpenCV_LIBS}) |
|
message(STATUS "OpenCV found (${OpenCV_CONFIG_PATH})") |
|
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_OPENCV) |
|
endif() |
|
|
|
|
|
if(NOT APPLE) |
|
set(BLAS "Atlas" CACHE STRING "Selected BLAS library") |
|
set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL") |
|
|
|
if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas") |
|
find_package(Atlas REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${Atlas_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${Atlas_LIBRARIES}) |
|
elseif(BLAS STREQUAL "Open" OR BLAS STREQUAL "open") |
|
find_package(OpenBLAS REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${OpenBLAS_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${OpenBLAS_LIB}) |
|
elseif(BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl") |
|
find_package(MKL REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${MKL_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${MKL_LIBRARIES}) |
|
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_MKL) |
|
endif() |
|
elseif(APPLE) |
|
find_package(vecLib REQUIRED) |
|
list(APPEND Caffe_INCLUDE_DIRS PUBLIC ${vecLib_INCLUDE_DIR}) |
|
list(APPEND Caffe_LINKER_LIBS PUBLIC ${vecLib_LINKER_LIBS}) |
|
|
|
if(VECLIB_FOUND) |
|
if(NOT vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*") |
|
list(APPEND Caffe_DEFINITIONS PUBLIC -DUSE_ACCELERATE) |
|
endif() |
|
endif() |
|
endif() |
|
|
|
|
|
if(BUILD_python) |
|
if(NOT "${python_version}" VERSION_LESS "3.0.0") |
|
|
|
find_package(PythonInterp 3.0) |
|
find_package(PythonLibs 3.0) |
|
find_package(NumPy 1.7.1) |
|
|
|
set(version ${PYTHONLIBS_VERSION_STRING}) |
|
|
|
STRING( REGEX REPLACE "[^0-9]" "" boost_py_version ${version} ) |
|
find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}") |
|
set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND}) |
|
|
|
while(NOT "${version}" STREQUAL "" AND NOT Boost_PYTHON_FOUND) |
|
STRING( REGEX REPLACE "([0-9.]+).[0-9]+" "\\1" version ${version} ) |
|
|
|
STRING( REGEX REPLACE "[^0-9]" "" boost_py_version ${version} ) |
|
find_package(Boost 1.46 COMPONENTS "python-py${boost_py_version}") |
|
set(Boost_PYTHON_FOUND ${Boost_PYTHON-PY${boost_py_version}_FOUND}) |
|
|
|
STRING( REGEX MATCHALL "([0-9.]+).[0-9]+" has_more_version ${version} ) |
|
if("${has_more_version}" STREQUAL "") |
|
break() |
|
endif() |
|
endwhile() |
|
if(NOT Boost_PYTHON_FOUND) |
|
find_package(Boost 1.46 COMPONENTS python) |
|
endif() |
|
else() |
|
|
|
find_package(PythonInterp 2.7) |
|
find_package(PythonLibs 2.7) |
|
find_package(NumPy 1.7.1) |
|
find_package(Boost 1.46 COMPONENTS python) |
|
endif() |
|
if(PYTHONLIBS_FOUND AND NUMPY_FOUND AND Boost_PYTHON_FOUND) |
|
set(HAVE_PYTHON TRUE) |
|
if(BUILD_python_layer) |
|
list(APPEND Caffe_DEFINITIONS PRIVATE -DWITH_PYTHON_LAYER) |
|
list(APPEND Caffe_INCLUDE_DIRS PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} PUBLIC ${Boost_INCLUDE_DIRS}) |
|
list(APPEND Caffe_LINKER_LIBS PRIVATE ${PYTHON_LIBRARIES} PUBLIC ${Boost_LIBRARIES}) |
|
endif() |
|
endif() |
|
endif() |
|
|
|
|
|
if(BUILD_matlab) |
|
find_package(MatlabMex) |
|
if(MATLABMEX_FOUND) |
|
set(HAVE_MATLAB TRUE) |
|
endif() |
|
|
|
|
|
find_program(Octave_compiler NAMES mkoctfile DOC "Octave C++ compiler") |
|
|
|
if(HAVE_MATLAB AND Octave_compiler) |
|
set(Matlab_build_mex_using "Matlab" CACHE STRING "Select Matlab or Octave if both detected") |
|
set_property(CACHE Matlab_build_mex_using PROPERTY STRINGS "Matlab;Octave") |
|
endif() |
|
endif() |
|
|
|
|
|
if(BUILD_docs) |
|
find_package(Doxygen) |
|
endif() |
|
|