DPDK - 使用 cmake 构建l2fwd多平台编译系统

dpdk环境搭建+创建dpdk项目,并连接dpdk库 新的编译方式 DPDK 较新版本已经支持 meson+ninja 的编译方式, 而在 20.11 应该就要抛弃上述老的编译方式. 其中我个人理解, meson 相当于 CMake, ninja 相当于 make. 依赖项 有些依赖项是和编译方式没有关系的, 比如对 make, gcc, Python, NUMA库等的依赖, 详见:https://doc.dpdk.org/guides/linux_gsg/sys_reqs.html#compilation-of-the-dpdk 如果使用新编译方式. 阅读详情

DPDK - 使用 cmake 构建l2fwd多平台编译系统

配置cmake基础参数

cmake_minimum_required(VERSION 3.10)

set(CMAKE_SYSTEM_NAME Linux)
message(STATUS "CC: \"$ENV{CC}\"")
message(STATUS "CXX: \"$ENV{CXX}\"")
message(STATUS "CMAKE_C_COMPILER: \"${CMAKE_C_COMPILER}\"")
message(STATUS "CMAKE_CXX_COMPILER: \"${CMAKE_CXX_COMPILER}\"")
# 设置C/CXX默认编译器 clang/clang++
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang)

set(CMAKE_COLOR_MAKEFILE ON)
set(CMAKE_VERBOSE_MAKEFILE ON)

#set(ENV{VERBOSE} 1)
# 设置默认 BUILD_TYPE
if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()
message(STATUS "Build type: \"${CMAKE_BUILD_TYPE}\"")

配置 DPDK 编译参数

project(l2fwd C)

# 设置 DPDK SDK/TARGET 目录
set(DPDK_SDK /DPDK/v1911)
set(DPDK_TARGET v1911_znver1-clang-11.0.0-fc29)

include_directories (
	${CMAKE_SOURCE_DIR}
)

link_directories (
	${CMAKE_SOURCE_DIR}/lib
)

string(CONCAT CMAKE_C_FLAGS_DEBUG
	"-O0 "
	"-g3 "
	"-fstack-protector "
	"-DFORTIFY_SOURCE=2 "
	"-fno-common "
)
string(CONCAT CMAKE_C_LDFLAGS_DEBUG
	"-g3 "
)
# 设置默认编译参数
string(CONCAT CMAKE_C_FLAGS_RELWITHDEBINFO
  "-Ofast "
  "-g3 "
  "-m64 -pthread "
  "-D_GNU_SOURCE "
  "-DNDEBUG "
  "-w  -Wextra  -Wall "
  "-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wpointer-arith -Wnested-externs -Wcast-qual -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings -Wdeprecated -Wno-missing-field-initializers -Wno-address-of-packed-member"
)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

add_machine_target 构建target编译参数

macro(add_machine_target dpdk_target dpdk_machine)
	set(build_target ${dpdk_target}_l2fwd)
	message(STATUS "Add build target: \"${build_target}\"")
	add_executable(${build_target} main.c)
	# 配置执行文件输出目录 & 输出名字, 这里配置所有输出文件名同为 l2fwd
	set_target_properties(${build_target} PROPERTIES
		RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${dpdk_target}"
		RUNTIME_OUTPUT_NAME l2fwd
	)
	# 添加DPDK include 目录
	target_include_directories (
		${build_target} PRIVATE
		${DPDK_SDK}/${dpdk_target}/include
		${CMAKE_SOURCE_DIR}/
	)
  	# 添加DPDK链接库目录
	target_link_directories (
		${build_target} PRIVATE
		${DPDK_SDK}/${dpdk_target}/lib
	)
     # 将空格分隔的编译参数转换为CMAKE支持的";"好分隔字符串
	string(REPLACE " " ";" dpdk_cflags ${dpdk_machine})
	message(STATUS "target_compile_options ${dpdk_cflags}")
	# 配置编译参数
	target_compile_options(
		${build_target} PRIVATE
		${dpdk_cflags}
	)
	# 配置链接库, MLX5 可根据需要自行修改
	target_link_libraries(
		${build_target} 	
		-Wl,--start-group -Wl,--whole-archive
    	dpdk
    	-Wl,--no-whole-archive -Wl,--end-group
    	ibverbs
    	mlx5
    	mnl
    	dl
 		m
		numa
		pthread
	)
