Re: [linux-next-20250324]/tool/bpf/bpftool fails to complie on linux-next-20250324

From: Saket Kumar Bhaskar
Date: Tue Mar 25 2025 - 07:46:25 EST


On Tue, Mar 25, 2025 at 11:09:24AM +0000, Quentin Monnet wrote:
> 2025-03-25 16:02 UTC+0530 ~ Venkat Rao Bagalkote <venkat88@xxxxxxxxxxxxx>
> > Greetings!!!
> >
> >
> > bpftool fails to complie on linux-next-20250324 repo.
> >
> >
> > Error:
> >
> > make: *** No rule to make target 'bpftool', needed by '/home/linux/
> > tools/testing/selftests/bpf/tools/include/vmlinux.h'. Stop.
> > make: *** Waiting for unfinished jobs.....
>
>
> Thanks! Would be great to have a bit more context on the error (and on
> how to reproduce) for next time. Bpftool itself seems to compile fine,
> the error shows that it's building it from the context of the selftests
> that seems broken.
>
>
Yes, selftest build for BPF fails.
## pwd
/linux/tools/testing/selftests/bpf

# make -j 33

make: *** No rule to make target 'bpftool', needed by '/home/upstreamci/linux/tools/testing/selftests/bpf/tools/include/vmlinux.h'. Stop.
make: *** Waiting for unfinished jobs....

> > Git bisect points to commit: 8a635c3856ddb74ed3fe7c856b271cdfeb65f293 as
> > first bad commit.
>
> Thank you Venkat for the bisect!
>
> On a quick look, that commit introduced a definition for BPFTOOL in
> tools/scripts/Makefile.include:
>
> diff --git a/tools/scripts/Makefile.include .../Makefile.include
> index 0aa4005017c7..71bbe52721b3 100644
> --- a/tools/scripts/Makefile.include
> +++ b/tools/scripts/Makefile.include
> @@ -91,6 +91,9 @@ LLVM_CONFIG ?= llvm-config
> LLVM_OBJCOPY ?= llvm-objcopy
> LLVM_STRIP ?= llvm-strip
>
> +# Some tools require bpftool
> +BPFTOOL ?= bpftool
> +
> ifeq ($(CC_NO_CLANG), 1)
> EXTRA_WARNINGS += -Wstrict-aliasing=3
>
> But several utilities or selftests under tools/ include
> tools/scripts/Makefile.include _and_ use their own version of the
> $(BPFTOOL) variable, often assigning only if unset, for example in
> tools/testing/selftests/bpf/Makefile:
>
> BPFTOOL ?= $(DEFAULT_BPFTOOL)
>
> My guess is that the new definition from Makefile.include overrides this
> with simply "bpftool" as a value, and the Makefile fails to build it as
> a result.
>
> If I guessed correctly, one workaround would be to rename the variable
> in Makefile.include (and in whatever Makefile now relies on it) into
> something that is not used in the other Makefiles, for example
> BPFTOOL_BINARY.
>
> Please copy the BPF mailing list on changes impacting BPF tooling (or
> for BPF-related patchsets in general).
>
> Thanks,
> Quentin
Yes you are right that the new definition from Makefile.include overrides this
with simply "bpftool" as a value, and the Makefile in bpf selftest fails to
build it as a result.

But the main cause is that it is not able to locate the bpftool binary.
So, is it good idea to both rename this variable in Makefile.include and
use:

BPFTOOL ?= /usr/sbin/bpftool

This is the link to patch that is impacting:
https://lore.kernel.org/all/20250218145859.27762-3-tglozar@xxxxxxxxxx/

Thanks,
Saket