Merge branch 'master' into cmake

This commit is contained in:
Bram Wasti
2017-01-04 12:06:39 -08:00
committed by GitHub
6 changed files with 60 additions and 45 deletions

View File

@ -53,15 +53,13 @@ include(cmake/Dependencies.cmake)
if(BUILD_SHARED_LIBS)
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")
set(Caffe2_LINK Caffe2_CPU Caffe_PROTO Caffe2_PROTO gcc_s gcc)
else()
set(Caffe2_LINK Caffe2_CPU Caffe_PROTO Caffe2_PROTO)
list(APPEND Caffe2_DEPENDENCY_LIBS gcc_s gcc)
endif()
else()
if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0)
set(Caffe2_LINK -Wl,--whole-archive Caffe2_CPU Caffe_PROTO Caffe2_PROTO gcc_s gcc -Wl,--no-whole-archive)
list(APPEND Caffe2_DEPENDENCY_LIBS -Wl,--whole-archive gcc_s gcc)
else()
set(Caffe2_LINK -Wl,--whole-archive Caffe2_CPU Caffe_PROTO Caffe2_PROTO -Wl,--no-whole-archive)
list(APPEND Caffe2_DEPENDENCY_LIBS -Wl,--whole-archive)
endif()
endif()

View File

@ -11,14 +11,12 @@ set(Caffe2_GPU_SRCS)
set(Caffe2_CPU_TEST_SRCS)
set(Caffe2_GPU_TEST_SRCS)
# ---[ Protobuf
set(Caffe2_LINK_LIBS Caffe_PROTO)
# Compile protobufs.
add_subdirectory(proto)
include_directories(BEFORE ${CMAKE_BINARY_DIR})
list(APPEND Caffe2_LINK_LIBS Caffe2_PROTO)
# Get all source directories.
# TODO(bwasti): GLOB is not considered best practice.
file(GLOB Caffe2_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/*)
# Exclude all excluded directories.
exclude(Caffe2_DIRS "${Caffe2_DIRS}" ${Caffe2_DIR_EXCLUDES})
# ---[ Add respective subdirectories
# Note: the folders that are being commented out have not been properly
@ -54,28 +52,47 @@ foreach(tmp ${Caffe2_GPU_SRCS})
message(STATUS " " ${tmp})
endforeach()
exclude(Caffe2_CPU_SRCS "${Caffe2_CPU_SRCS}" ${Caffe2_FILE_EXCLUDES})
exclude(Caffe2_CPU_SRCS "${Caffe2_CPU_SRCS}" ${Caffe2_GPU_SRCS})
exclude(Caffe2_CPU_SRCS "${Caffe2_CPU_SRCS}" ${Caffe2_CPU_TEST_SRCS})
exclude(Caffe2_CPU_SRCS "${Caffe2_CPU_SRCS}" ${Caffe2_GPU_TEST_SRCS})
if (NOT USE_LEVELDB)
exclude(Caffe2_CPU_SRCS "${Caffe2_CPU_SRCS}" ${Caffe2_LEVELDB_SRCS})
endif()
if (NOT USE_LMDB)
exclude(Caffe2_CPU_SRCS "${Caffe2_CPU_SRCS}" ${Caffe2_LMDB_SRCS})
endif()
# ---[ List of libraries to link with
set(Caffe2_MAIN_LIBS Caffe_PROTO)
# Compile protobufs.
add_subdirectory(proto)
include_directories(BEFORE ${CMAKE_BINARY_DIR})
list(APPEND Caffe2_MAIN_LIBS Caffe2_PROTO)
# Compile exposed libraries.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fPIC")
add_library(Caffe2_CPU ${Caffe2_CPU_SRCS})
target_link_libraries(Caffe2_CPU ${Caffe2_LINK_LIBS} ${Caffe2_LINKER_LIBS})
target_link_libraries(Caffe2_CPU ${Caffe2_MAIN_LIBS} ${Caffe2_DEPENDENCY_LIBS})
install(TARGETS Caffe2_CPU DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
list(APPEND Caffe2_LINK_LIBS Caffe2_CPU)
list(APPEND Caffe2_MAIN_LIBS Caffe2_CPU)
# ---[ CUDA library
if(HAVE_CUDA)
CUDA_ADD_LIBRARY(Caffe2_GPU ${Caffe2_GPU_SRCS})
target_link_libraries(Caffe2_GPU ${Caffe2_LINK_LIBS} ${Caffe2_LINKER_LIBS})
target_link_libraries(Caffe2_GPU ${Caffe2_MAIN_LIBS} ${Caffe2_DEPENDENCY_LIBS})
install(TARGETS Caffe2_GPU DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
link_directories(${CMAKE_INSTALL_PREFIX}/lib)
list(APPEND Caffe2_LINK_LIBS Caffe2_GPU)
list(APPEND Caffe2_LINK Caffe2_GPU)
list(APPEND Caffe2_MAIN_LIBS Caffe2_GPU)
endif()
# Compile test binaries.
foreach(test_src ${Caffe2_CPU_TEST_SRCS})
get_filename_component(test_name ${test_src} NAME_WE)
add_executable(${test_name} "${test_src}")
target_link_libraries(${test_name} ${Caffe2_LINK} gtest_main)
target_link_libraries(${test_name} ${Caffe2_MAIN_LIBS} ${Caffe2_DEPENDENCY_LIBS} gtest_main)
if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.0)
target_compile_features(${test_name} PRIVATE cxx_range_for)
endif()
@ -151,7 +168,7 @@ endif()
foreach(binary_src ${Caffe2_CPU_BINARY_SRCS})
get_filename_component(bin_name ${binary_src} NAME_WE)
add_executable(${bin_name} ${binary_src})
target_link_libraries(${bin_name} ${Caffe2_LINK} benchmark ${Caffe2_LINKER_LIBS})
target_link_libraries(${bin_name} ${Caffe2_MAIN_LIBS} benchmark ${Caffe2_DEPENDENCY_LIBS})
install(TARGETS ${bin_name} DESTINATION ${CMAKE_INSTALL_PREFIX}/binaries)
endforeach()
@ -159,7 +176,7 @@ if(HAVE_CUDA)
foreach(binary_src ${Caffe2_GPU_BINARY_SRCS})
get_filename_component(bin_name ${binary_src} NAME_WE)
add_executable(${bin_name} ${binary_src})
target_link_libraries(${bin_name} ${Caffe2_LINK} cnmem benchmark ${Caffe2_LINKER_LIBS})
target_link_libraries(${bin_name} ${Caffe2_MAIN_LIBS} cnmem benchmark ${Caffe2_DEPENDENCY_LIBS})
install(TARGETS ${bin_name} DESTINATION ${CMAKE_INSTALL_PREFIX}/binaries)
endforeach()
endif()

View File

@ -11,12 +11,12 @@ prepend(Caffe2_PYTHON_GPU_SRC ${CMAKE_CURRENT_SOURCE_DIR} ${Caffe2_PYTHON_GPU_SR
add_library(caffe2_pybind11_state SHARED ${Caffe2_PYTHON_CPU_SRC})
set_target_properties(caffe2_pybind11_state PROPERTIES PREFIX "")
target_link_libraries(caffe2_pybind11_state ${Caffe2_LINK})
target_link_libraries(caffe2_pybind11_state ${Caffe2_MAIN_LIBS} ${Caffe2_DEPENDENCY_LIBS})
install(TARGETS caffe2_pybind11_state DESTINATION ${CMAKE_INSTALL_PREFIX}/caffe2/python)
if(HAVE_CUDA)
add_library(caffe2_pybind11_state_gpu SHARED ${Caffe2_PYTHON_GPU_SRC})
set_target_properties(caffe2_pybind11_state_gpu PROPERTIES PREFIX "")
target_link_libraries(caffe2_pybind11_state_gpu ${Caffe2_LINK})
target_link_libraries(caffe2_pybind11_state_gpu ${Caffe2_MAIN_LIBS} ${Caffe2_DEPENDENCY_LIBS})
install(TARGETS caffe2_pybind11_state_gpu DESTINATION ${CMAKE_INSTALL_PREFIX}/caffe2/python)
endif()

View File

@ -172,7 +172,7 @@ if (${CUDA_VERSION} LESS 8.0)
list(APPEND CUDA_NVCC_FLAGS "-D__STRICT_ANSI__")
endif()
include_directories(SYSTEM ${CUDA_INCLUDE_DIRS})
list(APPEND Caffe2_LINKER_LIBS ${CUDA_CUDART_LIBRARY}
list(APPEND Caffe2_DEPENDENCY_LIBS ${CUDA_CUDART_LIBRARY}
${CUDA_curand_LIBRARY} ${CUDA_CUBLAS_LIBRARIES})
# find libcuda.so and lbnvrtc.so
@ -193,13 +193,13 @@ message(STATUS "Added CUDA NVCC flags for: ${NVCC_FLAGS_EXTRA_readable}")
if(CUDA_CUDA_LIB)
message(STATUS "Found libcuda: ${CUDA_CUDA_LIB}")
list(APPEND Caffe2_LINKER_LIBS ${CUDA_CUDA_LIB})
list(APPEND Caffe2_DEPENDENCY_LIBS ${CUDA_CUDA_LIB})
else()
message(FATAL_ERROR "Cannot find libcuda.so. Please file an issue on https://github.com/caffe2/caffe2 with your build output.")
endif()
if(CUDA_NVRTC_LIB)
message(STATUS "Found libnvrtc: ${CUDA_NVRTC_LIB}")
list(APPEND Caffe2_LINKER_LIBS ${CUDA_NVRTC_LIB})
list(APPEND Caffe2_DEPENDENCY_LIBS ${CUDA_NVRTC_LIB})
else()
message(FATAL_ERROR "Cannot find libnvrtc.so. Please file an issue on https://github.com/caffe2/caffe2 with your build output.")
endif()

View File

@ -1,12 +1,12 @@
# This list is required for static linking and exported to Caffe2Config.cmake
set(Caffe2_LINKER_LIBS "")
set(Caffe2_DEPENDENCY_LIBS "")
# ---[ Custom Protobuf
include("cmake/ProtoBuf.cmake")
# ---[ Threads
find_package(Threads REQUIRED)
list(APPEND Caffe2_LINKER_LIBS ${CMAKE_THREAD_LIBS_INIT})
list(APPEND Caffe2_DEPENDENCY_LIBS ${CMAKE_THREAD_LIBS_INIT})
# ---[ BLAS
set(BLAS "Eigen" CACHE STRING "Selected BLAS library")
@ -19,18 +19,18 @@ if(BLAS STREQUAL "Eigen")
elseif(BLAS STREQUAL "ATLAS")
find_package(Atlas REQUIRED)
include_directories(SYSTEM ${ATLAS_INCLUDE_DIRS})
list(APPEND Caffe2_LINKER_LIBS ${ATLAS_LIBRARIES})
list(APPEND Caffe2_LINKER_LIBS cblas)
list(APPEND Caffe2_DEPENDENCY_LIBS ${ATLAS_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS cblas)
elseif(BLAS STREQUAL "OpenBLAS")
find_package(OpenBLAS REQUIRED)
include_directories(SYSTEM ${OpenBLAS_INCLUDE_DIR})
list(APPEND Caffe2_LINKER_LIBS ${OpenBLAS_LIB})
list(APPEND Caffe2_LINKER_LIBS cblas)
list(APPEND Caffe2_DEPENDENCY_LIBS ${OpenBLAS_LIB})
list(APPEND Caffe2_DEPENDENCY_LIBS cblas)
elseif(BLAS STREQUAL "MKL")
find_package(MKL REQUIRED)
include_directories(SYSTEM ${MKL_INCLUDE_DIR})
list(APPEND Caffe2_LINKER_LIBS ${MKL_LIBRARIES})
list(APPEND Caffe2_LINKER_LIBS cblas)
list(APPEND Caffe2_DEPENDENCY_LIBS ${MKL_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS cblas)
add_definitions(-DCAFFE2_USE_MKL)
else()
message(FATAL_ERROR "Unrecognized blas option:" ${BLAS})
@ -42,7 +42,7 @@ if (USE_GLOG)
if (GLOG_FOUND)
add_definitions(-DCAFFE2_USE_GOOGLE_GLOG)
include_directories(SYSTEM ${GLOG_INCLUDE_DIRS})
list(APPEND Caffe2_LINKER_LIBS ${GLOG_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${GLOG_LIBRARIES})
endif()
endif()
@ -52,7 +52,7 @@ if (USE_GFLAGS)
if (GFLAGS_FOUND)
add_definitions(-DCAFFE2_USE_GFLAGS)
include_directories(SYSTEM ${GFLAGS_INCLUDE_DIRS})
list(APPEND Caffe2_LINKER_LIBS ${GFLAGS_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${GFLAGS_LIBRARIES})
endif()
endif()
@ -68,21 +68,21 @@ include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/third_party/benchmark/include)
if(USE_LMDB)
find_package(LMDB REQUIRED)
include_directories(SYSTEM ${LMDB_INCLUDE_DIR})
list(APPEND Caffe2_LINKER_LIBS ${LMDB_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${LMDB_LIBRARIES})
endif()
# ---[ LevelDB
if(USE_LEVELDB)
find_package(LevelDB REQUIRED)
include_directories(SYSTEM ${LevelDB_INCLUDE})
list(APPEND Caffe2_LINKER_LIBS ${LevelDB_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${LevelDB_LIBRARIES})
endif()
# ---[ Snappy
if(USE_LEVELDB)
find_package(Snappy REQUIRED)
include_directories(SYSTEM ${Snappy_INCLUDE_DIR})
list(APPEND Caffe2_LINKER_LIBS ${Snappy_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${Snappy_LIBRARIES})
endif()
# ---[ OpenCV
@ -94,7 +94,7 @@ if(USE_OPENCV)
find_package(OpenCV QUIET COMPONENTS core highgui imgproc)
endif()
include_directories(SYSTEM ${OpenCV_INCLUDE_DIRS})
list(APPEND Caffe2_LINKER_LIBS ${OpenCV_LIBS})
list(APPEND Caffe2_DEPENDENCY_LIBS ${OpenCV_LIBS})
message(STATUS "OpenCV found (${OpenCV_CONFIG_PATH})")
endif()
@ -107,7 +107,7 @@ find_package(PythonLibs 2.7)
find_package(NumPy REQUIRED)
include_directories(SYSTEM ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR})
list(APPEND Caffe2_LINKER_LIBS ${PYTHON_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${PYTHON_LIBRARIES})
# ---[ pybind11
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/third_party/pybind11/include)
@ -117,7 +117,7 @@ if(USE_MPI)
find_package(MPI)
if(MPI_CXX_FOUND)
include_directories(SYSTEM ${MPI_CXX_INCLUDE_PATH})
list(APPEND Caffe2_LINKER_LIBS ${MPI_CXX_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${MPI_CXX_LIBRARIES})
set(CMAKE_EXE_LINKER_FLAGS ${MPI_CXX_LINK_FLAGS})
endif()
endif()
@ -141,7 +141,7 @@ if(HAVE_CUDA)
find_package(CuDNN REQUIRED)
if(CUDNN_FOUND)
include_directories(SYSTEM ${CUDNN_INCLUDE_DIRS})
list(APPEND Caffe2_LINKER_LIBS ${CUDNN_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${CUDNN_LIBRARIES})
endif()
endif()
@ -150,7 +150,7 @@ if(HAVE_CUDA)
include("cmake/External/nccl.cmake")
include_directories(SYSTEM ${NCCL_INCLUDE_DIRS})
message(STATUS "NCCL: ${NCCL_LIBRARIES}")
list(APPEND Caffe2_LINKER_LIBS ${NCCL_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${NCCL_LIBRARIES})
endif()
# ---[ CUB
@ -164,5 +164,5 @@ if(HAVE_CUDA)
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/third_party/cnmem/include)
# message(STATUS "cnmem: ${CMAKE_SOURCE_DIR}/third_party/cnmem/libcnmem.so")
# message(STATUS "${CMAKE_CURRENT_BINARY_DIR}")
list(APPEND Caffe2_LINKER_LIBS "${CMAKE_CURRENT_BINARY_DIR}/third_party/cnmem/libcnmem.so")
list(APPEND Caffe2_DEPENDENCY_LIBS "${CMAKE_CURRENT_BINARY_DIR}/third_party/cnmem/libcnmem.so")
endif()

View File

@ -3,7 +3,7 @@
find_package( Protobuf REQUIRED )
include_directories(SYSTEM ${PROTOBUF_INCLUDE_DIR})
list(APPEND Caffe2_LINKER_LIBS ${PROTOBUF_LIBRARIES})
list(APPEND Caffe2_DEPENDENCY_LIBS ${PROTOBUF_LIBRARIES})
# place where to generate protobuf sources
set(proto_gen_folder "${PROJECT_BINARY_DIR}/include/caffe/proto")