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)# 配置执行文件输出目录 & 输出名字, 这里配置所有输出文件名同为 l2fwdset_target_properties(${build_target} PROPERTIESRUNTIME_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-archivedpdk-Wl,--no-whole-archive -Wl,--end-groupibverbsmlx5mnldlmnumapthread)
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)# 配置执行文件输出目录 & 输出名字, 这里配置所有输出文件名同为 l2fwdset_target_properties(${build_target} PROPERTIESRUNTIME_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-archivedpdk-Wl,--no-whole-archive -Wl,--end-groupibverbsmlx5mnldlmnumapthread)
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 - 使用 cmake 构建l2fwd多平台编译系统相关推荐

  1. windows平台下使用cmake构建静态lib库以及使用静态lib库gtest项目

    有些时候我们需要将部分代码编译成单独的一个库,然后在另一个项目中去使用这个库 大部分是linux环境下的指令,但是也差不是很多 记录一下构建的经过 目录 1.使用cmake构建及使用lib库 构建li ...

  2. CMake 构建项目Android NDK项目基础知识

    本篇文章将介绍如何使用 CMake 构建实现你的第一个 NDK 项目. ##前言 你好!欢迎来到我的的学习笔记分享系列,第一次给大家分享的是 Android NDK 开发的学习笔记,让我们先开始了解 ...

  3. 【笔记】CMake构建C++工程

    一句话结论:本文归纳CMake构建c++工程的基本用法,实现多依赖.多工程.多文件格式的工程编译构建. 1.简介 CMake(cross-platform make)是一个跨平台编译工具,它不能直接生 ...

  4. 使用 CMake 构建 LLVM

    使用 CMake 构建 LLVM 1. 介绍 2. 快速开始 3. 基本的 CMake 用法 4. 选项和变量 4.1 经常使用的 CMake 变量 4.2 特定于LLVM的变量 5. CMake C ...

  5. 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...

  6. Domino+Qucikplace+Sametime构建企业办公平台图文攻略(三)

    上接<Domino+Qucikplace+Sametime构建企业办公平台图文攻略(二)>   八.安装quickplace (水煮豆豆注:qp安装需要至少配置并运行过一次服务器,因为qp ...

  7. (十三) 构建dubbo分布式平台-dubbo管控台安装

    上一篇我们介绍<构建dubbo分布式平台-zookeeper注册中心的安装>,今天我们来学习-dubbo管控台安装. Dubbo管理控制台的安装 1.Dubbo管理控制台的主要作用:服务治 ...

  8. 省时省事省力 巧用阿里ECS D1构建大数据处理平台

    随着人们逐渐认识到 "大数据"的价值,互联网.电商到金融业.政企等各行业开始处理海量数据.如何低成本.敏捷高效地搭建大数据处理平台,成为影响大数据创新效率的关键. 为了让用户以最简 ...

  9. 用CMake构建工程时 cmake -G“Unix Makefiles“ 的使用

    在Windows上使用CMake构建项目出现了很多错误,搜索了很多资料尝试改了很多地方始终没能找到与我类似的情况,一度让我以为是系统问题.今天发现就一句,是没用cmake -G"Unix M ...

  10. php执行rsync,使用rsync工具构建php项目管理平台,rsync项目管理

    使用rsync工具构建php项目管理平台,rsync项目管理 对于phper来说部署项目和更新项目是很方便的,只要直接将写好的项目覆盖到项目的根目录就可以啦.但是平时项目开发的时候肯定不是只部署一个环 ...

最新文章

  1. 使用MyEclipse开发第一个Web程序
  2. (亲测可行)基于面绘制的MC算法以及基于体绘制的 Ray-casting 实现Dicom图像的三维重建(python实现)
  3. svg path属性
  4. 数据流图软件_软件工程导论知识点梳理之概念题
  5. Codeup墓地-问题 A: 最长上升子序列
  6. windows系统里懒人的福音,如何实现不按住ctrl实现文件多选
  7. 【强化学习】可视化学习tensorboard
  8. java高效写文件_java如何高效读写10G以上大文件
  9. 如何计算代码的运行性能
  10. pytorch扩展——如何自定义前向和后向传播
  11. Manually Summarizing EIGRP Routes
  12. python3语法学习第五天--函数(1)
  13. 全网首发:怎样制作CDKEY(0)-目录
  14. 如何修改hosts文件权限
  15. CentOS7中Docker安装mysql主从复制、日常排错
  16. 中国汉字一、二级字库的汉字与unicode编码(十六进制)对照表(收藏)
  17. 74cms前台getshell漏洞
  18. python两个表格相同数据筛选的方法_浅谈pandas筛选出表中满足另一个表所有条件的数据方法...
  19. Nginx 缓存配置
  20. SD和SDHC和SDXC卡的区别, class与u1/u3关系

热门文章

  1. php用putty安装吗,为什么通过Putty的SSH命令与PHP的phpseclib不同?
  2. GridView里面的Item高度设置
  3. 常见分布的期望方差矩母函数
  4. Luogu4936 Agent1
  5. Luogu1005 矩阵取数游戏
  6. 当要写验证性的代码时,利用git进行代码管理
  7. Linux下安装mysql(yum、二进制包、源码包)
  8. java添加多个按钮_java-向JFrame添加多个按钮,文本颜色不显示
  9. CMU 15-213 Introduction to Computer Systems学习笔记(12) Linking
  10. python有向图遍历_python – 获取有向图的所有边对. networkx