1 cmake_minimum_required(VERSION 2.8.8)
4 ### Build Options ##########################################################################
6 option(CPU_ONLY "Build Caffe without GPU support" OFF)
7 option(BUILD_PYTHON "Build Python wrapper" OFF)
8 option(BUILD_MATLAB "Build Matlab wrapper" OFF)
9 option(BUILD_EXAMPLES "Build examples" ON)
10 option(BUILD_SHARED_LIBS "Build SHARED libs if ON and STATIC otherwise" OFF)
16 if(NOT CUDA_TEST_DEVICE)
17 set(CUDA_TEST_DEVICE -1)
21 if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
22 set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Default install path" FORCE )
25 ### Configuration ###########################################################################
27 set(CMAKE_CXX_COMPILER_FLAGS ${CMAKE_CXX_COMPILER_FLAGS} -Wall)
28 set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fPIC) # set global flags
29 set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) # set debug flags
30 set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) # set release flags
33 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # clang++
34 set(CAFFE_STATIC_LINK -Wl,-force_load $(STATIC_NAME))
35 elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # g++
36 set(CAFFE_STATIC_LINK -Wl,--whole-archive caffe -Wl,--no-whole-archive)
41 add_definitions(-DCPU_ONLY)
45 set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/include)
46 include_directories(${${PROJECT_NAME}_INCLUDE_DIRS})
47 include_directories(${CMAKE_SOURCE_DIR}/src)
50 set(CMAKE_SCRIPT_DIR ${CMAKE_SOURCE_DIR}/CMakeScripts)
52 # CMake module path for custom module finding
53 set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SCRIPT_DIR})
55 ### Dependencies ##########################################################################
58 find_package(Boost 1.46 COMPONENTS system thread REQUIRED)
59 include_directories(${Boost_INCLUDE_DIR})
60 link_directories(${Boost_LIBRARY_DIRS})
64 find_package(CUDA 5.5 REQUIRED)
65 include_directories(${CUDA_INCLUDE_DIRS})
67 set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}
68 -gencode arch=compute_20,code=sm_20
69 -gencode arch=compute_20,code=sm_21
70 -gencode arch=compute_30,code=sm_30
71 -gencode arch=compute_35,code=sm_35
74 # https://github.com/ComputationalRadiationPhysics/picongpu/blob/master/src/picongpu/CMakeLists.txt
76 if(Boost_VERSION EQUAL 105500)
77 # see https://svn.boost.org/trac/boost/ticket/9392
78 message(STATUS "Boost: Applying noinline work around")
79 # avoid warning for CMake >= 2.8.12
81 "${CUDA_NVCC_FLAGS} \"-DBOOST_NOINLINE=__attribute__((noinline))\" ")
82 endif(Boost_VERSION EQUAL 105500)
86 find_package(Threads REQUIRED)
89 find_package(Glog REQUIRED)
90 include_directories(${GLOG_INCLUDE_DIRS})
93 find_package(GFlags REQUIRED)
94 include_directories(${GFLAGS_INCLUDE_DIRS})
97 if(BLAS STREQUAL "atlas")
99 find_package(Atlas REQUIRED)
100 include_directories(${Atlas_INCLUDE_DIR})
101 set(BLAS_LIBRARIES ${Atlas_LIBRARIES})
103 elseif(BLAS STREQUAL "open")
105 find_package(OpenBLAS REQUIRED)
106 include_directories(${OpenBLAS_INCLUDE_DIR})
107 set(BLAS_LIBRARIES ${OpenBLAS_LIB})
109 elseif(BLAS STREQUAL "mkl")
111 find_package(MKL REQUIRED)
112 include_directories(${MKL_INCLUDE_DIR})
113 set(BLAS_LIBRARIES ${MKL_LIBRARIES})
118 find_package(HDF5 COMPONENTS HL REQUIRED)
119 include_directories(${HDF5_INCLUDE_DIRS})
122 find_package(LevelDB REQUIRED)
123 include_directories(${LEVELDB_INCLUDE})
125 find_package(Snappy REQUIRED)
126 include_directories(${SNAPPY_INCLUDE_DIR})
134 find_package(LMDB REQUIRED)
135 include_directories(${LMDB_INCLUDE_DIR})
138 find_package(OpenCV REQUIRED)
139 include_directories(${OpenCV_INCLUDE_DIRS})
141 ### Subdirectories ##########################################################################
143 add_subdirectory(src/gtest)
144 add_subdirectory(src/caffe)
145 add_subdirectory(tools)
148 message(STATUS "Examples enabled")
149 add_subdirectory(examples)
153 message(STATUS "Python enabled")
154 add_subdirectory(python)
158 message(STATUS "Matlab enabled")
159 add_subdirectory(matlab)
162 ### Lint Target Setup ##########################################################################
164 set(LINT_TARGET lint)
165 set(LINT_SCRIPT ${CMAKE_SCRIPT_DIR}/lint.cmake)
168 COMMAND ${CMAKE_COMMAND} -P ${LINT_SCRIPT}
171 ### Install #################################################################################
174 file(GLOB folders ${${PROJECT_NAME}_INCLUDE_DIRS}/*)
175 install(DIRECTORY ${folders} DESTINATION include)