]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: enable NVMEDevice if SPDK is found
authorKefu Chai <kchai@redhat.com>
Wed, 3 Feb 2016 10:39:28 +0000 (18:39 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 4 Feb 2016 06:03:21 +0000 (14:03 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
CMakeLists.txt
src/CMakeLists.txt
src/include/config-h.in.cmake

index 674f4b00495920fd6c9f53688ed4c2ac7ee5ab17..01908e12e4c1a5bc930853dfef0490c07259bf2b 100644 (file)
@@ -138,6 +138,13 @@ find_package(xfs)
 set(HAVE_XFS ${XFS_FOUND})
 endif(${WITH_XFS})
 
+option(WITH_SPDK "Enable SPDK" OFF)
+if(WITH_SPDK)
+  find_package(pciaccess REQUIRED)
+  find_package(dpdk REQUIRED)
+  set(HAVE_SPDK TRUE)
+endif(WITH_SPDK)
+
 find_package(blkid REQUIRED)
 set(HAVE_LIBBLKID ${BLKID_FOUND})
 
index a6d83c2ba2f86d636e5859003359c28014421d23..39e0835ed79066c3cd5c1f263799336b5184ee32 100644 (file)
@@ -659,6 +659,28 @@ if(${HAVE_LIBFUSE})
   list(APPEND libos_srcs
     os/FuseStore.cc)
 endif(${HAVE_LIBFUSE})
+if(WITH_SPDK)
+  list(APPEND libos_srcs
+    os/bluestore/NVMEDevice.cc)
+endif(WITH_SPDK)
+
+if(WITH_SPDK)
+  add_custom_target(build_spdk
+    COMMAND
+    $(MAKE) DPDK_INC_DIR=${DPDK_INCLUDE_DIR}
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/spdk/lib
+    COMMENT "spdk building")
+  # TODO: should use add_library(spdk INTERFACE IMPORTED) instead in new cmake,
+  # if INTERFACE is supported.
+  foreach(lib nvme memory util)
+    add_library(spdk_${lib} STATIC IMPORTED)
+    add_dependencies(spdk_${lib} build_spdk)
+    set_target_properties(spdk_${lib} PROPERTIES
+      IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/src/spdk/lib/${lib}/libspdk_${lib}.a"
+      INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/src/spdk/include")
+    list(APPEND SPDK_LIBRARIES spdk_${lib})
+  endforeach()
+endif(WITH_SPDK)
 
 # make rocksdb statically
 add_custom_target(build_rocksdb
@@ -685,6 +707,16 @@ endif(${WITH_LTTNG})
 if(${HAVE_LIBFUSE})
   target_link_libraries(os ${FUSE_LIBRARIES})
 endif(${HAVE_LIBFUSE})
+if(WITH_SPDK)
+  target_link_libraries(os
+    ${SPDK_LIBRARIES}
+    ${DPDK_LIBRARIES}
+    ${PCIACCESS_LIBRARIES})
+  target_include_directories(os
+    PRIVATE
+    ${DPDK_INCLUDE_DIR}
+    ${PCIACCESS_INCLUDE_DIR})
+endif(WITH_SPDK)
 target_link_libraries(os kv)
 
 set(cls_references_files objclass/class_api.cc)
index 828b942ff3f7c8f232e89a85d596beb3f289b0f0..156686fcd21c54afea5c6c12c1822fdee70bcb11 100644 (file)
 /* Defined if curl headers define curl_multi_wait() */
 #cmakedefine HAVE_CURL_MULTI_WAIT 1
 
+/* Define if you have spdk */
+#cmakedefine HAVE_SPDK 1
+
 #endif /* CONFIG_H */