Add 'Caffe' as an external module (#195)
author박종현/동작제어Lab(SR)/Senior Engineer/삼성전자 <jh1302.park@samsung.com>
Fri, 4 May 2018 06:00:17 +0000 (15:00 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 4 May 2018 06:00:17 +0000 (15:00 +0900)
This commit adds 'Caffe' external module which builds libcaffe.so from
Caffe source (with CPU_ONLY flag).

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
cmake/packages/CaffeConfig.cmake [new file with mode: 0644]

diff --git a/cmake/packages/CaffeConfig.cmake b/cmake/packages/CaffeConfig.cmake
new file mode 100644 (file)
index 0000000..026720e
--- /dev/null
@@ -0,0 +1,76 @@
+function(_Caffe_import)
+  nncc_find_package(CaffeSource QUIET)
+
+  if(NOT CaffeSource_FOUND)
+    set(Caffe_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif(NOT CaffeSource_FOUND)
+
+  nncc_find_package(CaffeProto QUIET)
+
+  if(NOT CaffeProto_FOUND)
+    set(Caffe_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif()
+
+  find_package(Boost 1.54 COMPONENTS system thread filesystem)
+
+  if(NOT Boost_FOUND)
+    set(Caffe_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif()
+
+  find_package(HDF5 COMPONENTS HL)
+
+  if(NOT HDF5_FOUND)
+    set(Caffe_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif()
+
+  list(APPEND CMAKE_MODULE_PATH ${CaffeSource_DIR}/cmake/Modules)
+
+  find_package(Atlas)
+
+  if(NOT ATLAS_FOUND)
+    set(Caffe_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif()
+
+  find_package(Glog)
+
+  if(NOT GLOG_FOUND)
+    set(Caffe_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif()
+
+  find_package(GFlags)
+
+  if(NOT GFLAGS_FOUND)
+    set(Caffe_FOUND FALSE PARENT_SCOPE)
+    return()
+  endif()
+
+  if(NOT TARGET caffe)
+    file(GLOB CORE_SOURCES "${CaffeSource_DIR}/src/caffe/*.cpp" "${CaffeSource_DIR}/src/caffe/util/*.cpp")
+    file(GLOB LAYER_SOURCES "${CaffeSource_DIR}/src/caffe/layers/*.cpp")
+
+    add_library(caffe SHARED ${CORE_SOURCES} ${LAYER_SOURCES})
+    target_compile_definitions(caffe PUBLIC CPU_ONLY)
+    target_include_directories(caffe PUBLIC ${CaffeSource_DIR}/include)
+    target_include_directories(caffe PRIVATE ${Boost_INCLUDE_DIRS})
+    target_include_directories(caffe PRIVATE ${GLOG_INCLUDE_DIRS})
+    target_include_directories(caffe PRIVATE ${GFLAGS_INCLUDE_DIRS})
+    target_include_directories(caffe PRIVATE ${HDF5_INCLUDE_DIRS})
+    target_include_directories(caffe PRIVATE ${Atlas_INCLUDE_DIRS})
+    target_link_libraries(caffe caffeproto)
+    target_link_libraries(caffe ${GLOG_LIBRARIES})
+    target_link_libraries(caffe ${GFLAGS_LIBRARIES})
+    target_link_libraries(caffe ${Boost_LIBRARIES})
+    target_link_libraries(caffe ${HDF5_LIBRARIES} ${HDF5_HL_LIBRARIES})
+    target_link_libraries(caffe ${Atlas_LIBRARIES})
+  endif(NOT TARGET caffe)
+
+  set(Caffe_FOUND TRUE PARENT_SCOPE)
+endfunction(_Caffe_import)
+
+_Caffe_import()