| 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) |
|
|
|
|