]> git.proxmox.com Git - ceph.git/blobdiff - ceph/cmake/modules/BuildSPDK.cmake
import quincy beta 17.1.0
[ceph.git] / ceph / cmake / modules / BuildSPDK.cmake
index 05a6b237006769d68f20c8bf47c6b788133c9cc2..0a6acc8d059972fa93bae7bf1f12ec12264d64df 100644 (file)
@@ -14,10 +14,16 @@ macro(build_spdk)
 
   set(spdk_CFLAGS "-fPIC")
   include(CheckCCompilerFlag)
-  check_c_compiler_flag("-Wno-address-of-packed-member" HAS_WARNING_ADDRESS_OF_PACKED_MEMBER)
-  if(HAS_WARNING_ADDRESS_OF_PACKED_MEMBER)
-    set(spdk_CFLAGS "${spdk_CFLAGS} -Wno-address-of-packed-member")
+  check_c_compiler_flag("-Wno-address-of-packed-member" HAVE_WARNING_ADDRESS_OF_PACKED_MEMBER)
+  if(HAVE_WARNING_ADDRESS_OF_PACKED_MEMBER)
+    string(APPEND spdk_CFLAGS " -Wno-address-of-packed-member")
   endif()
+  check_c_compiler_flag("-Wno-unused-but-set-variable"
+    HAVE_UNUSED_BUT_SET_VARIABLE)
+  if(HAVE_UNUSED_BUT_SET_VARIABLE)
+    string(APPEND spdk_CFLAGS " -Wno-unused-but-set-variable")
+  endif()
+
   include(ExternalProject)
   if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
     # a safer option than relying on the build host's arch
@@ -26,9 +32,21 @@ macro(build_spdk)
     # default arch used by SPDK
     set(target_arch native)
   endif()
+
+  set(source_dir "${CMAKE_SOURCE_DIR}/src/spdk")
+  foreach(c lvol env_dpdk sock nvmf bdev nvme conf thread trace notify accel event_accel blob vmd event_vmd event_bdev sock_posix event_sock event rpc jsonrpc json util log)
+    add_library(spdk::${c} STATIC IMPORTED)
+    set(lib_path "${source_dir}/build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}spdk_${c}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    set_target_properties(spdk::${c} PROPERTIES
+      IMPORTED_LOCATION "${lib_path}"
+      INTERFACE_INCLUDE_DIRECTORIES "${source_dir}/include")
+    list(APPEND spdk_libs "${lib_path}")
+    list(APPEND SPDK_LIBRARIES spdk::${c})
+  endforeach()
+
   ExternalProject_Add(spdk-ext
     DEPENDS dpdk-ext
-    SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/spdk
+    SOURCE_DIR ${source_dir}
     CONFIGURE_COMMAND ./configure
       --with-dpdk=${DPDK_DIR}
       --without-isal
@@ -37,19 +55,19 @@ macro(build_spdk)
     # unset $CFLAGS, otherwise it will interfere with how SPDK sets
     # its include directory.
     # unset $LDFLAGS, otherwise SPDK will fail to mock some functions.
-    BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} ${make_cmd} EXTRA_CFLAGS="${spdk_CFLAGS}"
+    BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} ${make_cmd} EXTRA_CFLAGS=${spdk_CFLAGS}
     BUILD_IN_SOURCE 1
-    INSTALL_COMMAND "true")
+    BUILD_BYPRODUCTS ${spdk_libs}
+    INSTALL_COMMAND ""
+    LOG_CONFIGURE ON
+    LOG_BUILD ON
+    LOG_MERGED_STDOUTERR ON
+    LOG_OUTPUT_ON_FAILURE ON)
   unset(make_cmd)
-  ExternalProject_Get_Property(spdk-ext source_dir)
-  foreach(c lvol env_dpdk sock nvmf bdev nvme conf thread trace notify accel event_accel blob vmd event_vmd event_bdev sock_posix event_sock event rpc jsonrpc json util log)
-    add_library(spdk::${c} STATIC IMPORTED)
-    add_dependencies(spdk::${c} spdk-ext)
-    set_target_properties(spdk::${c} PROPERTIES
-      IMPORTED_LOCATION "${source_dir}/build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}spdk_${c}${CMAKE_STATIC_LIBRARY_SUFFIX}"
-      INTERFACE_INCLUDE_DIRECTORIES "${source_dir}/include")
-    list(APPEND SPDK_LIBRARIES spdk::${c})
+  foreach(spdk_lib ${SPDK_LIBRARIES})
+    add_dependencies(${spdk_lib} spdk-ext)
   endforeach()
+
   set_target_properties(spdk::env_dpdk PROPERTIES
     INTERFACE_LINK_LIBRARIES "dpdk::dpdk;rt")
   set_target_properties(spdk::lvol PROPERTIES