+ ##############################################################################
+ # 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()