endmacro()

配置多个TARGET

list(APPEND targets v1911_2670x2-clang-11.0.1  v1911_2699v4-clang-10.0.0)
list(APPEND machines -march=sandybridge -march=broadwell )
# 生成多个target
foreach(t m IN ZIP_LISTS targets machines)
	message(STATUS "target=${t} marchin=${m}")
	add_machine_target("${t}" "${m}")
endforeach()

完整CMakeLists.txt

注:
可添加多个DPDK版本&RTE_TARGET编译环境

cmake_minimum_required(VERSION 3.10)

set(CMAKE_SYSTEM_NAME Linux)
message(STATUS "CC: \"$ENV{CC}\"")
message(STATUS "CXX: \"$ENV{CXX}\"")
message(STATUS "CMAKE_C_COMPILER: \"${CMAKE_C_COMPILER}\"")
message(STATUS "CMAKE_CXX_COMPILER: \"${CMAKE_CXX_COMPILER}\"")
# 设置C/CXX默认编译器 clang/clang++
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang)

set(CMAKE_COLOR_MAKEFILE ON)
set(CMAKE_VERBOSE_MAKEFILE ON)

#set(ENV{VERBOSE} 1)
# 设置默认 BUILD_TYPE
if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()
message(STATUS "Build type: \"${CMAKE_BUILD_TYPE}\"")

project(l2fwd C)

# 设置 DPDK SDK/TARGET 目录
set(DPDK_SDK /DPDK/v1911)
set(DPDK_TARGET v1911_znver1-clang-11.0.0-fc29)

include_directories (
	${CMAKE_SOURCE_DIR}
)

link_directories (
	${CMAKE_SOURCE_DIR}/lib
)

string(CONCAT CMAKE_C_FLAGS_DEBUG
	"-O0 "
	"-g3 "
	"-fstack-protector "
	"-DFORTIFY_SOURCE=2 "
	"-fno-common "
)
string(CONCAT CMAKE_C_LDFLAGS_DEBUG
	"-g3 "
)
# 设置默认编译参数
string(CONCAT CMAKE_C_FLAGS_RELWITHDEBINFO
  "-Ofast "
  "-g3 "
  "-m64 -pthread "
  "-D_GNU_SOURCE "
  "-DNDEBUG "
  "-w  -Wextra  -Wall "
  "-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wpointer-arith -Wnested-externs -Wcast-qual -Wformat-nonliteral -Wformat-security -Wundef -Wwrite-strings -Wdeprecated -Wno-missing-field-initializers -Wno-address-of-packed-member"
)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

macro(add_machine_target dpdk_target dpdk_machine)
	set(build_target ${dpdk_target}_l2fwd)
	message(STATUS "Add build target: \"${build_target}\"")
	add_executable(${build_target} main.c)
	# 配置执行文件输出目录 & 输出名字, 这里配置所有输出文件名同为 l2fwd
	set_target_properties(${build_target} PROPERTIES
		RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/${dpdk_target}"
		RUNTIME_OUTPUT_NAME l2fwd
	)
	# 添加DPDK include 目录
	target_include_directories (
		${build_target} PRIVATE
		${DPDK_SDK}/${dpdk_target}/include
		${CMAKE_SOURCE_DIR}
	)
  	# 添加DPDK链接库目录
	target_link_directories (
		${build_target} PRIVATE
		${DPDK_SDK}/${dpdk_target}/lib
	)
     # 将空格分隔的编译参数转换为CMAKE支持的";"好分隔字符串
	string(REPLACE " " ";" dpdk_cflags ${dpdk_machine})
	message(STATUS "target_compile_options ${dpdk_cflags}")
	# 配置DPDK编译参数
	target_compile_options(
		${build_target} PRIVATE
		${dpdk_cflags}
	)
	# 配置链接库, MLX5 可根据需要自行修改
	target_link_libraries(
		${build_target} 	
		-Wl,--start-group -Wl,--whole-archive
    	dpdk
    	-Wl,--no-whole-archive -Wl,--end-group
    	ibverbs
    	mlx5
    	mnl
    	dl
 		m
		numa
		pthread
	)
