From 4959835c075604c8f3d934dfb938ef8f56deb6e9 Mon Sep 17 00:00:00 2001 From: lixiaoy1 Date: Wed, 10 Jul 2019 11:30:47 -0400 Subject: [PATCH] cmake: Add the support to use system PMDK library Signed-off-by: Scott Peterson Signed-off-by: Xiaoyan Li --- CMakeLists.txt | 3 +++ cmake/modules/Findpmem.cmake | 45 ++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 9 ++++++++ src/os/CMakeLists.txt | 2 -- 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 cmake/modules/Findpmem.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f2041053b97..9e614ef6b39 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -272,6 +272,9 @@ include(CMakeDependentOption) CMAKE_DEPENDENT_OPTION(WITH_BLUESTORE_PMEM "Enable PMDK libraries" OFF "WITH_BLUESTORE" OFF) +CMAKE_DEPENDENT_OPTION(WITH_SYSTEM_PMDK "Require and build with system PMDK" OFF + "WITH_BLUESTORE_PMEM" OFF) + if(WITH_BLUESTORE_PMEM) set(HAVE_BLUESTORE_PMEM ON) endif() diff --git a/cmake/modules/Findpmem.cmake b/cmake/modules/Findpmem.cmake new file mode 100644 index 00000000000..8bf3c02d746 --- /dev/null +++ b/cmake/modules/Findpmem.cmake @@ -0,0 +1,45 @@ +# - Find pmem +# +# PMEM_INCLUDE_DIR - Where to find libpmem.h +# PMEM_LIBRARIES - List of libraries when using pmdk. +# pmem_FOUND - True if pmem found. +# PMEMOBJ_INCLUDE_DIR - Where to find libpmemobj.h +# PMEMOBJ_LIBRARIES - List of libraries when using pmdk obj. +# pmemobj_FOUND - True if pmemobj found. + +find_path(PMEM_INCLUDE_DIR libpmem.h) +find_library(PMEM_LIBRARIES pmem) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(pmem + DEFAULT_MSG PMEM_LIBRARIES PMEM_INCLUDE_DIR) + +mark_as_advanced( + PMEM_INCLUDE_DIR + PMEM_LIBRARIES) + +if(pmem_FOUND AND NOT TARGET pmem::pmem) + add_library(pmem::pmem UNKNOWN IMPORTED) + set_target_properties(pmem::pmem PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${PMEM_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${PMEM_LIBRARIES}") +endif() + +find_path(PMEMOBJ_INCLUDE_DIR libpmemobj.h) +find_library(PMEMOBJ_LIBRARIES pmemobj) + +find_package_handle_standard_args(pmemobj + DEFAULT_MSG PMEMOBJ_LIBRARIES PMEMOBJ_INCLUDE_DIR) + +mark_as_advanced( + PMEMOBJ_INCLUDE_DIR + PMEMOBJ_LIBRARIES) + +if(pmemobj_FOUND AND NOT TARGET pmem::pmemobj) + add_library(pmem::pmemobj UNKNOWN IMPORTED) + set_target_properties(pmem::pmemobj PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${PMEMOBJ_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${PMEMOBJ_LIBRARIES}") +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7d353a04f2e..80c07095dfb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -403,6 +403,15 @@ if(WITH_DPDK) list(APPEND ceph_common_deps common_async_dpdk) endif() +if(WITH_BLUESTORE_PMEM) + if(WITH_SYSTEM_PMDK) + find_package(pmem REQUIRED) + else() + include(Buildpmem) + build_pmem() + endif() +endif() + add_library(common STATIC ${ceph_common_objs}) target_link_libraries(common ${ceph_common_deps}) diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt index 5177d1f5467..a1dead68051 100644 --- a/src/os/CMakeLists.txt +++ b/src/os/CMakeLists.txt @@ -122,8 +122,6 @@ if(WITH_BLUESTORE) endif() if(WITH_BLUESTORE_PMEM) - include(Buildpmem) - build_pmem() target_link_libraries(os pmem::pmem) endif()