eBPF 工具链 / 使用 clang 和 llc 通过 CMake 编译 ebpf / 两阶段构建过程
我在一个文件夹中有一堆 ebpf 程序(使用 c 和 libbpf;没有 BCC/bpftrace),我们称它们为 File1.bpf.c
、File2.bpf.c
,<代码>...。 通常,我使用 clang 和 llc 编译 bpf 程序,每个文件本身:
- clang -I [...]/libbpf/build/root/usr/包括/ -目标 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 对象应该可以独立加载。
在网上看的时候,博文中通常在c代码时使用clang和llvm。 不过clang好像可以直接编译成bpf对象,存在无法指定-mcpu
的问题1。使用mcpu
设置指令集版本。因此,另一个问题是:
- 什么时候应该指定
-mcpu
?
提前感谢您的帮助:)
I have a bunch of ebpf-programs (using c and libbpf; no BCC/bpftrace) in a folder, let's call them File1.bpf.c
, File2.bpf.c
, ...
.
Usually, I compile bpf programs with clang
and llc
, every file by itself:
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
With this, nothing is linked. I might want use bpftool to link some of the files afterwards.
So my questions are:
- How to do this two-staged build process in cmake? I have seen some snippets using functions, but it did not work for me and feels very "hacky".
Current idea is to use a python-script as a fake-Compiler. For cmake, the compiler is set to be the Python script, which invokes clang and llc. I think this is a possible solution, but it does not "feel right" and has problems, too. Additionally, I wonder why I can not find a Tutorial or a question on Stackoverflow about this topic, which leads to my second question: - Is this procedure up to date? If not: What is the preferred way to handle bpf compilation?
A visualization of the build process I want to achieve in cmake with every row being independent:
I do not want to use skeletons; the bpf objects should be independently loadable afterwards.
When looking online, usually in blogposts clang and llvm are used when it is c code.
However, it seems like clang can directly compile to a bpf object, which has the problem that -mcpu
cannot be specified 1. With mcpu
the instruction set version is set. Therefore, another question is:
- When should
-mcpu
be specified?
Thanks in advance for any help :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论