#!/usr/bin/env sh LIBBPF_DIR=$1 OUTPUT_DIR=$2 if test -z "$LIBBPF_DIR"; then echo "error: no libbpf dir provided" exit 1 fi if test -z "$OUTPUT_DIR"; then echo "error: no output dir provided" exit 1 fi BPF_TYPES="\ bpf_cmd \ bpf_insn \ bpf_attr \ bpf_map_type \ bpf_prog_type \ bpf_attach_type " BPF_VARS="\ BPF_PSEUDO_.* BPF_ALU \ BPF_ALU64 \ BPF_LDX \ BPF_ST \ BPF_STX \ BPF_LD \ BPF_K \ BPF_DW \ BPF_W \ BPF_H \ BPF_B " BTF_TYPES="\ btf_header \ btf_ext_header \ btf_ext_info \ btf_ext_info_sec \ bpf_core_relo \ bpf_core_relo_kind \ btf_type \ btf_enum \ btf_array \ btf_member \ btf_param \ btf_var \ btf_var_secinfo " BTF_VARS="\ BTF_KIND_.* BTF_INT_.* " PERF_TYPES="\ perf_event_attr \ perf_sw_ids \ perf_event_sample_format \ perf_event_mmap_page \ perf_event_header \ perf_type_id \ perf_event_type " PERF_VARS="\ PERF_FLAG_.* \ PERF_EVENT_.* " bindgen $LIBBPF_DIR/include/uapi/linux/bpf.h \ --no-layout-tests \ --default-enum-style moduleconsts \ $(for ty in $BPF_TYPES; do echo --whitelist-type "$ty" done) \ $(for var in $BPF_VARS; do echo --whitelist-var "$var" done) \ > $OUTPUT_DIR/bpf_bindings.rs bindgen $LIBBPF_DIR/include/uapi/linux/btf.h \ --no-layout-tests \ --default-enum-style moduleconsts \ $(for ty in $BTF_TYPES; do echo --whitelist-type "$ty" done) \ $(for var in $BTF_VARS; do echo --whitelist-var "$var" done) \ > $OUTPUT_DIR/btf_bindings.rs bindgen $LIBBPF_DIR/src/libbpf_internal.h \ --no-layout-tests \ --default-enum-style moduleconsts \ $(for ty in $BTF_TYPES; do echo --whitelist-type "$ty" done) \ $(for var in $BTF_VARS; do echo --whitelist-var "$var" done) \ > $OUTPUT_DIR/btf_internal_bindings.rs bindgen include/perf_wrapper.h \ --no-layout-tests \ --default-enum-style moduleconsts \ $(for ty in $PERF_TYPES; do echo --whitelist-type "$ty" done) \ $(for var in $PERF_VARS; do echo --whitelist-var "$var" done) \ > $OUTPUT_DIR/perf_bindings.rs