diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a545b82977..a4e3a9615ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,13 +44,25 @@ option(USE_SYSTEM_PROTOBUF "Use system-provided protobuf" ON) # ---[ Dependencies include(cmake/Dependencies.cmake) -# ---[ Set link flag +# ---[ Set link flag, handle additional deps for gcc 5.x if(BUILD_SHARED_LIBS) - set(Caffe2_LINK Caffe2_CPU Caffe2_GPU Caffe_PROTO Caffe2_PROTO) + 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 Caffe2_GPU Caffe_PROTO Caffe2_PROTO gcc_s gcc) + else() + set(Caffe2_LINK Caffe2_CPU Caffe2_GPU Caffe_PROTO Caffe2_PROTO) + endif() else() - set(Caffe2_LINK -Wl,--whole-archive Caffe2_CPU Caffe2_GPU Caffe_PROTO Caffe2_PROTO -Wl,--no-whole-archive) + if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0) + set(Caffe2_LINK -Wl,--whole-archive Caffe2_CPU Caffe2_GPU Caffe_PROTO Caffe2_PROTO gcc_s gcc -Wl,--no-whole-archive) + else() + set(Caffe2_LINK -Wl,--whole-archive Caffe2_CPU Caffe2_GPU Caffe_PROTO Caffe2_PROTO -Wl,--no-whole-archive) + endif() endif() +# ---[ Set output directories +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "binaries") + # ---[ Third party builds. include_directories(${CMAKE_SOURCE_DIR}) @@ -61,22 +73,33 @@ add_subdirectory(caffe/proto) add_subdirectory(caffe2) # ---[ Copy all python files to build directory -# Copy the files -install(DIRECTORY ${CMAKE_SOURCE_DIR} DESTINATION ${CMAKE_INSTALL_PREFIX} - FILES_MATCHING PATTERN "*.py") -# ---[ Generate all needed __init__.py files +# ---[ Generate and create all needed __init__.py files as they aren't present in source tree set(Caffe2_INIT_PY - ${CMAKE_INSTALL_PREFIX}/caffe2/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe2/python/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe2/python/mint/static/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe2/python/mint/static/css/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe2/python/mint/templates/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe2/python/mint/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe2/proto/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe/__init__.py - ${CMAKE_INSTALL_PREFIX}/caffe/proto/__init__.py + ${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 ) foreach(init ${Caffe2_INIT_PY}) - file(WRITE ${init} "") + # create each __init__.py file in build directory + file(WRITE ${init} "") endforeach() + +# 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") + diff --git a/caffe/proto/CMakeLists.txt b/caffe/proto/CMakeLists.txt index 68f5ecd36dc..11ae84f30a7 100644 --- a/caffe/proto/CMakeLists.txt +++ b/caffe/proto/CMakeLists.txt @@ -6,6 +6,7 @@ caffe_protobuf_generate_cpp_py(${CMAKE_CURRENT_BINARY_DIR} Caffe_PROTO_SRCS Caff add_library(Caffe_PROTO SHARED ${Caffe_PROTO_HEADERS} ${Caffe_PROTO_SRCS}) target_include_directories(Caffe_PROTO PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) +install(TARGETS Caffe_PROTO DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) if(USE_SYSTEM_PROTOBUF) target_link_libraries(Caffe_PROTO protobuf) diff --git a/caffe2/CMakeLists.txt b/caffe2/CMakeLists.txt index 8ffd90b3244..22c4ca545b3 100644 --- a/caffe2/CMakeLists.txt +++ b/caffe2/CMakeLists.txt @@ -112,6 +112,7 @@ list(APPEND Caffe2_LINK_LIBS Caffe2_PROTO) LIST(APPEND CMAKE_CXX_FLAGS "-std=c++11 -fPIC") add_library(Caffe2_CPU ${Caffe2_CPU_SRCS}) target_link_libraries(Caffe2_CPU ${Caffe2_LINK_LIBS} glog gflags ${Caffe2_LINKER_LIBS}) +install(TARGETS Caffe2_CPU DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) list(APPEND Caffe2_LINK_LIBS Caffe2_CPU) # ---[ CUDA library @@ -119,6 +120,7 @@ if(HAVE_CUDA) CUDA_ADD_LIBRARY(Caffe2_GPU ${Caffe2_GPU_SRCS}) target_link_libraries(Caffe2_GPU ${Caffe2_LINK_LIBS} glog gflags ${Caffe2_LINKER_LIBS}) list(APPEND Caffe2_LINK_LIBS Caffe2_GPU) + install(TARGETS Caffe2_GPU DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) endif() # Compile test binaries. @@ -127,6 +129,7 @@ foreach(test_src ${Caffe2_CPU_TEST_SRCS}) add_executable(${test_name} "${test_src}") target_link_libraries(${test_name} ${Caffe2_LINK} gtest_main) target_compile_features(${test_name} PRIVATE cxx_range_for) + install(TARGETS ${test_name} DESTINATION ${CMAKE_INSTALL_PREFIX}/test) endforeach() # ---[ Python @@ -161,6 +164,7 @@ foreach(binary_src ${Caffe2_BINARY_SRCS}) get_filename_component(bin_name ${binary_src} NAME_WE) add_executable(${bin_name} ${binary_src}) target_link_libraries(${bin_name} ${Caffe2_LINK} glog cnmem ${Caffe2_LINKER_LIBS}) + install(TARGETS ${bin_name} DESTINATION ${CMAKE_INSTALL_PREFIX}/binaries) endforeach() diff --git a/caffe2/proto/CMakeLists.txt b/caffe2/proto/CMakeLists.txt index 6c3d8f025cc..1f885fdd97d 100644 --- a/caffe2/proto/CMakeLists.txt +++ b/caffe2/proto/CMakeLists.txt @@ -6,6 +6,7 @@ caffe_protobuf_generate_cpp_py(${CMAKE_CURRENT_BINARY_DIR} Caffe2_PROTO_SRCS Caf add_library(Caffe2_PROTO SHARED ${Caffe2_PROTO_HEADERS} ${Caffe2_PROTO_SRCS}) target_include_directories(Caffe2_PROTO PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) +install(TARGETS Caffe2_PROTO DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) if (USE_SYSTEM_PROTOBUF) target_link_libraries(Caffe2_PROTO protobuf) diff --git a/caffe2/python/CMakeLists.txt b/caffe2/python/CMakeLists.txt index 508baf11437..f734a586213 100644 --- a/caffe2/python/CMakeLists.txt +++ b/caffe2/python/CMakeLists.txt @@ -9,8 +9,12 @@ set(Caffe2_PYTHON_GPU_SRC prepend(Caffe2_PYTHON_CPU_SRC ${CMAKE_CURRENT_SOURCE_DIR} ${Caffe2_PYTHON_CPU_SRC}) prepend(Caffe2_PYTHON_GPU_SRC ${CMAKE_CURRENT_SOURCE_DIR} ${Caffe2_PYTHON_GPU_SRC}) -add_library(Caffe2_PYTHON_CPU SHARED ${Caffe2_PYTHON_CPU_SRC}) -target_link_libraries(Caffe2_PYTHON_CPU Caffe2_PROTO) +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}) +install(TARGETS caffe2_pybind11_state DESTINATION ${CMAKE_INSTALL_PREFIX}/caffe2/python) -add_library(Caffe2_PYTHON_GPU SHARED ${Caffe2_PYTHON_GPU_SRC}) -target_link_libraries(Caffe2_PYTHON_GPU Caffe2_PROTO) +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}) +install(TARGETS caffe2_pybind11_state_gpu DESTINATION ${CMAKE_INSTALL_PREFIX}/caffe2/python)