]> git.proxmox.com Git - ceph.git/blame - ceph/cmake/modules/Finddpdk.cmake
import ceph quincy 17.2.1
[ceph.git] / ceph / cmake / modules / Finddpdk.cmake
CommitLineData
7c673cae
FG
1# Try to find dpdk
2#
3# Once done, this will define
4#
9f95a23c 5# dpdk::dpdk
11fdf7f2
TL
6# dpdk_FOUND
7# dpdk_INCLUDE_DIR
8# dpdk_LIBRARIES
7c673cae 9
11fdf7f2
TL
10find_package(PkgConfig QUIET)
11if(PKG_CONFIG_FOUND)
12 pkg_check_modules(dpdk QUIET libdpdk)
13endif()
7c673cae 14
9f95a23c
TL
15if(dpdk_INCLUDE_DIRS)
16 # good
17elseif(TARGET dpdk::dpdk)
18 get_target_property(dpdk_INCLUDE_DIRS
19 dpdk::dpdk INTERFACE_INCLUDE_DIRECTORIES)
20else()
11fdf7f2
TL
21 find_path(dpdk_config_INCLUDE_DIR rte_config.h
22 HINTS
23 ENV DPDK_DIR
24 PATH_SUFFIXES
25 dpdk
26 include)
27 find_path(dpdk_common_INCLUDE_DIR rte_common.h
28 HINTS
20effc67 29 ENV DPDK_DIR
11fdf7f2
TL
30 PATH_SUFFIXES
31 dpdk
32 include)
33 set(dpdk_INCLUDE_DIRS "${dpdk_config_INCLUDE_DIR}")
20effc67 34 if(dpdk_common_INCLUDE_DIR AND NOT dpdk_config_INCLUDE_DIR STREQUAL dpdk_common_INCLUDE_DIR)
11fdf7f2
TL
35 list(APPEND dpdk_INCLUDE_DIRS "${dpdk_common_INCLUDE_DIR}")
36 endif()
37endif()
7c673cae 38
11fdf7f2
TL
39set(components
40 bus_pci
9f95a23c
TL
41 bus_vdev
42 cfgfile
11fdf7f2
TL
43 cmdline
44 eal
45 ethdev
46 hash
47 kvargs
48 mbuf
49 mempool
50 mempool_ring
9f95a23c 51 net
11fdf7f2
TL
52 pci
53 pmd_af_packet
9f95a23c 54 pmd_bnxt
11fdf7f2 55 pmd_bond
9f95a23c
TL
56 pmd_cxgbe
57 pmd_e1000
58 pmd_ena
59 pmd_enic
11fdf7f2
TL
60 pmd_i40e
61 pmd_ixgbe
62 pmd_mlx5
9f95a23c
TL
63 pmd_nfp
64 pmd_qede
11fdf7f2 65 pmd_ring
9f95a23c 66 pmd_sfc_efx
11fdf7f2 67 pmd_vmxnet3_uio
20effc67
TL
68 pmd_hns3
69 pmd_hinic
9f95a23c
TL
70 ring
71 timer)
7c673cae 72
9f95a23c
TL
73# for collecting dpdk library targets, it will be used when defining dpdk::dpdk
74set(_dpdk_libs)
75# for list of dpdk library archive paths
20effc67 76set(dpdk_LIBRARIES "")
11fdf7f2 77foreach(c ${components})
9f95a23c
TL
78 set(dpdk_lib dpdk::${c})
79 if(TARGET ${dpdk_lib})
80 get_target_property(DPDK_rte_${c}_LIBRARY
81 ${dpdk_lib} IMPORTED_LOCATION)
82 else()
83 find_library(DPDK_rte_${c}_LIBRARY rte_${c}
84 HINTS
85 ENV DPDK_DIR
86 ${dpdk_LIBRARY_DIRS}
87 PATH_SUFFIXES lib)
88 endif()
11fdf7f2 89 if(DPDK_rte_${c}_LIBRARY)
11fdf7f2
TL
90 if (NOT TARGET ${dpdk_lib})
91 add_library(${dpdk_lib} UNKNOWN IMPORTED)
92 set_target_properties(${dpdk_lib} PROPERTIES
93 INTERFACE_INCLUDE_DIRECTORIES "${dpdk_INCLUDE_DIRS}"
94 IMPORTED_LOCATION "${DPDK_rte_${c}_LIBRARY}")
95 if(c STREQUAL pmd_mlx5)
96 find_package(verbs QUIET)
97 if(verbs_FOUND)
98 target_link_libraries(${dpdk_lib} INTERFACE IBVerbs::verbs)
99 endif()
100 endif()
101 endif()
9f95a23c
TL
102 list(APPEND _dpdk_libs ${dpdk_lib})
103 list(APPEND dpdk_LIBRARIES ${DPDK_rte_${c}_LIBRARY})
11fdf7f2
TL
104 endif()
105endforeach()
106
107mark_as_advanced(dpdk_INCLUDE_DIRS ${dpdk_LIBRARIES})
7c673cae
FG
108
109include(FindPackageHandleStandardArgs)
110find_package_handle_standard_args(dpdk DEFAULT_MSG
11fdf7f2
TL
111 dpdk_INCLUDE_DIRS
112 dpdk_LIBRARIES)
113
114if(dpdk_FOUND)
115 if(NOT TARGET dpdk::cflags)
116 if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
117 set(rte_cflags "-march=core2")
118 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|ARM")
119 set(rte_cflags "-march=armv7-a")
120 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
121 set(rte_cflags "-march=armv8-a+crc")
122 endif()
123 add_library(dpdk::cflags INTERFACE IMPORTED)
124 if (rte_cflags)
125 set_target_properties(dpdk::cflags PROPERTIES
126 INTERFACE_COMPILE_OPTIONS "${rte_cflags}")
127 endif()
128 endif()
7c673cae 129
11fdf7f2
TL
130 if(NOT TARGET dpdk::dpdk)
131 add_library(dpdk::dpdk INTERFACE IMPORTED)
132 find_package(Threads QUIET)
9f95a23c 133 list(APPEND _dpdk_libs
11fdf7f2 134 Threads::Threads
20effc67
TL
135 dpdk::cflags
136 numa)
11fdf7f2 137 set_target_properties(dpdk::dpdk PROPERTIES
9f95a23c 138 INTERFACE_LINK_LIBRARIES "${_dpdk_libs}"
11fdf7f2
TL
139 INTERFACE_INCLUDE_DIRECTORIES "${dpdk_INCLUDE_DIRS}")
140 endif()
7c673cae 141endif()
9f95a23c
TL
142
143unset(_dpdk_libs)