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}")
15 find_make("MAKE_EXECUTABLE" "make_cmd")
17 ExternalProject_Add(pmdk_ext
18 GIT_REPOSITORY "https://github.com/ceph/pmdk.git"
21 SOURCE_DIR ${CMAKE_BINARY_DIR}/src/pmdk
23 # Explicitly built w/o NDCTL, otherwise if ndtcl is present on the
24 # build system tests statically linking to librbd (which uses
25 # libpmemobj) will not link (because we don't build the ndctl
26 # static library here).
27 BUILD_COMMAND ${make_cmd} CC=${CMAKE_C_COMPILER} NDCTL_ENABLE=n
29 BUILD_BYPRODUCTS "${PMDK_LIB}/libpmem.a" "${PMDK_LIB}/libpmemobj.a"
30 INSTALL_COMMAND "true")
33 add_library(pmem::pmem STATIC IMPORTED)
34 add_dependencies(pmem::pmem pmdk_ext)
35 file(MAKE_DIRECTORY ${PMDK_INCLUDE})
36 set_target_properties(pmem::pmem PROPERTIES
37 INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE}
38 IMPORTED_LOCATION "${PMDK_LIB}/libpmem.a"
39 INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
42 add_library(pmem::pmemobj STATIC IMPORTED)
43 add_dependencies(pmem::pmemobj pmdk_ext)
44 set_target_properties(pmem::pmemobj PROPERTIES
45 INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE}
46 IMPORTED_LOCATION "${PMDK_LIB}/libpmemobj.a"
47 INTERFACE_LINK_LIBRARIES "pmem::pmem;${CMAKE_THREAD_LIBS_INIT}")