|
if(NOT HAVE_PYTHON) |
|
message(STATUS "Python interface is disabled or not all required dependencies found. Building without it...") |
|
return() |
|
endif() |
|
|
|
file(GLOB_RECURSE python_srcs ${PROJECT_SOURCE_DIR}/python/*.cpp) |
|
|
|
add_library(pycaffe SHARED ${python_srcs}) |
|
caffe_default_properties(pycaffe) |
|
set_target_properties(pycaffe PROPERTIES PREFIX "" OUTPUT_NAME "_caffe") |
|
target_include_directories(pycaffe PUBLIC ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR}) |
|
target_link_libraries(pycaffe PUBLIC ${Caffe_LINK} ${PYTHON_LIBRARIES}) |
|
|
|
if(UNIX OR APPLE) |
|
set(__linkname "${PROJECT_SOURCE_DIR}/python/caffe/_caffe.so") |
|
add_custom_command(TARGET pycaffe POST_BUILD |
|
COMMAND ln -sf $<TARGET_LINKER_FILE:pycaffe> "${__linkname}" |
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/python/caffe/proto |
|
COMMAND touch ${PROJECT_SOURCE_DIR}/python/caffe/proto/__init__.py |
|
COMMAND cp ${proto_gen_folder}/*.py ${PROJECT_SOURCE_DIR}/python/caffe/proto/ |
|
COMMENT "Creating symlink ${__linkname} -> ${PROJECT_BINARY_DIR}/lib/_caffe${Caffe_POSTFIX}.so") |
|
endif() |
|
|
|
# ---[ Install |
|
# scripts |
|
file(GLOB python_files *.py requirements.txt) |
|
install(FILES ${python_files} DESTINATION python) |
|
|
|
# module |
|
install(DIRECTORY caffe |
|
DESTINATION python |
|
FILES_MATCHING |
|
PATTERN "*.py" |
|
PATTERN "ilsvrc_2012_mean.npy" |
|
PATTERN "test" EXCLUDE |
|
) |
|
|
|
# _caffe.so |
|
install(TARGETS pycaffe DESTINATION python/caffe) |
|
|
|
|