]> The Tcpdump Group git mirrors - libpcap/blob - cmake/Modules/Finddpdk.cmake
On Linux, return error on interface going away, not just going down.
[libpcap] / cmake / Modules / Finddpdk.cmake
1 # Try to find dpdk
2 #
3 # Once done, this will define
4 #
5 # dpdk_FOUND
6 # dpdk_INCLUDE_DIRS
7 # dpdk_LIBRARIES
8
9 find_package(PkgConfig QUIET)
10 if(PKG_CONFIG_FOUND)
11 pkg_check_modules(dpdk QUIET libdpdk)
12 endif()
13
14 message(STATUS "Executing Finddpdk")
15 if(NOT dpdk_INCLUDE_DIRS)
16 message(STATUS "Executing find_path")
17 find_path(dpdk_config_INCLUDE_DIR rte_config.h
18 HINTS
19 ENV DPDK_DIR
20 PATH_SUFFIXES
21 dpdk
22 include
23 )
24 find_path(dpdk_common_INCLUDE_DIR rte_common.h
25 HINTS
26 ENC DPDK_DIR
27 PATH_SUFFIXES
28 dpdk
29 include
30 )
31 set(dpdk_INCLUDE_DIRS "${dpdk_config_INCLUDE_DIR}")
32 if(NOT dpdk_config_INCLUDE_DIR EQUAL dpdk_common_INCLUDE_DIR)
33 list(APPEND dpdk_INCLUDE_DIRS "${dpdk_common_INCLUDE_DIR}")
34 endif()
35 endif()
36
37 set(components
38 bus_pci
39 cmdline
40 eal
41 ethdev
42 hash
43 kvargs
44 mbuf
45 mempool
46 mempool_ring
47 mempool_stack
48 pci
49 pmd_af_packet
50 pmd_bond
51 pmd_i40e
52 pmd_ixgbe
53 pmd_mlx5
54 pmd_ring
55 pmd_vmxnet3_uio
56 ring)
57
58 set(dpdk_LIBRARIES)
59
60 foreach(c ${components})
61 find_library(DPDK_rte_${c}_LIBRARY rte_${c}
62 HINTS
63 ENV DPDK_DIR
64 ${dpdk_LIBRARY_DIRS}
65 PATH_SUFFIXES lib)
66 if(DPDK_rte_${c}_LIBRARY)
67 set(dpdk_lib dpdk::${c})
68 if (NOT TARGET ${dpdk_lib})
69 add_library(${dpdk_lib} UNKNOWN IMPORTED)
70 set_target_properties(${dpdk_lib} PROPERTIES
71 INTERFACE_INCLUDE_DIRECTORIES "${dpdk_INCLUDE_DIRS}"
72 IMPORTED_LOCATION "${DPDK_rte_${c}_LIBRARY}")
73 if(c STREQUAL pmd_mlx5)
74 find_package(verbs QUIET)
75 if(verbs_FOUND)
76 target_link_libraries(${dpdk_lib} INTERFACE IBVerbs::verbs)
77 endif()
78 endif()
79 endif()
80 list(APPEND dpdk_LIBRARIES ${dpdk_lib})
81 endif()
82 endforeach()
83
84 mark_as_advanced(dpdk_INCLUDE_DIRS ${dpdk_LIBRARIES})
85
86 include(FindPackageHandleStandardArgs)
87 find_package_handle_standard_args(dpdk DEFAULT_MSG
88 dpdk_INCLUDE_DIRS
89 dpdk_LIBRARIES)
90
91 if(dpdk_FOUND)
92 if(NOT TARGET dpdk::cflags)
93 if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
94 set(rte_cflags "-march=core2")
95 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|ARM")
96 set(rte_cflags "-march=armv7-a")
97 elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
98 set(rte_cflags "-march=armv8-a+crc")
99 endif()
100 add_library(dpdk::cflags INTERFACE IMPORTED)
101 if (rte_cflags)
102 set_target_properties(dpdk::cflags PROPERTIES
103 INTERFACE_COMPILE_OPTIONS "${rte_cflags}")
104 endif()
105 endif()
106
107 if(NOT TARGET dpdk::dpdk)
108 add_library(dpdk::dpdk INTERFACE IMPORTED)
109 find_package(Threads QUIET)
110 list(APPEND dpdk_LIBRARIES
111 Threads::Threads
112 dpdk::cflags)
113 set_target_properties(dpdk::dpdk PROPERTIES
114 INTERFACE_LINK_LIBRARIES "${dpdk_LIBRARIES}"
115 INTERFACE_INCLUDE_DIRECTORIES "${dpdk_INCLUDE_DIRS}")
116 endif()
117 endif()