include/bpf.mk: check minimum required clang version
authorFelix Fietkau <nbd@nbd.name>
Tue, 9 Nov 2021 19:59:15 +0000 (20:59 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 9 Nov 2021 19:59:51 +0000 (20:59 +0100)
Avoid spurious runtime errors caused by loading eBPF modules
built with an old clang version

Signed-off-by: Felix Fietkau <nbd@nbd.name>
include/bpf.mk

index c68ad74554911afa8240c6addc6c26c45167c54f..967de7a1729972afc41df2fe8a26fe947243ae9f 100644 (file)
@@ -1,6 +1,8 @@
 BPF_DEPENDS := @HAS_BPF_TOOLCHAIN
 LLVM_VER:=
 
+CLANG_MIN_VER:=12
+
 ifneq ($(CONFIG_USE_LLVM_HOST),)
   BPF_TOOLCHAIN_HOST_PATH:=$(call qstrip,$(CONFIG_BPF_TOOLCHAIN_HOST_PATH))
   ifneq ($(BPF_TOOLCHAIN_HOST_PATH),)
@@ -61,6 +63,14 @@ BPF_CFLAGS := \
        -Wno-unused-label \
        -O2 -emit-llvm -Xclang -disable-llvm-passes
 
+ifeq ($(DUMP),)
+  CLANG_VER:=$(shell clang -dM -E - < /dev/null | grep __clang_major__ | cut -d' ' -f3)
+  CLANG_VER_VALID:=$(shell [ "$(CLANG_VER)" -ge "$(CLANG_MIN_VER)" ] && echo 1 )
+  ifeq ($(CLANG_VER_VALID),)
+    $(error ERROR: LLVM/clang version too old. Minimum required: $(CLANG_MIN_VER), found: $(CLANG_VER))
+  endif
+endif
+
 define CompileBPF
        $(CLANG) -g -target $(BPF_ARCH)-linux-gnu $(BPF_CFLAGS) $(2) \
                -c $(1) -o $(patsubst %.c,%.bc,$(1))