dpdk: rebase cryptodev engine for dpdk 20.11
[vpp.git] / src / plugins / dpdk / CMakeLists.txt
index 6c987ec..d63f116 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-if (CMAKE_CROSSCOMPILING)
-  # not supported yet
-  return()
-endif()
-
-##############################################################################
-# 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)
+vpp_plugin_find_library(dpdk DPDK_LIB "libdpdk.a")
 
 if (NOT DPDK_INCLUDE_DIR)
-  message(WARNING "-- DPDK headers not found - dpdk_plugin disabled")
+  message(WARNING "-- DPDK headers not found - dpdk plugin disabled")
   return()
 endif()
 
 if (NOT DPDK_LIB)
-  dpdk_find_library(DPDK_SHLIB "libdpdk.so")
+  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()
 
 ##############################################################################
-# Find DPDK Version
+# Parse DPDK config and version header files
 ##############################################################################
-file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.c
-"
-#include <stdio.h>
-#include <rte_version.h>
-int main()
-{
-  printf(\"VERSION=%s\\n\", strchr(rte_version(), ' ') + 1);
-  printf(\"RTE_PKTMBUF_HEADROOM=%u\\n\", RTE_PKTMBUF_HEADROOM);
-#ifdef RTE_LIBRTE_PMD_AESNI_MB
-  printf(\"RTE_LIBRTE_PMD_AESNI_MB=%u\\n\", RTE_LIBRTE_PMD_AESNI_MB);
-#endif
-#ifdef RTE_LIBRTE_PMD_AESNI_GCM
-  printf(\"RTE_LIBRTE_PMD_AESNI_GCM=%u\\n\", RTE_LIBRTE_PMD_AESNI_GCM);
-#endif
-#ifdef RTE_LIBRTE_MLX4_PMD
-  printf(\"RTE_LIBRTE_MLX4_PMD=%u\\n\", RTE_LIBRTE_MLX4_PMD);
-#endif
-#ifdef RTE_LIBRTE_MLX5_PMD
-  printf(\"RTE_LIBRTE_MLX5_PMD=%u\\n\", RTE_LIBRTE_MLX5_PMD);
-#ifdef RTE_LIBRTE_MLX5_DLOPEN_DEPS
-  printf(\"RTE_LIBRTE_MLX5_DLOPEN_DEPS=%u\\n\", RTE_LIBRTE_MLX5_DLOPEN_DEPS);
-#endif
-#endif
-  return 0;
-}
-")
-
-try_compile(DPDK_VARS_COMPILED
-  ${CMAKE_CURRENT_BINARY_DIR}
-  ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.c
-  CMAKE_FLAGS
-  -DINCLUDE_DIRECTORIES=${DPDK_INCLUDE_DIR}
-  COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.bin
-)
+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)
 
-if(DPDK_VARS_COMPILED)
-  execute_process(
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-    COMMAND ./dpdk_vars.bin
-    OUTPUT_VARIABLE DPDK_VARS
-    OUTPUT_STRIP_TRAILING_WHITESPACE
-  )
-  string(REPLACE "\n" ";" DPDK_VARS ${DPDK_VARS})
-  foreach(v ${DPDK_VARS})
-    string(REPLACE "=" ";" v ${v})
+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})
-  endforeach()
-endif()
+  endif()
+endforeach()
 
-file(REMOVE
-  ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.c
-  ${CMAKE_CURRENT_BINARY_DIR}/dpdk_vars.bin
-)
+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
@@ -133,51 +79,43 @@ endif()
 ##############################################################################
 # libnuma
 ##############################################################################
-dpdk_find_library(NUMA_LIB "numa")
+vpp_plugin_find_library(dpdk 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()
-
 ##############################################################################
 # 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)
+  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()
-    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)")
+    message(WARNING "EXPERIMENTAL: DPDK plugin without dlopen mode")
+    vpp_plugin_find_library(dpdk IBVERBS_LIB "libibverbs.a")
+    vpp_plugin_find_library(dpdk MLX5_LIB "libmlx5.a")
+    vpp_plugin_find_library(dpdk MLX4_LIB "libmlx4.a")
+    vpp_plugin_find_library(dpdk CCAN_LIB "libccan.a")
+    vpp_plugin_find_library(dpdk RDMA_UTIL_LIB "rdma_util")
+    string_append(DPDK_LINK_FLAGS "-Wl,--whole-archive,${IBVERBS_LIB},${MLX5_LIB},${MLX4_LIB},${CCAN_LIB},${RDMA_UTIL_LIB},--no-whole-archive")
   endif()
 endif()
 
 ##############################################################################
 # DPDK plugin
 ##############################################################################
+
+if (${DPDK_VERSION} VERSION_GREATER_EQUAL "20.8.0")
+  set(DPDK_CRYPTODEV_SOURCE cryptodev_dp_api)
+else ()
+  set(DPDK_CRYPTODEV_SOURCE cryptodev)
+endif ()
+
 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
@@ -185,12 +123,12 @@ add_vpp_plugin(dpdk
   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
+  cryptodev/${DPDK_CRYPTODEV_SOURCE}.c
 
   MULTIARCH_SOURCES
   buffer.c
@@ -200,15 +138,8 @@ add_vpp_plugin(dpdk
   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
@@ -220,4 +151,3 @@ add_vpp_plugin(dpdk
   COMPONENT
   vpp-plugin-dpdk
 )
-