]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
tools build: Fix feature checks to touch target files on success
authorIan Rogers <irogers@google.com>
Sun, 31 May 2026 01:09:24 +0000 (18:09 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 4 Jun 2026 13:58:47 +0000 (10:58 -0300)
In tools/build/feature/Makefile, test-clang-bpf-co-re.bin and
test-bpftool-skeletons.bin redirected grep output but never touched or
created the $@ target file upon success.

Because the target file was never created on disk, Kbuild could never cache
the result of the check. Consequently, Make treated the prerequisite as
missing and continuously re-executed the Clang BPF backend and bpftool
feature checks on every single sub-make evaluation during build startup, or
on every incremental build.

Refactor both feature check recipes to touch $@ on success. For
test-clang-bpf-co-re.bin, group the shell pipeline within curly braces
and redirect both stdout and stderr to .make.output to allow errors to
be inspected and not appear in build output.

List test-clang-bpf-co-re.bin's input C file as a dependency so
modification triggers a rebuild. For test-bpftool-skeletons.bin, add it
to the FILES list so that it will be cleaned.

Assisted-by: Gemini:gemini-3.1-pro-preview
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: James Clark <james.clark@linaro.org>
Cc: Bill Wendling <morbo@google.com>
Cc: Costa Shulyupin <costa.shul@redhat.com>
Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
Cc: Justin Stitt <justinstitt@google.com>
Cc: Leo Yan <leo.yan@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
Cc: Yuzhuo Jing <yuzhuo@google.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/build/feature/Makefile

index 4e4a92ef5e1e776d4497114dd459000aa29e8699..9da5a4fd956a857e086df57d65356407859affcf 100644 (file)
@@ -72,7 +72,8 @@ FILES=                                          \
          test-file-handle.bin                  \
          test-libpfm4.bin                      \
          test-rust.bin                         \
-         test-libopenssl.bin
+         test-libopenssl.bin                   \
+         test-bpftool-skeletons.bin
 
 FILES := $(addprefix $(OUTPUT),$(FILES))
 
@@ -379,9 +380,9 @@ $(OUTPUT)test-libaio.bin:
 $(OUTPUT)test-libzstd.bin:
        $(BUILD) -lzstd
 
-$(OUTPUT)test-clang-bpf-co-re.bin:
-       $(CLANG) -S -g --target=bpf -o - $(patsubst %.bin,%.c,$(@F)) |  \
-               grep BTF_KIND_VAR
+$(OUTPUT)test-clang-bpf-co-re.bin: test-clang-bpf-co-re.c
+       { $(CLANG) -S -g --target=bpf -o - $< | \
+               grep BTF_KIND_VAR; } > $(@:.bin=.make.output) 2>&1 && touch $@
 
 $(OUTPUT)test-file-handle.bin:
        $(BUILD)
@@ -393,8 +394,8 @@ $(OUTPUT)test-libopenssl.bin:
        $(BUILD) $(shell $(PKG_CONFIG) --libs --cflags openssl 2>/dev/null)
 
 $(OUTPUT)test-bpftool-skeletons.bin:
-       $(SYSTEM_BPFTOOL) version | grep '^features:.*skeletons' \
-               > $(@:.bin=.make.output) 2>&1
+       { $(SYSTEM_BPFTOOL) version | grep '^features:.*skeletons'; } \
+               > $(@:.bin=.make.output) 2>&1 && touch $@
 
 # Testing Rust is special: we don't compile anything, it's enough to check the
 # compiler presence. Compiling a test code for this purposes is problematic,