-function(build_pmdk)
+function(build_pmdk enable_ndctl)
include(FindMake)
find_make("MAKE_EXECUTABLE" "make_cmd")
GIT_CONFIG advice.detachedHead=false)
endif()
+ set(LIBPMEM_INTERFACE_LINK_LIBRARIES Threads::Threads)
+ if(${enable_ndctl})
+ set(ndctl "y")
+ list(APPEND LIBPMEM_INTERFACE_LINK_LIBRARIES ndctl::ndctl daxctl::daxctl)
+ else()
+ set(ndctl "n")
+ endif()
+
# Use debug PMDK libs in debug lib/rbd builds
if(CMAKE_BUILD_TYPE STREQUAL Debug)
set(PMDK_LIB_DIR "debug")
ExternalProject_Add(pmdk_ext
${source_dir_args}
CONFIGURE_COMMAND ""
- # Explicitly built w/o NDCTL, otherwise if ndtcl is present on the
- # build system tests statically linking to librbd (which uses
- # libpmemobj) will not link (because we don't build the ndctl
- # static library here).
- BUILD_COMMAND ${make_cmd} CC=${CMAKE_C_COMPILER} EXTRA_CFLAGS=-Wno-error NDCTL_ENABLE=n BUILD_EXAMPLES=n BUILD_BENCHMARKS=n DOC=n
+ BUILD_COMMAND ${make_cmd} CC=${CMAKE_C_COMPILER} EXTRA_CFLAGS=-Wno-error NDCTL_ENABLE=${ndctl} BUILD_EXAMPLES=n BUILD_BENCHMARKS=n DOC=n
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS "<SOURCE_DIR>/src/${PMDK_LIB_DIR}/libpmem.a" "<SOURCE_DIR>/src/${PMDK_LIB_DIR}/libpmemobj.a"
INSTALL_COMMAND "")
set_target_properties(pmdk::pmem PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE}
IMPORTED_LOCATION "${PMDK_LIB}/libpmem.a"
- INTERFACE_LINK_LIBRARIES Threads::Threads)
+ INTERFACE_LINK_LIBRARIES "${LIBPMEM_INTERFACE_LINK_LIBRARIES}")
# libpmemobj
add_library(pmdk::pmemobj STATIC IMPORTED GLOBAL)
endif()
if(WITH_BLUESTORE_PMEM OR WITH_RBD_RWL)
- find_package(ndctl 63 REQUIRED)
- find_package(daxctl 63 REQUIRED)
if(WITH_SYSTEM_PMDK)
set(pmdk_COMPONENTS)
if(WITH_BLUESTORE_PMEM)
find_package(pmdk 1.8 REQUIRED COMPONENTS ${pmdk_COMPONENTS})
else()
include(Buildpmdk)
- build_pmdk()
+ if(WITH_BLUESTORE_PMEM)
+ set(enable_ndctl ON)
+ find_package(ndctl 63 REQUIRED)
+ find_package(daxctl 63 REQUIRED)
+ else()
+ set(enable_ndctl OFF)
+ endif()
+ build_pmdk(${enable_ndctl})
endif()
endif()