2017-01-04 17:40:56 +00:00
|
|
|
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
|
2016-12-05 00:42:00 +00:00
|
|
|
|
2016-12-20 22:00:43 +00:00
|
|
|
project(Caffe2 CXX C)
|
2016-12-05 00:42:00 +00:00
|
|
|
|
|
|
|
|
# TODO(bwasti): versioning
|
|
|
|
|
|
2017-01-04 18:46:37 +00:00
|
|
|
# We want CMake to GLOB everything every time.
|
|
|
|
|
execute_process(COMMAND find "${PROJECT_SOURCE_DIR}" -name "CMakeLists.txt" -exec touch {} \;)
|
|
|
|
|
|
2016-12-05 00:42:00 +00:00
|
|
|
# Useful functions.
|
|
|
|
|
function (exclude OUTPUT INPUT)
|
|
|
|
|
set(EXCLUDES ${ARGN})
|
|
|
|
|
foreach(EXCLUDE ${EXCLUDES})
|
|
|
|
|
list(REMOVE_ITEM INPUT "${EXCLUDE}")
|
|
|
|
|
endforeach()
|
|
|
|
|
set(${OUTPUT} ${INPUT} PARENT_SCOPE)
|
|
|
|
|
endfunction(exclude)
|
|
|
|
|
|
|
|
|
|
function (prepend OUTPUT PREPEND)
|
|
|
|
|
set(OUT "")
|
|
|
|
|
foreach(ITEM ${ARGN})
|
|
|
|
|
list(APPEND OUT "${PREPEND}${ITEM}")
|
|
|
|
|
endforeach()
|
|
|
|
|
set(${OUTPUT} ${OUT} PARENT_SCOPE)
|
|
|
|
|
endfunction(prepend)
|
|
|
|
|
|
2016-12-06 16:39:15 +00:00
|
|
|
# ---[ CMake scripts + modules
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
|
|
|
|
|
|
|
|
|
|
# External projects
|
|
|
|
|
include(ExternalProject)
|
|
|
|
|
|
|
|
|
|
include(cmake/Utils.cmake)
|
|
|
|
|
|
|
|
|
|
# options
|
2016-12-12 17:29:00 +00:00
|
|
|
option(USE_NERVANA_GPU "Use Nervana GPU backend" OFF)
|
2017-01-04 07:16:50 +00:00
|
|
|
option(USE_GLOG "Use GLOG" ON)
|
|
|
|
|
option(USE_GFLAGS "Use GFLAGS" ON)
|
2016-12-12 17:29:00 +00:00
|
|
|
option(USE_LMDB "Use LMDB" ON)
|
|
|
|
|
option(USE_LEVELDB "Use LMDB" ON)
|
|
|
|
|
option(USE_OPENCV "Use openCV" ON)
|
2017-01-04 16:05:13 +00:00
|
|
|
option(USE_ZMQDB "Use ZMQ" OFF)
|
2016-12-12 17:29:00 +00:00
|
|
|
option(USE_ROCKSDB "Use RocksDB" OFF)
|
|
|
|
|
option(USE_MPI "Use MPI" OFF)
|
|
|
|
|
option(BUILD_SHARED_LIBS "Build libcaffe2.so" ON)
|
2016-12-14 15:54:15 +00:00
|
|
|
option(USE_SYSTEM_PROTOBUF "Use system-provided protobuf" ON)
|
2017-01-04 17:44:47 +00:00
|
|
|
option(USE_OPENMP "Use OpenMP for parallel code" ON)
|
2016-12-06 16:39:15 +00:00
|
|
|
|
|
|
|
|
# ---[ Dependencies
|
|
|
|
|
include(cmake/Dependencies.cmake)
|
|
|
|
|
|
2016-12-21 14:14:04 +00:00
|
|
|
# ---[ Set link flag, handle additional deps for gcc 5.x
|
2016-12-12 17:29:00 +00:00
|
|
|
if(BUILD_SHARED_LIBS)
|
2016-12-21 14:14:04 +00:00
|
|
|
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0.0)
|
|
|
|
|
message(STATUS "GCC ${CMAKE_CXX_COMPILER_VERSION}: Adding gcc and gcc_s libs to link line")
|
2017-01-04 20:03:27 +00:00
|
|
|
list(APPEND Caffe2_DEPENDENCY_LIBS gcc_s gcc)
|
2016-12-21 14:14:04 +00:00
|
|
|
endif()
|
2016-12-12 17:29:00 +00:00
|
|
|
else()
|
2016-12-21 14:14:04 +00:00
|
|
|
if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0)
|
2017-01-04 20:03:27 +00:00
|
|
|
list(APPEND Caffe2_DEPENDENCY_LIBS -Wl,--whole-archive gcc_s gcc)
|
2016-12-21 14:14:04 +00:00
|
|
|
else()
|
2017-01-04 20:03:27 +00:00
|
|
|
list(APPEND Caffe2_DEPENDENCY_LIBS -Wl,--whole-archive)
|
2016-12-21 14:14:04 +00:00
|
|
|
endif()
|
2016-12-12 17:29:00 +00:00
|
|
|
endif()
|
|
|
|
|
|
2016-12-21 14:14:04 +00:00
|
|
|
# ---[ Set output directories
|
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "binaries")
|
|
|
|
|
|
2016-12-12 17:29:00 +00:00
|
|
|
# ---[ Third party builds.
|
2016-12-05 00:42:00 +00:00
|
|
|
include_directories(${CMAKE_SOURCE_DIR})
|
|
|
|
|
|
2016-12-12 17:29:00 +00:00
|
|
|
# ---[ Old caffe protobuf.
|
2016-12-05 00:42:00 +00:00
|
|
|
add_subdirectory(caffe/proto)
|
|
|
|
|
|
2016-12-12 17:29:00 +00:00
|
|
|
# ---[ Main build
|
2016-12-05 00:42:00 +00:00
|
|
|
add_subdirectory(caffe2)
|
2016-12-08 18:23:04 +00:00
|
|
|
|
|
|
|
|
# ---[ Copy all python files to build directory
|
|
|
|
|
|
2016-12-21 14:14:04 +00:00
|
|
|
# ---[ Generate and create all needed __init__.py files as they aren't present in source tree
|
2016-12-14 15:54:15 +00:00
|
|
|
set(Caffe2_INIT_PY
|
2016-12-21 14:14:04 +00:00
|
|
|
${CMAKE_BINARY_DIR}/caffe2/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe2/python/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe2/python/mint/static/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe2/python/mint/static/css/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe2/python/mint/templates/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe2/python/mint/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe2/proto/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe/__init__.py
|
|
|
|
|
${CMAKE_BINARY_DIR}/caffe/proto/__init__.py
|
2016-12-14 15:54:15 +00:00
|
|
|
)
|
|
|
|
|
foreach(init ${Caffe2_INIT_PY})
|
2016-12-21 14:14:04 +00:00
|
|
|
# create each __init__.py file in build directory
|
|
|
|
|
file(WRITE ${init} "")
|
2016-12-14 15:54:15 +00:00
|
|
|
endforeach()
|
2016-12-21 14:14:04 +00:00
|
|
|
|
|
|
|
|
# Copy the files
|
|
|
|
|
message(STATUS ${CMAKE_BINARY_DIR})
|
|
|
|
|
# Pick up static python files
|
|
|
|
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/caffe2 DESTINATION ${CMAKE_INSTALL_PREFIX}
|
|
|
|
|
FILES_MATCHING PATTERN "*.py")
|
|
|
|
|
# Caffe proto files
|
|
|
|
|
install(DIRECTORY ${CMAKE_BINARY_DIR}/caffe DESTINATION ${CMAKE_INSTALL_PREFIX}
|
|
|
|
|
FILES_MATCHING PATTERN "*.py")
|
|
|
|
|
# Caffe2 proto files
|
|
|
|
|
install(DIRECTORY ${CMAKE_BINARY_DIR}/caffe2 DESTINATION ${CMAKE_INSTALL_PREFIX}
|
|
|
|
|
FILES_MATCHING PATTERN "*.py")
|
|
|
|
|
|