X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fdpdk%2FCMakeLists.txt;h=a9d4f3e514cbaa9263423d0078df028fece69ed8;hb=45e4e9444d961351178ee108b20525a9c929902d;hp=a5cfea566a1aac86071901c8a0bb74985757e5df;hpb=f23a885b892e432c7eac0f00c9e010fc21b6b211;p=vpp.git diff --git a/src/plugins/dpdk/CMakeLists.txt b/src/plugins/dpdk/CMakeLists.txt index a5cfea566a1..a9d4f3e514c 100644 --- a/src/plugins/dpdk/CMakeLists.txt +++ b/src/plugins/dpdk/CMakeLists.txt @@ -12,162 +12,140 @@ # limitations under the License. ############################################################################## -# macros -############################################################################## -macro(dpdk_find_library var name) - find_library(${var} NAMES ${name} ${ARGN}) -if (NOT ${var}) - message(WARNING "-- ${name} library not found - dpdk_plugin disabled") - return() -endif() - message(STATUS "DPDK plugin needs ${name} library - found at ${${var}}") -endmacro() - -############################################################################## -# Find lib and include files -############################################################################## -find_path(DPDK_INCLUDE_DIR PATH_SUFFIXES dpdk NAMES rte_config.h) -find_library(DPDK_LIB NAMES libdpdk.a) - -if (NOT DPDK_INCLUDE_DIR) - message(WARNING "-- DPDK headers not found - dpdk_plugin disabled") - return() -endif() - -if (NOT DPDK_LIB) - dpdk_find_library(DPDK_SHLIB "libdpdk.so") - set(DPDK_IS_SHARED_LIB 1) - message(WARNING "-- linking dpdk plugin against DPDK shared libs") -endif() - -############################################################################## -# Parse DPDK config and version header files -############################################################################## - -file(STRINGS ${DPDK_INCLUDE_DIR}/rte_config.h rte_config) -file(STRINGS ${DPDK_INCLUDE_DIR}/rte_version.h rte_version) - -foreach(l ${rte_config} ${rte_version}) - if (l MATCHES "^#define[\t ]*RTE_") - STRING(REGEX REPLACE "^#define[\t ]*([A-Z1-9_]+)[\t ]*(.+)" "\\1;\\2" v "${l}") - list(GET v 0 name) - list(GET v 1 value) - set(DPDK_${name} ${value}) - endif() -endforeach() - -set(DPDK_VERSION - "${DPDK_RTE_VER_YEAR}.${DPDK_RTE_VER_MONTH}.${DPDK_RTE_VER_MINOR}") - -############################################################################## -# verify headroom size -############################################################################## -if(NOT ${DPDK_RTE_PKTMBUF_HEADROOM} EQUAL ${PRE_DATA_SIZE}) - message( - FATAL_ERROR - "DPDK RTE_PKTMBUF_HEADROOM (${DPDK_RTE_PKTMBUF_HEADROOM}) " - "must be equal to PRE_DATA_SIZE (${PRE_DATA_SIZE})" - ) -endif() - -############################################################################## -# static or dynamic linking -############################################################################## -unset(DPDK_LINK_LIBRARIES) -unset(DPDK_LINK_FLAGS) -message(STATUS "Found DPDK ${DPDK_VERSION} in ${DPDK_INCLUDE_DIR}") -include_directories (${DPDK_INCLUDE_DIR}) - -if(DPDK_IS_SHARED_LIB) - get_filename_component(DPDK_LIB_DIR ${DPDK_SHLIB} DIRECTORY) - string_append(DPDK_LINK_FLAGS "-L${DPDK_LIB_DIR}") - list(APPEND DPDK_LINK_LIBRARIES ${DPDK_SHLIB}) +# Check if we want to use the system DPDK +############################################################################## +option(VPP_USE_SYSTEM_DPDK "Use the system installation of DPDK." OFF) +if(VPP_USE_SYSTEM_DPDK) + find_package(PkgConfig REQUIRED) + pkg_check_modules(DPDK REQUIRED libdpdk) + message(WARNING "-- linking dpdk plugin against system libdpdk, version ${DPDK_VERSION}") + set(DPDK_LINK_FLAGS ${DPDK_LDFLAGS}) + include_directories (${DPDK_INCLUDE_DIRS}) else() - get_filename_component(DPDK_LIB_DIR ${DPDK_LIB} DIRECTORY) - string_append(DPDK_LINK_FLAGS "-L${DPDK_LIB_DIR}") - string_append(DPDK_LINK_FLAGS "-Wl,--whole-archive,${DPDK_LIB},--no-whole-archive") + ############################################################################## + # Find lib and include files + ############################################################################## + vpp_find_path(DPDK_INCLUDE_DIR PATH_SUFFIXES dpdk NAMES rte_config.h) + vpp_plugin_find_library(dpdk DPDK_LIB "libdpdk.a") + + if (NOT DPDK_INCLUDE_DIR) + message(WARNING "-- DPDK headers not found - dpdk plugin disabled") + return() + endif() + + if (NOT DPDK_LIB) + vpp_plugin_find_library(dpdk DPDK_SHLIB "libdpdk.so") + set(DPDK_IS_SHARED_LIB 1) + message(WARNING "-- linking dpdk plugin against DPDK shared libs") + endif() + + ############################################################################## + # Parse DPDK config and version header files + ############################################################################## + file(STRINGS ${DPDK_INCLUDE_DIR}/rte_config.h rte_config) + file(STRINGS ${DPDK_INCLUDE_DIR}/rte_version.h rte_version) + file(STRINGS ${DPDK_INCLUDE_DIR}/rte_build_config.h rte_build_config) + + foreach(l ${rte_config} ${rte_build_config} ${rte_version}}) + if (l MATCHES "^#define[\t ]*RTE_") + STRING(REGEX REPLACE "^#define[\t ]*([A-Z1-9_]+)[\t ]*(.+)" "\\1;\\2" v "${l}") + list(GET v 0 name) + list(GET v 1 value) + set(DPDK_${name} ${value}) + endif() + endforeach() + + set(DPDK_VERSION + "${DPDK_RTE_VER_YEAR}.${DPDK_RTE_VER_MONTH}.${DPDK_RTE_VER_MINOR}") + + ############################################################################## + # verify headroom size + ############################################################################## + if(NOT ${DPDK_RTE_PKTMBUF_HEADROOM} EQUAL ${PRE_DATA_SIZE}) + message( + FATAL_ERROR + "DPDK RTE_PKTMBUF_HEADROOM (${DPDK_RTE_PKTMBUF_HEADROOM}) " + "must be equal to PRE_DATA_SIZE (${PRE_DATA_SIZE})" + ) + endif() + + ############################################################################## + # static or dynamic linking + ############################################################################## + unset(DPDK_LINK_LIBRARIES) + unset(DPDK_LINK_FLAGS) + message(STATUS "Found DPDK ${DPDK_VERSION} in ${DPDK_INCLUDE_DIR}") + include_directories (${DPDK_INCLUDE_DIR}) + + if(DPDK_IS_SHARED_LIB) + get_filename_component(DPDK_LIB_DIR ${DPDK_SHLIB} DIRECTORY) + string_append(DPDK_LINK_FLAGS "-L${DPDK_LIB_DIR}") + list(APPEND DPDK_LINK_LIBRARIES ${DPDK_SHLIB}) + else() + get_filename_component(DPDK_LIB_DIR ${DPDK_LIB} DIRECTORY) + string_append(DPDK_LINK_FLAGS "-L${DPDK_LIB_DIR}") + string_append(DPDK_LINK_FLAGS "-Wl,--whole-archive,${DPDK_LIB},--no-whole-archive") + endif() + + ############################################################################## + # libnuma + ############################################################################## + vpp_plugin_find_library(dpdk NUMA_LIB "numa") + list(APPEND DPDK_LINK_LIBRARIES ${NUMA_LIB}) + + ############################################################################## + # Mellanox libraries + ############################################################################## + if(DPDK_RTE_NET_MLX4 OR DPDK_RTE_NET_MLX5) + if (DPDK_RTE_IBVERBS_LINK_DLOPEN) + message(STATUS "DPDK depends on libmnl (Mellanox PMD requirement)") + vpp_plugin_find_library(dpdk MNL_LIB "mnl") + list(APPEND DPDK_LINK_LIBRARIES "${MNL_LIB}") + else() + message(WARNING "EXPERIMENTAL: DPDK plugin without dlopen mode") + vpp_plugin_find_library(dpdk IBVERBS_LIB "libibverbs.a") + string_append(DPDK_LINK_FLAGS "${IBVERBS_LIB} -Wl,--exclude-libs,ALL") + endif() + endif() endif() ############################################################################## -# libnuma +# DPDK plugin ############################################################################## -dpdk_find_library(NUMA_LIB "numa") -list(APPEND DPDK_LINK_LIBRARIES ${NUMA_LIB}) -############################################################################## -# AESNI libraries -############################################################################## -if(DPDK_RTE_LIBRTE_PMD_AESNI_MB OR DPDK_RTE_LIBRTE_PMD_AESNI_GCM) - if(DPDK_IS_SHARED_LIB) - dpdk_find_library(IPSECMB_LIB "libIPSec_MB.so") - list(APPEND DPDK_LINK_LIBRARIES "${IPSECMB_LIB}") - else() - dpdk_find_library(IPSECMB_LIB "libIPSec_MB.a") - get_filename_component(IPSECMB_LIB_DIR ${IPSECMB_LIB} DIRECTORY) - string_append(DPDK_LINK_FLAGS "-L${IPSECMB_LIB_DIR}") - string_append(DPDK_LINK_FLAGS "-Wl,--exclude-libs,libIPSec_MB.a,-l:libIPSec_MB.a") - endif() -endif() +if(OPENSSL_FOUND) + include_directories(${OPENSSL_INCLUDE_DIR}) -############################################################################## -# Mellanox libraries -############################################################################## -if(DPDK_RTE_LIBRTE_MLX4_PMD OR DPDK_RTE_LIBRTE_MLX5_PMD) - dpdk_find_library(MNL_LIB "mnl") - list(APPEND DPDK_LINK_LIBRARIES "${MNL_LIB}") - if (DPDK_RTE_LIBRTE_MLX5_DLOPEN_DEPS) - message(STATUS "DPDK depends on libmnl (Mellanox PMD requirement)") - else() - dpdk_find_library(IBVERBS_LIB "ibverbs") - list(APPEND DPDK_LINK_LIBRARIES "${IBVERBS_LIB}") - dpdk_find_library(MLX5_LIB "mlx5") - list(APPEND DPDK_LINK_LIBRARIES "${MLX5_LIB}") - message(STATUS "DPDK depends on libmnl, libibverbs, libmlx5 (Mellanox PMD requirement)") + set(DPDK_CRYPTODEV_OP_SOURCE cryptodev/cryptodev_op_data_path.c) + set(DPDK_CRYPTODEV_SOURCE cryptodev/cryptodev.c) + if (${DPDK_VERSION} VERSION_GREATER_EQUAL "20.8.0") + set(DPDK_CRYPTODEV_RAW_SOURCE cryptodev/cryptodev_raw_data_path.c) endif() endif() -############################################################################## -# DPDK plugin -############################################################################## add_vpp_plugin(dpdk SOURCES buffer.c main.c - thread.c - api/dpdk_api.c - api/dpdk_test.c device/cli.c device/common.c device/device.c + device/driver.c device/flow.c device/format.c device/init.c device/node.c - hqos/hqos.c - ipsec/cli.c - ipsec/crypto_node.c - ipsec/esp_decrypt.c - ipsec/esp_encrypt.c - ipsec/ipsec.c + ${DPDK_CRYPTODEV_OP_SOURCE} + ${DPDK_CRYPTODEV_SOURCE} + ${DPDK_CRYPTODEV_RAW_SOURCE} MULTIARCH_SOURCES buffer.c device/device.c device/node.c - ipsec/crypto_node.c - ipsec/esp_decrypt.c - ipsec/esp_encrypt.c - - API_FILES - api/dpdk.api - - API_TEST_SOURCES - api/dpdk_test.c INSTALL_HEADERS device/dpdk.h - api/dpdk_all_api_h.h - ipsec/ipsec.h LINK_FLAGS "${DPDK_LINK_FLAGS}" @@ -175,7 +153,9 @@ add_vpp_plugin(dpdk LINK_LIBRARIES ${DPDK_LINK_LIBRARIES} + LINK_LIBRARIES + ${OPENSSL_LIBRARIES} + COMPONENT vpp-plugin-dpdk ) -