From: lixiaoy1 Date: Wed, 10 Jul 2019 15:20:48 +0000 (-0400) Subject: cmake: move pmdk build script to Buildpmem.cmake X-Git-Tag: v15.1.0~2228^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4528aa2d0f19c6c82d7ef2fbc924572ac94d7409;p=ceph.git cmake: move pmdk build script to Buildpmem.cmake Signed-off-by: Scott Peterson Signed-off-by: Xiaoyan Li --- diff --git a/cmake/modules/Buildpmem.cmake b/cmake/modules/Buildpmem.cmake new file mode 100644 index 000000000000..b35db6d141d4 --- /dev/null +++ b/cmake/modules/Buildpmem.cmake @@ -0,0 +1,45 @@ +function(build_pmem) + include(ExternalProject) + set(PMDK_SRC "${CMAKE_BINARY_DIR}/src/nvml/src") + set(PMDK_INCLUDE "${PMDK_SRC}/include") + + # 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_LIB "${PMDK_SRC}/${PMDK_LIB_DIR}") + + ExternalProject_Add(nvml_ext + GIT_REPOSITORY "https://github.com/ceph/nvml.git" + GIT_TAG "dd622819dd4ee97d3920f913c70be" + SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nvml + 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) NDCTL_ENABLE=n + BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS "${PMDK_LIB}/libpmem.a" "${PMDK_LIB}/libpmemobj.a" + INSTALL_COMMAND "true") + + # libpmem + add_library(pmem::pmem STATIC IMPORTED) + add_dependencies(pmem::pmem nvml_ext) + file(MAKE_DIRECTORY ${PMDK_INCLUDE}) + set_target_properties(pmem::pmem PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE} + IMPORTED_LOCATION "${PMDK_LIB}/libpmem.a" + INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) + + # libpmemobj + add_library(pmem::pmemobj STATIC IMPORTED) + add_dependencies(pmem::pmemobj nvml_ext) + set_target_properties(pmem::pmemobj PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${PMDK_INCLUDE} + IMPORTED_LOCATION "${PMDK_LIB}/libpmemobj.a" + INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) + +endfunction() diff --git a/src/os/CMakeLists.txt b/src/os/CMakeLists.txt index 2bde97288e51..5177d1f54679 100644 --- a/src/os/CMakeLists.txt +++ b/src/os/CMakeLists.txt @@ -122,30 +122,10 @@ if(WITH_BLUESTORE) endif() if(WITH_BLUESTORE_PMEM) - include(ExternalProject) - ExternalProject_Add(nvml_ext - DOWNLOAD_DIR ${CMAKE_BINARY_DIR}/src/ - GIT_REPOSITORY "https://github.com/ceph/nvml.git" - GIT_TAG "dd622819dd4ee97d3920f913c70be" - SOURCE_DIR ${CMAKE_BINARY_DIR}/src/nvml - CONFIGURE_COMMAND "" - BUILD_COMMAND $(MAKE) - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "true") - - ExternalProject_Add_Step(nvml_ext forcebuild - DEPENDEES configure - DEPENDERS build - COMMAND "true" - ALWAYS 1) - add_library(pmem STATIC IMPORTED GLOBAL) - add_dependencies(pmem nvml_ext) - set_target_properties(pmem PROPERTIES - IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/src/nvml/src/nondebug/libpmem.a" - INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(os pmem) - target_include_directories(os SYSTEM PRIVATE "${CMAKE_BINARY_DIR}/src/nvml/src/include") -endif(WITH_BLUESTORE_PMEM) + include(Buildpmem) + build_pmem() + target_link_libraries(os pmem::pmem) +endif() if(WITH_LTTNG AND WITH_EVENTTRACE) add_dependencies(os eventtrace_tp)