mirror of
https://github.com/cemu-project/vcpkg.git
synced 2025-02-22 18:47:09 +01:00
Add DPDK package (#5388)
DPDK is a set of libraries and drivers for fast packet processing. (cherry picked from commit 8127cb7b23557f21281186980883fdfb4fa08c47)
This commit is contained in:
parent
0ef0ddd739
commit
d92ad530a9
63
ports/dpdk/CMakeLists.txt
Normal file
63
ports/dpdk/CMakeLists.txt
Normal file
@ -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
ports/dpdk/CONTROL
Normal file
4
ports/dpdk/CONTROL
Normal file
@ -0,0 +1,4 @@
|
||||
Source: dpdk
|
||||
Version: 19.02
|
||||
Description: A set of libraries and drivers for fast packet processing
|
||||
|
26
ports/dpdk/FindNuma.cmake
Normal file
26
ports/dpdk/FindNuma.cmake
Normal file
@ -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
ports/dpdk/dpdkConfig.cmake
Normal file
31
ports/dpdk/dpdkConfig.cmake
Normal file
@ -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
ports/dpdk/portfile.cmake
Normal file
47
ports/dpdk/portfile.cmake
Normal file
@ -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
ports/dpdk/usage
Normal file
4
ports/dpdk/usage
Normal file
@ -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)
|
@ -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}
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user