summaryrefslogtreecommitdiff
path: root/vendor/github.com/cilium/ebpf/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/cilium/ebpf/Makefile')
-rw-r--r--vendor/github.com/cilium/ebpf/Makefile93
1 files changed, 68 insertions, 25 deletions
diff --git a/vendor/github.com/cilium/ebpf/Makefile b/vendor/github.com/cilium/ebpf/Makefile
index 5d4195833..2d5f04c37 100644
--- a/vendor/github.com/cilium/ebpf/Makefile
+++ b/vendor/github.com/cilium/ebpf/Makefile
@@ -1,67 +1,110 @@
# The development version of clang is distributed as the 'clang' binary,
# while stable/released versions have a version number attached.
# Pin the default clang to a stable version.
-CLANG ?= clang-11
-CFLAGS := -target bpf -O2 -g -Wall -Werror $(CFLAGS)
+CLANG ?= clang-14
+STRIP ?= llvm-strip-14
+OBJCOPY ?= llvm-objcopy-14
+CFLAGS := -O2 -g -Wall -Werror $(CFLAGS)
+
+CI_KERNEL_URL ?= https://github.com/cilium/ci-kernels/raw/master/
# Obtain an absolute path to the directory of the Makefile.
# Assume the Makefile is in the root of the repository.
REPODIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
UIDGID := $(shell stat -c '%u:%g' ${REPODIR})
+# Prefer podman if installed, otherwise use docker.
+# Note: Setting the var at runtime will always override.
+CONTAINER_ENGINE ?= $(if $(shell command -v podman), podman, docker)
+CONTAINER_RUN_ARGS ?= $(if $(filter ${CONTAINER_ENGINE}, podman), --log-driver=none, --user "${UIDGID}")
+
IMAGE := $(shell cat ${REPODIR}/testdata/docker/IMAGE)
VERSION := $(shell cat ${REPODIR}/testdata/docker/VERSION)
+
# clang <8 doesn't tag relocs properly (STT_NOTYPE)
# clang 9 is the first version emitting BTF
TARGETS := \
testdata/loader-clang-7 \
testdata/loader-clang-9 \
- testdata/loader-clang-11 \
+ testdata/loader-$(CLANG) \
+ testdata/btf_map_init \
testdata/invalid_map \
testdata/raw_tracepoint \
testdata/invalid_map_static \
- testdata/initialized_btf_map \
+ testdata/invalid_btf_map_init \
testdata/strings \
- internal/btf/testdata/relocs
+ testdata/freplace \
+ testdata/iproute2_map_compat \
+ testdata/map_spin_lock \
+ testdata/subprog_reloc \
+ testdata/fwd_decl \
+ btf/testdata/relocs \
+ btf/testdata/relocs_read \
+ btf/testdata/relocs_read_tgt
-.PHONY: all clean docker-all docker-shell
+.PHONY: all clean container-all container-shell generate
-.DEFAULT_TARGET = docker-all
+.DEFAULT_TARGET = container-all
-# Build all ELF binaries using a Dockerized LLVM toolchain.
-docker-all:
- docker run --rm --user "${UIDGID}" \
+# Build all ELF binaries using a containerized LLVM toolchain.
+container-all:
+ ${CONTAINER_ENGINE} run --rm ${CONTAINER_RUN_ARGS} \
-v "${REPODIR}":/ebpf -w /ebpf --env MAKEFLAGS \
+ --env CFLAGS="-fdebug-prefix-map=/ebpf=." \
+ --env HOME="/tmp" \
"${IMAGE}:${VERSION}" \
- make all
+ $(MAKE) all
-# (debug) Drop the user into a shell inside the Docker container as root.
-docker-shell:
- docker run --rm -ti \
+# (debug) Drop the user into a shell inside the container as root.
+container-shell:
+ ${CONTAINER_ENGINE} run --rm -ti \
-v "${REPODIR}":/ebpf -w /ebpf \
"${IMAGE}:${VERSION}"
clean:
-$(RM) testdata/*.elf
- -$(RM) internal/btf/testdata/*.elf
+ -$(RM) btf/testdata/*.elf
+
+format:
+ find . -type f -name "*.c" | xargs clang-format -i
+
+all: format $(addsuffix -el.elf,$(TARGETS)) $(addsuffix -eb.elf,$(TARGETS)) generate
+ ln -srf testdata/loader-$(CLANG)-el.elf testdata/loader-el.elf
+ ln -srf testdata/loader-$(CLANG)-eb.elf testdata/loader-eb.elf
-all: $(addsuffix -el.elf,$(TARGETS)) $(addsuffix -eb.elf,$(TARGETS))
+# $BPF_CLANG is used in go:generate invocations.
+generate: export BPF_CLANG := $(CLANG)
+generate: export BPF_CFLAGS := $(CFLAGS)
+generate:
+ go generate ./cmd/bpf2go/test
+ go generate ./internal/sys
+ cd examples/ && go generate ./...
testdata/loader-%-el.elf: testdata/loader.c
- $* $(CFLAGS) -mlittle-endian -c $< -o $@
+ $* $(CFLAGS) -target bpfel -c $< -o $@
+ $(STRIP) -g $@
testdata/loader-%-eb.elf: testdata/loader.c
- $* $(CFLAGS) -mbig-endian -c $< -o $@
+ $* $(CFLAGS) -target bpfeb -c $< -o $@
+ $(STRIP) -g $@
%-el.elf: %.c
- $(CLANG) $(CFLAGS) -mlittle-endian -c $< -o $@
+ $(CLANG) $(CFLAGS) -target bpfel -c $< -o $@
+ $(STRIP) -g $@
%-eb.elf : %.c
- $(CLANG) $(CFLAGS) -mbig-endian -c $< -o $@
+ $(CLANG) $(CFLAGS) -target bpfeb -c $< -o $@
+ $(STRIP) -g $@
-# Usage: make VMLINUX=/path/to/vmlinux vmlinux-btf
-.PHONY: vmlinux-btf
-vmlinux-btf: internal/btf/testdata/vmlinux-btf.gz
-internal/btf/testdata/vmlinux-btf.gz: $(VMLINUX)
- objcopy --dump-section .BTF=/dev/stdout "$<" /dev/null | gzip > "$@"
+.PHONY: generate-btf
+generate-btf: KERNEL_VERSION?=5.18
+generate-btf:
+ $(eval TMP := $(shell mktemp -d))
+ curl -fL "$(CI_KERNEL_URL)/linux-$(KERNEL_VERSION).bz" -o "$(TMP)/bzImage"
+ ./testdata/extract-vmlinux "$(TMP)/bzImage" > "$(TMP)/vmlinux"
+ $(OBJCOPY) --dump-section .BTF=/dev/stdout "$(TMP)/vmlinux" /dev/null | gzip > "btf/testdata/vmlinux.btf.gz"
+ curl -fL "$(CI_KERNEL_URL)/linux-$(KERNEL_VERSION)-selftests-bpf.tgz" -o "$(TMP)/selftests.tgz"
+ tar -xf "$(TMP)/selftests.tgz" --to-stdout tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.ko | \
+ $(OBJCOPY) --dump-section .BTF="btf/testdata/btf_testmod.btf" - /dev/null
+ $(RM) -r "$(TMP)"