# Try to find dpdk # # Once done, this will define # # dpdk_FOUND # dpdk_INCLUDE_DIRS # dpdk_LIBRARIES if(PKG_CONFIG_FOUND) pkg_check_modules(dpdk QUIET libdpdk) endif() message(STATUS "Executing Finddpdk") if(NOT dpdk_INCLUDE_DIRS) message(STATUS "Executing find_path") find_path(dpdk_config_INCLUDE_DIR rte_config.h HINTS ENV DPDK_DIR PATH_SUFFIXES dpdk include ) find_path(dpdk_common_INCLUDE_DIR rte_common.h HINTS ENV DPDK_DIR PATH_SUFFIXES dpdk include ) set(dpdk_INCLUDE_DIRS "${dpdk_config_INCLUDE_DIR}") if(NOT dpdk_config_INCLUDE_DIR STREQUAL dpdk_common_INCLUDE_DIR) list(APPEND dpdk_INCLUDE_DIRS "${dpdk_common_INCLUDE_DIR}") endif() set(components bus_pci cmdline eal ethdev hash kvargs mbuf mempool mempool_ring mempool_stack pci pmd_af_packet pmd_bond pmd_i40e pmd_ixgbe pmd_mlx5 pmd_ring pmd_vmxnet3_uio ring) set(dpdk_LIBRARIES) foreach(c ${components}) find_library(DPDK_rte_${c}_LIBRARY rte_${c} HINTS ENV DPDK_DIR ${dpdk_LIBRARY_DIRS} PATH_SUFFIXES lib) if(DPDK_rte_${c}_LIBRARY) set(dpdk_lib dpdk::${c}) if (NOT TARGET ${dpdk_lib}) add_library(${dpdk_lib} UNKNOWN IMPORTED) set_target_properties(${dpdk_lib} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${dpdk_INCLUDE_DIRS}" IMPORTED_LOCATION "${DPDK_rte_${c}_LIBRARY}") if(c STREQUAL pmd_mlx5) find_package(verbs QUIET) if(verbs_FOUND) target_link_libraries(${dpdk_lib} INTERFACE IBVerbs::verbs) endif() endif() endif() list(APPEND dpdk_LIBRARIES ${dpdk_lib}) endif() endforeach() # # Where the heck did this list come from? libdpdk on Ubuntu 20.04, # for example, doesn't even *have* -ldpdk; that's why we go with # pkg-config, in the hopes that it provides a correct set of flags # for this tangled mess. # list(APPEND dpdk_LIBRARIES dpdk rt m numo dl) endif() mark_as_advanced(dpdk_INCLUDE_DIRS ${dpdk_LIBRARIES}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(dpdk DEFAULT_MSG dpdk_INCLUDE_DIRS dpdk_LIBRARIES) if(dpdk_FOUND) if(NOT TARGET dpdk::cflags) if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64") set(rte_cflags "-march=core2") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|ARM") set(rte_cflags "-march=armv7-a") elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64") set(rte_cflags "-march=armv8-a+crc") endif() add_library(dpdk::cflags INTERFACE IMPORTED) if (rte_cflags) set_target_properties(dpdk::cflags PROPERTIES INTERFACE_COMPILE_OPTIONS "${rte_cflags}") endif() endif() if(NOT TARGET dpdk::dpdk) add_library(dpdk::dpdk INTERFACE IMPORTED) find_package(Threads QUIET) list(APPEND dpdk_LIBRARIES Threads::Threads dpdk::cflags) set_target_properties(dpdk::dpdk PROPERTIES INTERFACE_LINK_LIBRARIES "${dpdk_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${dpdk_INCLUDE_DIRS}") endif() endif()