ceph/cmake/modules/Buildpmdk.cmake
Yin Congmin a84a2e1091 cmake: rename a series of pmem libraries to pmdk
At first, libpmem was the only library. Later, pmem related libraries
such as libpmemobj and libpmem2 were gradually added. These libraries
were also integrated into one named pmdk. So rename to pmdk.

Signed-off-by: Yin Congmin <congmin.yin@intel.com>
2022-06-28 01:16:33 +08:00

61 lines
2.1 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()
# 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()
include(ExternalProject)
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_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 Threads::Threads)
# 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()