2 include(ExternalProject)
3 set(PMDK_SRC "${CMAKE_BINARY_DIR}/src/pmdk/src")
4 set(PMDK_INCLUDE "${PMDK_SRC}/include")
6 # Use debug PMDK libs in debug lib/rbd builds
7 if(CMAKE_BUILD_TYPE STREQUAL Debug)
8 set(PMDK_LIB_DIR "debug")
10 set(PMDK_LIB_DIR "nondebug")
12 set(PMDK_LIB "${PMDK_SRC}/${PMDK_LIB_DIR}")
14 ExternalProject_Add(pmdk_ext
15 GIT_REPOSITORY "https://github.com/ceph/pmdk.git"
17 SOURCE_DIR ${CMAKE_BINARY_DIR}/src/pmdk
19 # Explicitly built w/o NDCTL, otherwise if ndtcl is present on the
20 # build system tests statically linking to librbd (which uses
21 # libpmemobj) will not link (because we don't build the ndctl
22 # static library here).
23 BUILD_COMMAND $(MAKE) NDCTL_ENABLE=n
25 BUILD_BYPRODUCTS "${PMDK_LIB}/libpmem.a" "${PMDK_LIB}/libpmemobj.a"
26 INSTALL_COMMAND "true")
29 add_library(pmem::pmem STATIC IMPORTED)
30 add_dependencies(pmem::pmem pmdk_ext)
31 file(MAKE_DIRECTORY ${PMDK_INCLUDE})
32 set_target_properties(pmem::pmem PROPERTIES
33 INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE}
34 IMPORTED_LOCATION "${PMDK_LIB}/libpmem.a"
35 INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
38 add_library(pmem::pmemobj STATIC IMPORTED)
39 add_dependencies(pmem::pmemobj pmdk_ext)
40 set_target_properties(pmem::pmemobj PROPERTIES
41 INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE}
42 IMPORTED_LOCATION "${PMDK_LIB}/libpmemobj.a"
43 INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})