From: Kefu Chai Date: Wed, 3 Feb 2016 10:39:28 +0000 (+0800) Subject: cmake: enable NVMEDevice if SPDK is found X-Git-Tag: v10.0.4~45^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ecb1256968633c2a6e98be8ac80d550ad48e7b76;p=ceph.git cmake: enable NVMEDevice if SPDK is found Signed-off-by: Kefu Chai --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 674f4b004959..01908e12e4c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a6d83c2ba2f8..39e0835ed790 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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) diff --git a/src/include/config-h.in.cmake b/src/include/config-h.in.cmake index 828b942ff3f7..156686fcd21c 100644 --- a/src/include/config-h.in.cmake +++ b/src/include/config-h.in.cmake @@ -276,4 +276,7 @@ /* 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 */