]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake: move pmdk build script to Buildpmem.cmake
authorlixiaoy1 <xiaoyan.li@intel.com>
Wed, 10 Jul 2019 15:20:48 +0000 (11:20 -0400)
committerlixiaoy1 <xiaoyan.li@intel.com>
Wed, 10 Jul 2019 15:43:27 +0000 (11:43 -0400)
Signed-off-by: Scott Peterson <scott.d.peterson@intel.com>
Signed-off-by: Xiaoyan Li <xiaoyan.li@intel.com>
cmake/modules/Buildpmem.cmake [new file with mode: 0644]
src/os/CMakeLists.txt

diff --git a/cmake/modules/Buildpmem.cmake b/cmake/modules/Buildpmem.cmake
new file mode 100644 (file)
index 0000000..b35db6d
--- /dev/null
@@ -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()
index 2bde97288e5177a8d116de003dc463ea7674ef4b..5177d1f546793b1563faf1bcae83955df93c16f7 100644 (file)
@@ -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)