diff options
| -rw-r--r-- | ports/dpdk/CMakeLists.txt | 63 | ||||
| -rw-r--r-- | ports/dpdk/CONTROL | 4 | ||||
| -rw-r--r-- | ports/dpdk/FindNuma.cmake | 26 | ||||
| -rw-r--r-- | ports/dpdk/dpdkConfig.cmake | 31 | ||||
| -rw-r--r-- | ports/dpdk/portfile.cmake | 47 | ||||
| -rw-r--r-- | ports/dpdk/usage | 4 | ||||
| -rw-r--r-- | scripts/cmake/vcpkg_execute_required_process.cmake | 1 |
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} ) |
