Skip to content

Commit

Permalink
Add DPDK package (#5388)
Browse files Browse the repository at this point in the history
DPDK is a set of libraries and drivers for fast packet processing.

(cherry picked from commit 8127cb7b23557f21281186980883fdfb4fa08c47)
  • Loading branch information
kreuzerkrieg authored and Rastaban committed Mar 7, 2019
1 parent 0ef0ddd commit d92ad53
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 0 deletions.
63 changes: 63 additions & 0 deletions ports/dpdk/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.9)
PROJECT(dpdk C)

LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}")
LIST(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}")

INCLUDE(ProcessorCount)
PROCESSORCOUNT(PROCS)

#ARCH can be: i686, x86_64, ppc_64, arm64
#MACHINE can be: native, power8, armv8a
#EXECENV can be: linuxapp, bsdapp
#TOOLCHAIN can be: gcc, icc

SET(ARCH x86_64)
SET(MACHINE native)
SET(EXECENV linuxapp)
SET(TOOLCHAIN gcc)

IF (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
SET(ARCH "i686")
ELSEIF (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
SET(MACHINE arm8a)
ELSEIF (CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64")
SET(MACHINE power8)
SET(ARCH ppc_64)
ENDIF ()

IF (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
SET(EXECENV bsdapp)
ENDIF ()

FIND_PACKAGE(Numa REQUIRED)
FIND_PROGRAM(MAKE make)

SET(DPDK_CFLAGS "-fPIC")
IF (CMAKE_BUILD_TYPE STREQUAL Debug)
STRING(APPEND ${DPDK_CFLAGS} "-O0 -g")
ENDIF ()

SET(DPDK_TARGET ${ARCH}-${MACHINE}-${EXECENV}-${TOOLCHAIN})
#SET(DPDK_CONFIG O=${CMAKE_BUILD_TYPE}/build T=${DPDK_TARGET})
SET(DPDK_CONFIG "T=${DPDK_TARGET}")

IF (SOURCE_PATH)
SET(CMAKE_SOURCE_DIR ${SOURCE_PATH})
ENDIF ()

ADD_CUSTOM_TARGET(dpdk-configure
COMMAND ${MAKE} config ${DPDK_CONFIG}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/
VERBATIM
)

ADD_CUSTOM_TARGET(dpdk ALL
COMMAND ${MAKE} EXTRA_CFLAGS=\"${DPDK_CFLAGS}\" MAKEFLAGS=\"${DPDK_CONFIG} -j ${PROCS}\"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/
)

ADD_DEPENDENCIES(dpdk dpdk-configure)

INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/build/lib
DESTINATION ${CMAKE_SOURCE_DIR}/${CMAKE_BUILD_TYPE}/)
4 changes: 4 additions & 0 deletions ports/dpdk/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Source: dpdk
Version: 19.02
Description: A set of libraries and drivers for fast packet processing

26 changes: 26 additions & 0 deletions ports/dpdk/FindNuma.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
INCLUDE(FindPackageHandleStandardArgs)

FIND_PATH(NUMA_ROOT_DIR
NAMES include/numa.h
PATHS ENV NUMA_ROOT
DOC "NUMA library root directory")

FIND_PATH(NUMA_INCLUDE_DIR
NAMES numa.h
HINTS ${NUMA_ROOT_DIR}
PATH_SUFFIXES include
DOC "NUMA include directory")

FIND_LIBRARY(NUMA_LIBRARY
NAMES numa
HINTS ${NUMA_ROOT_DIR}
DOC "NUMA library file")

IF (NUMA_LIBRARY)
GET_FILENAME_COMPONENT(NUMA_LIBRARY_DIR ${NUMA_LIBRARY} PATH)
MARK_AS_ADVANCED(NUMA_INCLUDE_DIR NUMA_LIBRARY_DIR NUMA_LIBRARY)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(NUMA REQUIRED_VARS NUMA_ROOT_DIR NUMA_INCLUDE_DIR NUMA_LIBRARY)
ELSE ()
SET(NUMA_FOUND FALSE)
MESSAGE(FATAL_ERROR "Numa library not found.\nTry: 'sudo yum install numactl numactl-devel' (or sudo apt-get install libnuma1 libnuma-dev)")
ENDIF ()
31 changes: 31 additions & 0 deletions ports/dpdk/dpdkConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

FUNCTION(SET_LIBRARY_TARGET NAMESPACE LIB_NAME DEBUG_LIB_FILE_NAME RELEASE_LIB_FILE_NAME INCLUDE_DIR)
ADD_LIBRARY(${NAMESPACE}::${LIB_NAME} STATIC IMPORTED)
SET_TARGET_PROPERTIES(${NAMESPACE}::${LIB_NAME} PROPERTIES
IMPORTED_CONFIGURATIONS "RELEASE;DEBUG"
IMPORTED_LOCATION_RELEASE "${RELEASE_LIB_FILE_NAME}"
IMPORTED_LOCATION_DEBUG "${DEBUG_LIB_FILE_NAME}"
INTERFACE_INCLUDE_DIRECTORIES "${INCLUDE_DIR}"
)
SET(${NAMESPACE}_${LIB_NAME}_FOUND 1)
ENDFUNCTION()

GET_FILENAME_COMPONENT(DPDK_ROOT "${CMAKE_CURRENT_LIST_FILE}" PATH)
GET_FILENAME_COMPONENT(DPDK_ROOT "${DPDK_ROOT}" PATH)
GET_FILENAME_COMPONENT(DPDK_ROOT "${DPDK_ROOT}" PATH)

SET_LIBRARY_TARGET("DPDK" "dpdk" "${DPDK_ROOT}/debug/lib/libdpdk.a" "${DPDK_ROOT}/lib/libdpdk.a" "${DPDK_ROOT}/include/dpdk")

IF (CMAKE_BUILD_TYPE STREQUAL Debug)
LINK_DIRECTORIES(${DPDK_ROOT}/debug/lib/)
ELSE ()
LINK_DIRECTORIES(${DPDK_ROOT}/lib/)
ENDIF ()

FILE(GLOB DPDK_LIBS ${DPDK_ROOT}/lib/librte*.*)
FOREACH (LIB_FILE_NAME ${DPDK_LIBS})
GET_FILENAME_COMPONENT(LIB_NAME ${LIB_FILE_NAME} NAME_WE)
GET_FILENAME_COMPONENT(FULL_LIB_NAME ${LIB_FILE_NAME} NAME)
STRING(REPLACE "lib" "" LIB_NAME "${LIB_NAME}")
SET_LIBRARY_TARGET("DPDK" "${LIB_NAME}" "${DPDK_ROOT}/debug/lib/${FULL_LIB_NAME}" "${DPDK_ROOT}/lib/${FULL_LIB_NAME}" "${DPDK_ROOT}/include/dpdk")
ENDFOREACH ()
47 changes: 47 additions & 0 deletions ports/dpdk/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
INCLUDE(vcpkg_common_functions)

IF (NOT VCPKG_CMAKE_SYSTEM_NAME OR NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
MESSAGE(FATAL_ERROR "Intel dpdk currently only supports Linux/BSD platforms")
ENDIF ()

VCPKG_FROM_GITHUB(
OUT_SOURCE_PATH SOURCE_PATH
REPO DPDK/dpdk
REF v19.02
SHA512 e0cc7081b163b4e264b65c1abb7e0f8aa29211539cecc5cf52986699b800eb4d4f2026377c3048c5c3bd2791e41f21645bb655797a3300740aa83633fb87626e
HEAD_REF master
)

FIND_PATH(NUMA_INCLUDE_DIR NAME numa.h
PATHS ENV NUMA_ROOT
HINTS $ENV{HOME}/local/include /opt/local/include /usr/local/include /usr/include
)
IF (NOT NUMA_INCLUDE_DIR)
MESSAGE(FATAL_ERROR "Numa library not found.\nTry: 'sudo yum install numactl numactl-devel' (or sudo apt-get install libnuma1 libnuma-dev)")
ENDIF ()

VCPKG_CONFIGURE_CMAKE(
SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR}
PREFER_NINJA
OPTIONS
-DSOURCE_PATH=${SOURCE_PATH}
)

VCPKG_INSTALL_CMAKE()

# Headers are symbolic links here, gather all, resolve and copy real files
FILE(GLOB_RECURSE HEADERS FOLLOW_SYMLINKS "${SOURCE_PATH}/build/include/*")
SET(REAL_FILES "")
FOREACH (HEADER ${HEADERS})
GET_FILENAME_COMPONENT(REAL_FILE "${HEADER}" REALPATH)
LIST(APPEND REAL_FILES "${REAL_FILE}")
ENDFOREACH ()

FILE(INSTALL ${SOURCE_PATH}/Release/lib/ DESTINATION ${CURRENT_PACKAGES_DIR}/lib)
FILE(INSTALL ${SOURCE_PATH}/Debug/lib/ DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
FILE(INSTALL ${REAL_FILES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/${PORT})
FILE(INSTALL ${CMAKE_CURRENT_LIST_DIR}/dpdkConfig.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
FILE(INSTALL ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
FILE(INSTALL ${SOURCE_PATH}/license/README DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)

VCPKG_TEST_CMAKE(PACKAGE_NAME ${PORT})
4 changes: 4 additions & 0 deletions ports/dpdk/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The package dpdk is compatible with built-in CMake targets:

FIND_PACKAGE(dpdk CONFIGURE REQUIRED)
TARGET_LINK_LIBRARIES(main PRIVATE DPDK::dpdk)
1 change: 1 addition & 0 deletions scripts/cmake/vcpkg_execute_required_process.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ function(vcpkg_execute_required_process)
message(FATAL_ERROR
" Command failed: ${vcpkg_execute_required_process_COMMAND}\n"
" Working Directory: ${vcpkg_execute_required_process_WORKING_DIRECTORY}\n"
" Error code: ${error_code}\n"
" See logs for more information:\n"
${STRINGIFIED_LOGS}
)
Expand Down

0 comments on commit d92ad53

Please sign in to comment.