]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
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() | |
f67539c2 TL |
12 | include(FindMake) |
13 | find_make("MAKE_EXECUTABLE" "make_cmd") | |
9f95a23c TL |
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() | |
11fdf7f2 | 21 | include(ExternalProject) |
f67539c2 TL |
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() | |
11fdf7f2 TL |
29 | ExternalProject_Add(spdk-ext |
30 | DEPENDS dpdk-ext | |
31 | SOURCE_DIR ${CMAKE_SOURCE_DIR}/src/spdk | |
f67539c2 TL |
32 | CONFIGURE_COMMAND ./configure |
33 | --with-dpdk=${DPDK_DIR} | |
34 | --without-isal | |
35 | --without-vhost | |
36 | --target-arch=${target_arch} | |
11fdf7f2 TL |
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. | |
9f95a23c | 40 | BUILD_COMMAND env -i PATH=$ENV{PATH} CC=${CMAKE_C_COMPILER} ${make_cmd} EXTRA_CFLAGS="${spdk_CFLAGS}" |
11fdf7f2 TL |
41 | BUILD_IN_SOURCE 1 |
42 | INSTALL_COMMAND "true") | |
9f95a23c | 43 | unset(make_cmd) |
11fdf7f2 | 44 | ExternalProject_Get_Property(spdk-ext source_dir) |
f67539c2 | 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) |
11fdf7f2 TL |
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() |