eBPF 工具链 / 使用 clang 和 llc 通过 CMake 编译 ebpf / 两阶段构建过程

发布于 2025-01-11 07:36:37 字数 1335 浏览 0 评论 0原文

我在一个文件夹中有一堆 ebpf 程序(使用 c 和 libbpf;没有 BCC/bpftrace),我们称它们为 File1.bpf.cFile2.bpf.c,<代码>...。 通常,我使用 clang 和 llc 编译 bpf 程序,每个文件本身:

  1. 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
  2. llc-11 -march=bpf -filetype=obj -o File1.bpf.o File1.bpf.ll

这样,就没有任何链接了。之后我可能想使用 bpftool 链接一些文件。

所以我的问题是:

  1. 如何在 cmake 中执行这个两阶段构建过程?我已经看到了一些使用函数的片段,但它对我来说不起作用并且感觉非常“hacky”。 当前的想法是使用 python 脚本作为假编译器。对于cmake,编译器设置为Python脚本,它调用clang和llc。我认为这是一个可能的解决方案,但它“感觉不对”并且也存在问题。此外,我想知道为什么我在 Stackoverflow 上找不到有关此主题的教程或问题,这导致了我的第二个问题:
  2. 此过程是否是最新的?如果不是:首选方法是什么处理 bpf 编译?

我想在 cmake 中实现的构建过程的可视化,每行都是独立的: 结构

我不想使用骷髅;之后 bpf 对象应该可以独立加载。

在网上看的时候,博文中通常在c代码时使用clang和llvm。 不过clang好像可以直接编译成bpf对象,存在无法指定-mcpu的问题1。使用mcpu设置指令集版本。因此,另一个问题是:

  1. 什么时候应该指定-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:

  1. 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
  2. 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:

  1. 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:
  2. 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:
Structure

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:

  1. When should -mcpu be specified?

Thanks in advance for any help :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文