我在一个文件夹中有一堆 ebpf 程序(使用 c 和 libbpf;没有 BCC/bpftrace),我们称它们为File1.bpf.c
, File2.bpf.c
, ...
. clang
通常,我使用and编译 bpf 程序llc
,每个文件本身:
clang -I [...]/libbpf/build/root/usr/include/ -target bpf -S -D BPF_PROG -D __BPF_TRACING__ -D__TARGET_ARCH_x86 -Wall -O2 -emit-llvm -c -g File1.bpf.c
llc-11 -march=bpf -filetype=obj -o File1.bpf.o File1.bpf.ll
与此无关。之后我可能想使用 bpftool 链接一些文件。
所以我的问题是:
- 如何在 cmake 中完成这个两阶段的构建过程?我看过一些使用函数的片段,但它对我不起作用并且感觉非常“hacky”。当前的想法是使用 python 脚本作为伪编译器。对于 cmake,编译器设置为 Python 脚本,它调用 clang 和 llc。我认为这是一个可能的解决方案,但它“感觉不对”并且也有问题。另外,我想知道为什么我在 Stackoverflow 上找不到关于这个主题的教程或问题,这导致了我的第二个问题:
- 这个程序是最新的吗?如果不是:处理 bpf 编译的首选方法是什么?
我想在 cmake 中实现的构建过程的可视化,每一行都是独立的:
我不想使用骨架;bpf 对象之后应该可以独立加载。
网上看的时候,一般在博文中clang和llvm都是c代码。但是,似乎clang可以直接编译为bpf对象,存在-mcpu
无法指定的问题1。用mcpu
指令集版本设置。因此,另一个问题是:
- 什么时候应该
-mcpu
指定?
在此先感谢您的帮助:)