aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/dpdk/CMakeLists.txt63
-rw-r--r--ports/dpdk/CONTROL4
-rw-r--r--ports/dpdk/FindNuma.cmake26
-rw-r--r--ports/dpdk/dpdkConfig.cmake31
-rw-r--r--ports/dpdk/portfile.cmake47
-rw-r--r--ports/dpdk/usage4
-rw-r--r--scripts/cmake/vcpkg_execute_required_process.cmake1
7 files changed, 176 insertions, 0 deletions
diff --git a/ports/dpdk/CMakeLists.txt b/ports/dpdk/CMakeLists.txt
new file mode 100644
index 000000000..1952227ae
--- /dev/null
+++ b/ports/dpdk/CMakeLists.txt
@@ -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}/)
diff --git a/ports/dpdk/CONTROL b/ports/dpdk/CONTROL
new file mode 100644
index 000000000..056800d29
--- /dev/null
+++ b/ports/dpdk/CONTROL
@@ -0,0 +1,4 @@
+Source: dpdk
+Version: 19.02
+Description: A set of libraries and drivers for fast packet processing
+
diff --git a/ports/dpdk/FindNuma.cmake b/ports/dpdk/FindNuma.cmake
new file mode 100644
index 000000000..d5bb61435
--- /dev/null
+++ b/ports/dpdk/FindNuma.cmake
@@ -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 ()
diff --git a/ports/dpdk/dpdkConfig.cmake b/ports/dpdk/dpdkConfig.cmake
new file mode 100644
index 000000000..d60265a77
--- /dev/null
+++ b/ports/dpdk/dpdkConfig.cmake
@@ -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 ()
diff --git a/ports/dpdk/portfile.cmake b/ports/dpdk/portfile.cmake
new file mode 100644
index 000000000..603ecd327
--- /dev/null
+++ b/ports/dpdk/portfile.cmake
@@ -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})
diff --git a/ports/dpdk/usage b/ports/dpdk/usage
new file mode 100644
index 000000000..6ecb606dd
--- /dev/null
+++ b/ports/dpdk/usage
@@ -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)
diff --git a/scripts/cmake/vcpkg_execute_required_process.cmake b/scripts/cmake/vcpkg_execute_required_process.cmake
index 5b8922c14..2e9ba7058 100644
--- a/scripts/cmake/vcpkg_execute_required_process.cmake
+++ b/scripts/cmake/vcpkg_execute_required_process.cmake
@@ -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}
)