mirror of
https://github.com/ceph/ceph
synced 2025-01-03 01:22:53 +00:00
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 <dengtongliang@sensetime.com>
This commit is contained in:
parent
ac28356234
commit
e82b0a7b09
@ -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 $<JOIN:${spdk_libs}, > -Wl,--no-whole-archive;dpdk::dpdk;rt;${UUID_LIBRARIES}")
|
||||
unset(source_dir)
|
||||
endmacro()
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user