From e82b0a7b094361a5195694691761b02d3413c299 Mon Sep 17 00:00:00 2001 From: Tongliang Deng Date: Thu, 13 Jan 2022 17:01:52 +0800 Subject: [PATCH] cmake/modules/BuildSPDK.cmake: link whole-archive We build spdk as static library, linking against them requires the use of `-Wl,--whole-archive` as argument, otherwise we will have error `nvme.c: nvme_probe_internal: *ERROR*: NVMe trtype 256 not available`. This is due to the use of constructor functions in spdk to register NVMe transports. So we need to do so to ensure we call all the constructors. Signed-off-by: Tongliang Deng --- cmake/modules/BuildSPDK.cmake | 14 ++++++++------ src/blk/CMakeLists.txt | 3 ++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/cmake/modules/BuildSPDK.cmake b/cmake/modules/BuildSPDK.cmake index 0a6acc8d059..d6ce97e1d2e 100644 --- a/cmake/modules/BuildSPDK.cmake +++ b/cmake/modules/BuildSPDK.cmake @@ -68,12 +68,14 @@ macro(build_spdk) 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 - INTERFACE_LINK_LIBRARIES spdk::util) - set_target_properties(spdk::util PROPERTIES - INTERFACE_LINK_LIBRARIES ${UUID_LIBRARIES}) set(SPDK_INCLUDE_DIR "${source_dir}/include") + add_library(spdk::spdk INTERFACE IMPORTED) + add_dependencies(spdk::spdk + ${SPDK_LIBRARIES}) + # workaround for https://review.spdk.io/gerrit/c/spdk/spdk/+/6798 + set_target_properties(spdk::spdk PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${SPDK_INCLUDE_DIR} + INTERFACE_LINK_LIBRARIES + "-Wl,--whole-archive $ -Wl,--no-whole-archive;dpdk::dpdk;rt;${UUID_LIBRARIES}") unset(source_dir) endmacro() diff --git a/src/blk/CMakeLists.txt b/src/blk/CMakeLists.txt index aaebc3c99f0..37b9c0a410c 100644 --- a/src/blk/CMakeLists.txt +++ b/src/blk/CMakeLists.txt @@ -35,7 +35,8 @@ if(HAVE_LIBAIO) endif(HAVE_LIBAIO) if(WITH_SPDK) - target_link_libraries(blk PRIVATE ${SPDK_LIBRARIES}) + target_link_libraries(blk + PRIVATE spdk::spdk) endif() if(WITH_ZBD)