github.com/cilium/ebpf@v0.15.1-0.20240517100537-8079b37aa138/cmd/bpf2go/README.md (about) 1 bpf2go 2 === 3 4 `bpf2go` compiles a C source file into eBPF bytecode and then emits a 5 Go file containing the eBPF. The goal is to avoid loading the 6 eBPF from disk at runtime and to minimise the amount of manual 7 work required to interact with eBPF programs. It takes inspiration 8 from `bpftool gen skeleton`. 9 10 Invoke the program using go generate: 11 12 //go:generate go run github.com/cilium/ebpf/cmd/bpf2go foo path/to/src.c -- -I/path/to/include 13 14 This will emit `foo_bpfel.go` and `foo_bpfeb.go`, with types using `foo` 15 as a stem. The two files contain compiled BPF for little and big 16 endian systems, respectively. 17 18 ## Environment Variables 19 20 You can use environment variables to affect all bpf2go invocations 21 across a project, e.g. to set specific C flags: 22 23 BPF2GO_FLAGS="-O2 -g -Wall -Werror $(CFLAGS)" go generate ./... 24 25 Alternatively, by exporting `$BPF2GO_FLAGS` from your build system, you can 26 control all builds from a single location. 27 28 Most bpf2go arguments can be controlled this way. See `bpf2go -h` for an 29 up-to-date list. 30 31 ## Generated types 32 33 `bpf2go` generates Go types for all map keys and values by default. You can 34 disable this behaviour using `-no-global-types`. You can add to the set of 35 types by specifying `-type foo` for each type you'd like to generate. 36 37 ## Examples 38 39 See [examples/kprobe](../../examples/kprobe/main.go) for a fully worked out example.