From: Tongliang Deng Date: Thu, 13 Jan 2022 09:01:52 +0000 (+0800) Subject: cmake/modules/BuildSPDK.cmake: link whole-archive X-Git-Tag: v18.0.0~1516^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e82b0a7b094361a5195694691761b02d3413c299;p=ceph-ci.git 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 --- 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)