]> git.proxmox.com Git - ceph.git/blob - ceph/cmake/modules/Finddpdk.cmake
import 15.2.9
[ceph.git] / ceph / cmake / modules / Finddpdk.cmake
1 # Try to find dpdk
2 #
3 # Once done, this will define
4 #
5 # dpdk::dpdk
6 # dpdk_FOUND
7 # dpdk_INCLUDE_DIR
8 # dpdk_LIBRARIES
9
10 find_package(PkgConfig QUIET)
11 if(PKG_CONFIG_FOUND)
12 pkg_check_modules(dpdk QUIET libdpdk)
13 endif()
14
15 if(dpdk_INCLUDE_DIRS)
16 # good
17 elseif(TARGET dpdk::dpdk)
18 get_target_property(dpdk_INCLUDE_DIRS
19 dpdk::dpdk INTERFACE_INCLUDE_DIRECTORIES)
20 else()
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
29 ENC DPDK_DIR
30 PATH_SUFFIXES
31 dpdk
32 include)
33 set(dpdk_INCLUDE_DIRS "${dpdk_config_INCLUDE_DIR}")
34 if(NOT dpdk_config_INCLUDE_DIR EQUAL dpdk_common_INCLUDE_DIR)
35 list(APPEND dpdk_INCLUDE_DIRS "${dpdk_common_INCLUDE_DIR}")
36 endif()
37 endif()
38
39 set(components
40 bus_pci
41 bus_vdev
42 cfgfile
43 cmdline
44 eal
45 ethdev
46 hash
47 kvargs
48 mbuf
49 mempool
50 mempool_ring
51 mempool_stack
52 net
53 pci
54 pmd_af_packet
55 pmd_bnxt
56 pmd_bond
57 pmd_cxgbe
58 pmd_e1000
59 pmd_ena
60 pmd_enic
61 pmd_i40e
62 pmd_ixgbe
63 pmd_mlx5
64 pmd_nfp
65 pmd_qede
66 pmd_ring
67 pmd_sfc_efx
68 pmd_vmxnet3_uio
69 ring
70 timer)
71
72 # for collecting dpdk library targets, it will be used when defining dpdk::dpdk
73 set(_dpdk_libs)
74 # for list of dpdk library archive paths
75 set(dpdk_LIBRARIES)
76
77 foreach(c ${components})
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()
89 if(DPDK_rte_${c}_LIBRARY)
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()
102 list(APPEND _dpdk_libs ${dpdk_lib})
103 list(APPEND dpdk_LIBRARIES ${DPDK_rte_${c}_LIBRARY})
104 endif()
105 endforeach()
106
107 mark_as_advanced(dpdk_INCLUDE_DIRS ${dpdk_LIBRARIES})
108
109 include(FindPackageHandleStandardArgs)
110 find_package_handle_standard_args(dpdk DEFAULT_MSG
111 dpdk_INCLUDE_DIRS
112 dpdk_LIBRARIES)
113
114 if(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()
129
130 if(NOT TARGET dpdk::dpdk)
131 add_library(dpdk::dpdk INTERFACE IMPORTED)
132 find_package(Threads QUIET)
133 list(APPEND _dpdk_libs
134 Threads::Threads
135 dpdk::cflags)
136 set_target_properties(dpdk::dpdk PROPERTIES
137 INTERFACE_LINK_LIBRARIES "${_dpdk_libs}"
138 INTERFACE_INCLUDE_DIRECTORIES "${dpdk_INCLUDE_DIRS}")
139 endif()
140 endif()
141
142 unset(_dpdk_libs)