endmacro()

# 配置多TARGET
list(APPEND targets v1911_2670x2-clang-11.0.1  v1911_2699v4-clang-10.0.0-fc29 )
list(APPEND machines -march=sandybridge -march=broadwell )
# 生成多个target
foreach(t m IN ZIP_LISTS targets machines)
	message(STATUS "target=${t} marchin=${m}")
	add_machine_target("${t}" "${m}")
endforeach()
DPDK编译到独立C++工程的一个方法 这是一个实际项目中遇到的问题的解决方案, 当时已有的项目庞大而复杂, 使用g++编译, 需要用到dpdk而dpdk的编译有自己的一套框架, 把产品编译脚本全部套进去显然是不现实并且工作量太大. 下面给的是一个操作示例描述了如何编译, 如果有更好的方法也请告诉我~ 1: 首先把用到dpdk的相关c文件(dpdk默认不支持c++编译)编译为.o或者.a ifeq ($(RTE_SDK),) 阅读详情

相关推荐

DPDK rte_acl 学习踩坑及示例

最近开始需要用 DPDK ACL 来实现一些如包负载长度匹配的需求,因此开始学习 ACL 相关的内容,刚开始上手觉得还是挺难的,花了大概三四天看了官方的文档和一些示例,大概搞明白了 ACL 的用法,也踩了一些坑,这篇博客记录下这段时间的学习内容,最后提供了一个我写的小例子来参考。...

王鲜申的博客 2763

DPDK-l2fwd详解

概要 版本:DPDK-1.8.0 原作者:张云尧       出处:http://aidaiz.com/dpdk_l2fwd/ 本例中实现了相邻端口之间的相互转发。 比如一共4个端口可用,那么端口1收到数据后会转发给端口2,端口2收到数据后会转发给端口1,端口3和端口4也会相互转发。 编译 设置环境变量 12 export RTE_SDK=/(RTE_S

极速蜗牛 1万+

dpdk18版本下l2fwd自定义修改目的mac地址

将解压包解压之后,有一个main.c.dmac的文件,将其.dmac后缀去掉。然后放入l2fwd文件夹中。 编译如下: # export RTE_SDK=/root/dpdk # export RTE_TARGET=build # make CC main.o LD l2fwd INSTALL-APP l2fwd INSTALL-MAP l2fwd.map 适配dpdk-17.11.1,命令通过新增-d指定端口的dmac。 ./build/l2fwd -c 3 -n 2 -- -p 3 -d 11:11:11:11:11:11 -d 22:22:22:22:22:22 Port0的dmac为: 11:11:11:11:11:11 Port2的dmac为: 22:22:22:22:22:22 运行时输出信息增加了port的用户指定dmac显示: … Initializing port 0... done: Port 0, MAC address: 52:54:00:46:8D:C0 Initializing port 1... done: Port 1, MAC address: 52:54:00:F0:6C:50 Port 0, Destination MAC address: 11:11:11:11:11:11 Port 1, Destination MAC address: 22:22:22:22:22:22

CMake 编译运行dpdk项目程序

cmake 编译运行dpdk程序

u012149181的博客 1468

前端埋点的实践

1、前言 开始正文前先介绍一下埋点的概念~,(熟悉的朋友可以略过) 前端埋点: 是一种手段,它的目的是上报相关行为数据,相关人员以数据为依据来分析产品在用户端的使用情况,根据分析出来的结果辅助产品优化、迭代。 BI:商业智能,公司内部做数据分析相关的部门。 2、背景 在流量红利逐渐消失的现在,数据的采集、分析和精细化的运营显得更加重要,所以埋点的需求在互联网产品中是很常见的,目的上面也提到了。我们的追求就是又快又好的做好埋点工作,但是现实却不那么美好;目前我们团队在前端埋点方面存在一些痛点: 在构造埋点字段

Arui_0的博客 1772

STM32硬件SPI驱动ADS1255/1256避坑指南:从Cube MX配置到稳定采样实战

