2017-11-15 12:54:46 +00:00
|
|
|
macro(build_spdk)
|
2018-09-05 07:16:26 +00:00
|
|
|
set(DPDK_DIR ${CMAKE_BINARY_DIR}/src/dpdk)
|
2017-11-15 12:54:46 +00:00
|
|
|
if(NOT TARGET dpdk-ext)
|
|
|
|
include(BuildDPDK)
|
2018-09-05 07:16:26 +00:00
|
|
|
build_dpdk(${DPDK_DIR})
|
2017-11-15 12:54:46 +00:00
|
|
|
endif()
|
|
|
|
find_package(CUnit REQUIRED)
|
2017-11-19 18:09:35 +00:00
|
|
|
if(LINUX)
|
|
|
|
find_package(aio REQUIRED)
|
2017-11-28 10:00:37 +00:00
|
|
|
find_package(uuid REQUIRED)
|
2017-11-19 18:09:35 +00:00
|
|
|
endif()
|
2019-03-21 05:16:13 +00:00
|
|
|
|
2019-11-22 14:21:55 +00:00
|
|
|
find_program(MAKE_EXECUTABLE NAMES gmake make)
|
|
|
|
if(NOT MAKE_EXECUTABLE)
|
|
|
|
message(FATAL_ERROR "Can't find make")
|
|
|
|
endif()
|
2019-03-21 05:16:13 +00:00
|
|
|
if(CMAKE_MAKE_PROGRAM MATCHES "make")
|
|
|
|
# try to inherit command line arguments passed by parent "make" job
|
|
|
|
set(make_cmd "$(MAKE)")
|
|
|
|
else()
|
|
|
|
set(make_cmd "${MAKE_EXECUTABLE}")
|
|
|
|
endif()
|
|
|
|
|
2019-06-12 13:27:33 +00:00
|
|
|
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")
|
|
|
|
endif()
|
2017-11-15 12:54:46 +00:00
|
|
|
include(ExternalProject)
|
|
|
|
ExternalProject_Add(spdk-ext
|
|
|
|
DEPENDS dpdk-ext
|
|
|
|
SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/spdk
|
2019-06-12 08:32:55 +00:00
|
|
|
CONFIGURE_COMMAND ./configure --with-dpdk=${DPDK_DIR} --without-isal --without-vhost
|
2017-11-15 12:54:46 +00:00
|
|
|
# unset $CFLAGS, otherwise it will interfere with how SPDK sets
|
|
|
|
# its include directory.
|
|
|
|
# unset $LDFLAGS, otherwise SPDK will fail to mock some functions.
|
2019-06-12 13:27:33 +00:00
|
|
|
BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} ${make_cmd} EXTRA_CFLAGS="${spdk_CFLAGS}"
|
2017-11-15 12:54:46 +00:00
|
|
|
BUILD_IN_SOURCE 1
|
|
|
|
INSTALL_COMMAND "true")
|
2019-03-21 05:16:13 +00:00
|
|
|
unset(make_cmd)
|
2017-11-15 12:54:46 +00:00
|
|
|
ExternalProject_Get_Property(spdk-ext source_dir)
|
2019-06-12 11:18:53 +00:00
|
|
|
foreach(c nvme log lvol env_dpdk sock util)
|
2017-11-15 12:54:46 +00:00
|
|
|
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})
|
|
|
|
endforeach()
|
|
|
|
set_target_properties(spdk::env_dpdk PROPERTIES
|
2018-09-05 07:16:26 +00:00
|
|
|
INTERFACE_LINK_LIBRARIES "dpdk::dpdk;rt")
|
2018-06-14 01:32:08 +00:00
|
|
|
set_target_properties(spdk::lvol PROPERTIES
|
|
|
|
INTERFACE_LINK_LIBRARIES spdk::util)
|
|
|
|
set_target_properties(spdk::util PROPERTIES
|
|
|
|
INTERFACE_LINK_LIBRARIES ${UUID_LIBRARIES})
|
2017-11-15 12:54:46 +00:00
|
|
|
set(SPDK_INCLUDE_DIR "${source_dir}/include")
|
|
|
|
unset(source_dir)
|
|
|
|
endmacro()
|