ceph-mirror/cmake/modules/Buildpmdk.cmake
Kefu Chai 80b9067286 blk,build: drop BlueStore PMEM support
BlueStore's PMEMDevice backend targets byte-addressable persistent
memory exposed as a DAX device, in practice Intel Optane DC persistent
memory. Intel Optane has been discontinued since 2021 and there is no
mainstream replacement, so the backend has effectively no hardware left
to run on. It was always experimental and has seen no functional change
since the DML/DSA offload landed in 2022; every commit to it since has
been a formatting sweep.

Keeping it builds in a chain of dependencies that nothing else needs:
libpmem, libndctl and libdaxctl, plus dml for the DSA offload that only
works on a Sapphire Rapids CPU. Remove the backend and everything tied
to it.

RBD persistent write-back cache (WITH_RBD_RWL) still uses PMDK's
libpmemobj, so the pmdk submodule, WITH_SYSTEM_PMDK, Buildpmdk and
Findpmdk stay. WITH_SYSTEM_PMDK now depends on WITH_RBD_RWL alone, and
Buildpmdk no longer builds ndctl support.

- remove the WITH_BLUESTORE_PMEM option, HAVE_BLUESTORE_PMEM and
  HAVE_LIBDML
- delete src/blk/pmem/PMEMDevice.{cc,h} and the pmem block_device_t
- drop the pmem value from the bdev_type option
- remove the --bluestore-pmem vstart flag
- drop the libpmem, libndctl and libdaxctl build deps from debian and
  rpm, keeping libpmemobj for RWL
- delete the Finddml, Findndctl and Finddaxctl cmake modules
- remove the DSA/DML and ndctl documentation

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-05 08:37:21 +08:00

60 lines
2.0 KiB
CMake

function(build_pmdk)
include(FindMake)
find_make("MAKE_EXECUTABLE" "make_cmd")
if(EXISTS "${PROJECT_SOURCE_DIR}/src/pmdk/Makefile")
set(source_dir_args
SOURCE_DIR "${PROJECT_SOURCE_DIR}/src/pmdk")
else()
set(source_dir_args
SOURCE_DIR ${CMAKE_BINARY_DIR}/src/pmdk
GIT_REPOSITORY https://github.com/ceph/pmdk.git
GIT_TAG "1.10"
GIT_SHALLOW TRUE
GIT_CONFIG advice.detachedHead=false)
endif()
set(LIBPMEM_INTERFACE_LINK_LIBRARIES Threads::Threads)
# Use debug PMDK libs in debug lib/rbd builds
if(CMAKE_BUILD_TYPE STREQUAL Debug)
set(PMDK_LIB_DIR "debug")
else()
set(PMDK_LIB_DIR "nondebug")
endif()
set(pmdk_cflags "-Wno-error -fno-lto")
include(ExternalProject)
ExternalProject_Add(pmdk_ext
${source_dir_args}
CONFIGURE_COMMAND ""
BUILD_COMMAND ${make_cmd} CC=${CMAKE_C_COMPILER} "EXTRA_CFLAGS=${pmdk_cflags}" NDCTL_ENABLE=n 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 "")
unset(make_cmd)
ExternalProject_Get_Property(pmdk_ext source_dir)
set(PMDK_SRC "${source_dir}/src")
set(PMDK_INCLUDE "${source_dir}/src/include")
set(PMDK_LIB "${source_dir}/src/${PMDK_LIB_DIR}")
# libpmem
add_library(pmdk::pmem STATIC IMPORTED GLOBAL)
add_dependencies(pmdk::pmem pmdk_ext)
file(MAKE_DIRECTORY ${PMDK_INCLUDE})
find_package(Threads)
set_target_properties(pmdk::pmem PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE}
IMPORTED_LOCATION "${PMDK_LIB}/libpmem.a"
INTERFACE_LINK_LIBRARIES "${LIBPMEM_INTERFACE_LINK_LIBRARIES}")
# libpmemobj
add_library(pmdk::pmemobj STATIC IMPORTED GLOBAL)
add_dependencies(pmdk::pmemobj pmdk_ext)
set_target_properties(pmdk::pmemobj PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE}
IMPORTED_LOCATION "${PMDK_LIB}/libpmemobj.a"
INTERFACE_LINK_LIBRARIES "pmdk::pmem;${CMAKE_THREAD_LIBS_INIT}")
endfunction()