meson 创建交叉编译

简介

Meson 旨在开发最具可用性和快速的构建系统。提供简单但强大的声明式语言用来描述构建。原生支持最新的工具和框架,如 Qt5 、代码覆盖率、单元测试和预编译头文件等。利用一组优化技术来快速编译代码,包括增量编译和完全编译。

交叉编译

以在x86环境编译arm平台可执行文.件为例。

保存配置

meson 使用 ndk 工具链交叉编译 arm64 的配置。
将下述内容保存成类似叫做 arm64.txt 的文件。

[binaries]
c = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang'
cpp = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang++'
ar = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar'
strip = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip'
#pkgconfig = '/usr/bin/x86_64-pc-linux-gnu-pkg-config'
cmake = '/Android/Sdk/cmake/3.18.1/bin/cmake'
ld = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld.gold'
#pcap-config = ''

[properties]
skip_sanity_check = true
sys_root = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot'
root = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29'

[built-in options]
c_args = ['-O2', '-pipe', '-g', '-feliminate-unused-debug-types']
c_link_args = ['-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed']
cpp_args = ['-O2', '-pipe', '-g', '-feliminate-unused-debug-types']
cpp_link_args = ['-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed']
#sys_root = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot'
#pkg_config_libdir ='/Android/Sdk/ndk/22.1.7171670/prebuilt/linux-x86_64/lib/pkgconfig'
#pkg_config_libdir ='/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29'

[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'

[target_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'armv8a'
endian = 'little'

修改配置

以下修改项在不同平台略有差异,但关键修改项基本一致。
以x86编译服务器10.44.3.21上编译arm64平台二进制为例。

修改C代码编译工具

c = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang'

修改为

c = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-gcc'

修改C++代码编译工具

cpp = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang++'

修改为

cpp = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-g++'

修改库处理工具

ar = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar'

修改为

ar = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-ar'

修改strip工具

strip = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip'

修改为

strip = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-strip'

修改链接工具

ld = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld.gold'

修改为

ld = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-ld'

修改sys_root路径

root = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29'

修改为

sys_root = '/home/buildarm64/ft-yinhe-cross/host/aarch64-buildroot-linux-gnu/sysroot'

解析配置

然后运行:meson arm64-build --cross-file arm64.txt解析文件arm64.txt中对编译器的配置信息。

编译

运行:ninja -C arm64-build编译,其编译中间结果及最终结果将输出到./arm64-build/目录。

DPDK19.11.13编译实例

添加编译配置文件arm64.txt

实施过程中除了按“修改配置”章节中修改响应编译工具,还将cmake/root关键字响应配置屏蔽。

[binaries]
c = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-gcc'
cpp = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-g++'
ar = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-ar'
strip = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-strip'
#pkgconfig = '/usr/bin/x86_64-pc-linux-gnu-pkg-config'
#cmake = ''
ld = '/home/buildarm64/ft-yinhe-cross/host/usr/bin/aarch64-linux-gnu-ld'
#pcap-config = ''

[properties]
skip_sanity_check = true
sys_root = '/home/buildarm64/ft-yinhe-cross/host/aarch64-buildroot-linux-gnu/sysroot'
#root = 'lib/aarch64-linux-android/29'

[built-in options]
c_args = ['-O2', '-pipe', '-g', '-feliminate-unused-debug-types']
c_link_args = ['-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed']
cpp_args = ['-O2', '-pipe', '-g', '-feliminate-unused-debug-types']
cpp_link_args = ['-Wl,-O1', '-Wl,--hash-style=gnu', '-Wl,--as-needed']
#sys_root = '/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot'
#pkg_config_libdir ='/Android/Sdk/ndk/22.1.7171670/prebuilt/linux-x86_64/lib/pkgconfig'
#pkg_config_libdir ='/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/29'

[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'

[target_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'armv8a'
endian = 'little'

解析配置

meson arm64-build --cross-file arm64.txt

编译

ninja -C arm64-build
meson -Dexamples=all arm64-build

获取testpmd

编译完成生成可执行文件testpmd,路径如下:
./arm64-build/app/dpdk-testpmd

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值