| cmake_minimum_required(VERSION 2.8.7) |
| if(POLICY CMP0046) |
| cmake_policy(SET CMP0046 NEW) |
| endif() |
| if(POLICY CMP0054) |
| cmake_policy(SET CMP0054 NEW) |
| endif() |
|
|
| # ---[ Caffe project |
| project(Caffe C CXX) |
|
|
| # ---[ Caffe version |
| set(CAFFE_TARGET_VERSION "1.0.0" CACHE STRING "Caffe logical version") |
| set(CAFFE_TARGET_SOVERSION "1.0.0" CACHE STRING "Caffe soname version") |
| add_definitions(-DCAFFE_VERSION=${CAFFE_TARGET_VERSION}) |
|
|
| # ---[ Using cmake scripts and modules |
| list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) |
|
|
| include(ExternalProject) |
| include(GNUInstallDirs) |
|
|
| include(cmake/Utils.cmake) |
| include(cmake/Targets.cmake) |
| include(cmake/Misc.cmake) |
| include(cmake/Summary.cmake) |
| include(cmake/ConfigGen.cmake) |
|
|
| # ---[ Options |
| caffe_option(CPU_ONLY "Build Caffe without CUDA support" OFF) # TODO: rename to USE_CUDA |
| caffe_option(USE_CUDNN "Build Caffe with cuDNN library support" ON IF NOT CPU_ONLY) |
| caffe_option(USE_NCCL "Build Caffe with NCCL library support" OFF) |
| caffe_option(BUILD_SHARED_LIBS "Build shared libraries" ON) |
| caffe_option(BUILD_python "Build Python wrapper" ON) |
| set(python_version "2" CACHE STRING "Specify which Python version to use") |
| caffe_option(BUILD_matlab "Build Matlab wrapper" OFF IF UNIX OR APPLE) |
| caffe_option(BUILD_docs "Build documentation" ON IF UNIX OR APPLE) |
| caffe_option(BUILD_python_layer "Build the Caffe Python layer" ON) |
| caffe_option(USE_OPENCV "Build with OpenCV support" ON) |
| caffe_option(USE_LEVELDB "Build with levelDB" ON) |
| caffe_option(USE_LMDB "Build with lmdb" ON) |
| caffe_option(ALLOW_LMDB_NOLOCK "Allow MDB_NOLOCK when reading LMDB files (only if necessary)" OFF) |
| caffe_option(USE_OPENMP "Link with OpenMP (when your BLAS wants OpenMP and you get linker errors)" OFF) |
|
|
| # This code is taken from https://github.com/sh1r0/caffe-android-lib |
| caffe_option(USE_HDF5 "Build with hdf5" ON) |
|
|
| # ---[ Dependencies |
| include(cmake/Dependencies.cmake) |
|
|
| # ---[ Flags |
| if(UNIX OR APPLE) |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -std=c++11") |
| endif() |
|
|
| caffe_set_caffe_link() |
|
|
| if(USE_libstdcpp) |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++") |
| message("-- Warning: forcing libstdc++ (controlled by USE_libstdcpp option in cmake)") |
| endif() |
|
|
| # ---[ Warnings |
| caffe_warnings_disable(CMAKE_CXX_FLAGS -Wno-sign-compare -Wno-uninitialized) |
|
|
| # ---[ Config generation |
| configure_file(cmake/Templates/caffe_config.h.in "${PROJECT_BINARY_DIR}/caffe_config.h") |
|
|
| # ---[ Includes |
| set(Caffe_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) |
| set(Caffe_SRC_DIR ${PROJECT_SOURCE_DIR}/src) |
| include_directories(${PROJECT_BINARY_DIR}) |
|
|
| # ---[ Includes & defines for CUDA |
|
|
| # cuda_compile() does not have per-call dependencies or include pathes |
| # (cuda_compile() has per-call flags, but we set them here too for clarity) |
| # |
| # list(REMOVE_ITEM ...) invocations remove PRIVATE and PUBLIC keywords from collected definitions and include pathes |
| if(HAVE_CUDA) |
| # pass include pathes to cuda_include_directories() |
| set(Caffe_ALL_INCLUDE_DIRS ${Caffe_INCLUDE_DIRS}) |
| list(REMOVE_ITEM Caffe_ALL_INCLUDE_DIRS PRIVATE PUBLIC) |
| cuda_include_directories(${Caffe_INCLUDE_DIR} ${Caffe_SRC_DIR} ${Caffe_ALL_INCLUDE_DIRS}) |
|
|
| # add definitions to nvcc flags directly |
| if(Caffe_DEFINITIONS) |
| set(Caffe_ALL_DEFINITIONS ${Caffe_DEFINITIONS}) |
| list(REMOVE_ITEM Caffe_ALL_DEFINITIONS PRIVATE PUBLIC) |
| list(APPEND CUDA_NVCC_FLAGS ${Caffe_ALL_DEFINITIONS}) |
| endif() |
| endif() |
|
|
| # ---[ Subdirectories |
| add_subdirectory(src/gtest) |
| add_subdirectory(src/caffe) |
| add_subdirectory(tools) |
| add_subdirectory(examples) |
| add_subdirectory(python) |
| add_subdirectory(matlab) |
| add_subdirectory(docs) |
|
|
| # ---[ Linter target |
| add_custom_target(lint COMMAND ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/cmake/lint.cmake) |
|
|
| # ---[ pytest target |
| if(BUILD_python) |
| add_custom_target(pytest COMMAND python${python_version} -m unittest discover -s caffe/test WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/python ) |
| add_dependencies(pytest pycaffe) |
| endif() |
|
|
| # ---[ uninstall target |
| configure_file( |
| ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake.in |
| ${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake |
| IMMEDIATE @ONLY) |
|
|
| add_custom_target(uninstall |
| COMMAND ${CMAKE_COMMAND} -P |
| ${CMAKE_CURRENT_BINARY_DIR}/cmake/Uninstall.cmake) |
|
|
| # ---[ Configuration summary |
| caffe_print_configuration_summary() |
|
|
| # ---[ Export configs generation |
| caffe_generate_export_configs() |
|
|
|
|