本文详细解析了使用STM32硬件SPI驱动高精度ADC芯片ADS1255/1256的完整流程与关键陷阱。重点阐述了Cube MX中SPI模式(必须为CPOL=1, CPHA=1)、数据帧格式(MSB First)及波特率(建议从256kHz起)的正确配置,并提供了分步读写时序的代码实现与逻辑分析仪调试方法,帮助开发者避开常见坑点,实现稳定可靠的高精度数据采样。

weixin_29193259的博客 361

dpdk项目使用cmake编译

新版本的dpdk使用了libdpdk.pc来封装库,所以使用cmake相对dpdk旧版本就好用多了 用法只需要添加这么几条即可 在使用 CMake 作为项目构建工具时,有一些库并没有提供 cmake 文件,往往提供的是 pkg-config 的 .pc 文件, 虽然可以在 cmake 中用 include_directories 和 link_directories 来手动指定查找目录,但这样写并不能保证跨平台, 甚至同一个库在不同Linux发行版中的位置也不一样,这个时候最好的解决方法就是能.

linggang_123的博客 2148

STM32MP157+AD7606BSTZ四通道IEPE传感器控制器实战(附电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器控制器设计实战,涵盖硬件架构、数据采集芯片对比、关键电路设计及信号处理算法。通过双核协同工作和优化算法,实现高精度振动监测与故障诊断,适用于工业机械状态监测等场景。

weixin_29171129的博客 367

用cmake构建DPDK l2fwd

用cmake构建DPDK l2fwd

Markchen7788的博客 546

LVGL colorwheel组件教程一(调色板)

【代码】LVGL colorwheel组件教程一(调色板)

摸鱼专家 440

NPU性能榨取手把手教程:RK3588上YOLOv5s多线程部署与120FPS极限探索

RK3588 YOLOv5s多线程部署优化指南 本教程深入解析RK3588芯片上YOLOv5s模型的高性能多线程部署方案。RK3588作为瑞芯微旗舰AIoT芯片,内置三核NPU(6TOPS算力)和硬件加速器(RGA/VPU),为AI推理提供强大支持。通过线程池技术,我们将视频处理的读取、推理、后处理等环节解耦并行,显著提升系统吞吐量。教程详细介绍了从PyTorch到RKNN格式的模型转换流程、INT8量化方法,以及基于RKNN C++ SDK的YOLOv5推理核心实现,帮助开发者最大化发挥RK3588的AI

LXY_LOVE36的博客 973

DPDK 20.11 安装与HELLOWORLD

编译环境 Centos 7.6 腾讯云服务器 2G 2核心 40G 硬盘 选择版本 DPDK 20.11 编译安装DPDK 从官网下载DPDK,解压。 使用 meson build 安装 第一个坑来了,DPDK20.11需要安装meson核ninja两个工具,这两个工具安装方式有两个,一个是编译安装,一个是使用python安装工具安装, 并且 DPDK20.11这个东西需要使用python 3.7及以上版本,需要解决的问题有: meson和 ninja的编译安装 python3...

sinat_41117967的博客 2793

SAP-ABAP:SAP IDOC 全面学习指南

SAP-ABAP:SAP IDOC 全面学习指南

baidu_35680696的博客 1617

DPDK (2) - 编译过程

本文使用dpdk-20.08版本作为示例。 关键字 RTE:runtime environment EAL:environment abstraction layer 方法一:Make编译 make config T=x86_64-native-linuxapp-gcc make 编译报错: /root/work/dpdk-20.08/lib/librte_eal/linux/eal_memory.c:32:18: fatal error: numa.h: No such file or direct

程序猿Ricky的日常干货 4237

SAP 固定资产采购简介

SAP 固定资产采购是指企业通过采购流程获取长期使用并记录为固定资产的物品。固定资产是企业为长期使用而购置的资产,如机器设备、办公设备、建筑物、车辆等,通常这些资产的使用期限较长,并且在资产负债表上记录。在SAP系统中,固定资产采购流程通常与物料管理(MM)模块和固定资产管理(FI-AA)模块相结合。这个过程涉及从需求的提出、采购订单的创建,到货物接收、发票校验和资产激活的多个步骤。

我小时候很黑的博客 1731

【数据分析】宏基因组alpha和beta多样性分析和差异物种筛选案例

本教程为读者呈现了宏基因组α和β多样性分析的完整案例。通过实际数据和详细步骤,读者可以深入理解这两种分析方法及其在R语言中的实现过程。教程中不仅提供了清晰的代码示例,还对每一步骤进行了详细解释,使读者能够轻松跟随并掌握分析技巧。无论是初学者还是有一定基础的研究者,都能通过本教程快速上手宏基因组多样性分析,为微生物组学研究提供有力支持。

专注生信领域 2212

ubuntu环境中使用dpdk动态库的方法

本人负责的数据处理引擎一直是在centos系统中运行,近期在适配ubuntu系统时, dpdk模块出现了一些问题,主要是dpdk动态库在ubuntu系统中使用的问题,现将适配过程中遇到的坑和解决方法记录一下。dpdk默认编译静态库,在centos和ubunt中均可正常使用。dpdk通过修改common_base中的CONFIG_RTE_BUILD_SHARED_LIB=y,则会编译dpdk动态库。在centos中使用dpdk动态库时,使用方式与静态库相同。

diego 1325

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

使用DPDK应用示例l2fwd进行性能测试

系统环境,处理器为:Intel® Core™ i7-4790K CPU @ 4.00GHz。 # cat /etc/issue Ubuntu 20.04 LTS \n \l # # uname -a Linux flyingshark 5.4.0-31-generic #35-Ubuntu SMP Thu May 7 20:20:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux # BIOS需要开启VT-x、VT-d支持,并且内核启动参数增加:"iommu=pt

redwingz的博客 6919

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

DPDK之makefile编译选项修改和gdb调试(三)

摘要 intel dpdk 的makefile 写的很好,该好好学习他的这种架构,但在调试程序时候发现,它的编译选项优化级别很高;怎样去修改intel dpdk中的编译选项,达到自己一个一个满意的程度;其大部分makefile规则都定义在dpdk/mk目录下;最后再说一下怎样用gdb工具调试dpdk; # ls mk/ arch rte.app.mk rte.extshared.mk rte.hostlib.mk rte.obj.mk rte.sdkdoc.mk

bob的博客 3768

DPDK使用make编译并运行示例程序

第一个helloworld程序编译并运行。

吴立赛的博客 1685

DPDK系列之二DPDK编译

对DPDK的编译及出现的错误,注意事项进行分步说明

fpcc的专栏 5160

为不同的Intel平台交叉编译DPDK

DPDK开源社区与您共享初夏的清凉和煦为不同的Intel平台交叉编译DPDK在某些DPDK开发环境中,编译服务器是固定的(使用Xeon系列CPU),但DPDK应用的部署平...

weixin_37097605的博客 1494

DPDK X710 DDP PPPoE 实践

DPDK X710 DDP PPPoE 实践 DPDK version: 21.08 X710 firmware-version: 6.80 0x80003cc1 1.1747.0 # lspci |grep Ethernet |grep X710 04:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02) 04:00.1 Ethernet controller: Intel

奋斗中拥有 2198

CMake指令解析 set(CMAKE_CXX_FLAGS “$ENV{CXXFLAGS} -rdynamic -O3 -fPIC -ggdb -std=c++11 -Wall -Wno-deprec

本文包含多种复杂编译选项的解释

m0_51551385的博客 2万+

DPDK总结(makefile)

dpdk版本17.11 config config/defconfig_x86_64-native-linuxapp-gcc config/common_linuxapp config/common_base 修改以上文件,make config T=$(RTE_TARGET) O=$(RTE_OUTPUT),生成新的$(RTE_OUTPUT)/.config 注意$(RTE_TARGET)和$(RTE_OUTPUT)最好保持一致 make config make config,进入GNUmakefile:

Jiajun Zhu 1804

DPDK19.02 已发布,新版本都有哪些新功能和变化?

DPDK 19.02版本发布,新功能和变化等你来Get!▌ 新功能1.增加了对按原始分配释放大页的支持一些使用内存事件回调(特别是管理RDMA内存区域的事件)的应用程序...

weixin_37097605的博客 1664
上一篇: DPDK-VPP 学习笔记-06 bond 链路聚合 LACP
下一篇: netconsole 重定向kernel日志到远程服务器
功名半纸
功名半纸 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄26年 1137粉丝 282原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值