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.