]> git.proxmox.com Git - ceph.git/blob - ceph/cmake/modules/BuildSPDK.cmake
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / cmake / modules / BuildSPDK.cmake
1 macro(build_spdk)
2 set(DPDK_DIR ${CMAKE_BINARY_DIR}/src/dpdk)
3 if(NOT TARGET dpdk-ext)
4 include(BuildDPDK)
5 build_dpdk(${DPDK_DIR})
6 endif()
7 find_package(CUnit REQUIRED)
8 if(LINUX)
9 find_package(aio REQUIRED)
10 find_package(uuid REQUIRED)
11 endif()
12 include(FindMake)
13 find_make("MAKE_EXECUTABLE" "make_cmd")
14
15 set(spdk_CFLAGS "-fPIC")
16 include(CheckCCompilerFlag)
17 check_c_compiler_flag("-Wno-address-of-packed-member" HAS_WARNING_ADDRESS_OF_PACKED_MEMBER)
18 if(HAS_WARNING_ADDRESS_OF_PACKED_MEMBER)
19 set(spdk_CFLAGS "${spdk_CFLAGS} -Wno-address-of-packed-member")
20 endif()
21 include(ExternalProject)
22 if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
23 # a safer option than relying on the build host's arch
24 set(target_arch core2)
25 else()
26 # default arch used by SPDK
27 set(target_arch native)
28 endif()
29 ExternalProject_Add(spdk-ext
30 DEPENDS dpdk-ext
31 SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/spdk
32 CONFIGURE_COMMAND ./configure
33 --with-dpdk=${DPDK_DIR}
34 --without-isal
35 --without-vhost
36 --target-arch=${target_arch}
37 # unset $CFLAGS, otherwise it will interfere with how SPDK sets
38 # its include directory.
39 # unset $LDFLAGS, otherwise SPDK will fail to mock some functions.
40 BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} ${make_cmd} EXTRA_CFLAGS="${spdk_CFLAGS}"
41 BUILD_IN_SOURCE 1
42 INSTALL_COMMAND "true")
43 unset(make_cmd)
44 ExternalProject_Get_Property(spdk-ext source_dir)
45 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)
46 add_library(spdk::${c} STATIC IMPORTED)
47 add_dependencies(spdk::${c} spdk-ext)
48 set_target_properties(spdk::${c} PROPERTIES
49 IMPORTED_LOCATION "${source_dir}/build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}spdk_${c}${CMAKE_STATIC_LIBRARY_SUFFIX}"
50 INTERFACE_INCLUDE_DIRECTORIES "${source_dir}/include")
51 list(APPEND SPDK_LIBRARIES spdk::${c})
52 endforeach()
53 set_target_properties(spdk::env_dpdk PROPERTIES
54 INTERFACE_LINK_LIBRARIES "dpdk::dpdk;rt")
55 set_target_properties(spdk::lvol PROPERTIES
56 INTERFACE_LINK_LIBRARIES spdk::util)
57 set_target_properties(spdk::util PROPERTIES
58 INTERFACE_LINK_LIBRARIES ${UUID_LIBRARIES})
59 set(SPDK_INCLUDE_DIR "${source_dir}/include")
60 unset(source_dir)
61 endmacro()