Re: [PATCH] kbuild: only clean objtool on mrproper

From: Nathan Chancellor

Date: Sat Feb 28 2026 - 00:54:01 EST


On Wed, Feb 25, 2026 at 02:21:05PM -0700, Nathan Chancellor wrote:
> On Wed, Feb 25, 2026 at 09:23:09PM +0100, Michal Suchánek wrote:
> > On Wed, Feb 25, 2026 at 01:04:17PM -0700, Nathan Chancellor wrote:
> > > Wouldn't resolve_btfids need the same treatment?
> >
> > No, make clean runs the clean target for resolve_btfids but the tool
> > remains.
>
> That does not reproduce for me personally:
>
> $ cat kernel/configs/btf.config
> CONFIG_BPF_SYSCALL=y
> # CONFIG_DEBUG_INFO_NONE is not set
> CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
> CONFIG_DEBUG_INFO_BTF=y
>
> $ make -skj"$(nproc)" ARCH=x86_64 O=build mrproper defconfig btf.config prepare
>
> $ ls -al build/tools/{bpf/resolve_btfids/resolve_btfids,objtool/objtool}
> -rwxr-xr-x 1 nathan nathan 2224456 Feb 25 13:33 build/tools/bpf/resolve_btfids/resolve_btfids
> -rwxr-xr-x 1 nathan nathan 4046296 Feb 25 13:33 build/tools/objtool/objtool
>
> $ make -skj"$(nproc)" ARCH=x86_64 O=build clean
>
> $ ls -al build/tools/{bpf/resolve_btfids/resolve_btfids,objtool/objtool}
> "build/tools/bpf/resolve_btfids/resolve_btfids": No such file or directory (os error 2)
> "build/tools/objtool/objtool": No such file or directory (os error 2)
>
> I guess resolve_btfids is not strictly required for external module
> builds because vmlinux may not be present and cmd_btf_ko handles that
> gracefully.

To close the loop here, 'make clean' removes vmlinux and resolve_btfids
at the same time and the check in cmd_btf_ko prevents that from becoming
a hard error. So technically no problem but a little fragile.

> > > Also, what's the use case? Running 'make clean' then copying what
> > > is left?
> >
> > Yes, that's what my build script has been doing for at least a decade,
> > possibly mutiple decades when it was somebody else's build script.
>
> I guess that is one way to ensure 'make clean' upholds its promise of
> leaving just enough to build external modules. I had missed that in
> review of this change.
>
> Another option would be splitting tools/objtool's clean target into
> clean and mrproper like the main kernel and mirroring what that does so
> that objtool the binary can remain around while all its objects get
> cleaned up.

FWIW, I sent this as an alternative since I think it adheres a little
more to Kbuild's contract that 'make clean' leaves enough around for
external module builds while removing all unneeded generated files:

https://lore.kernel.org/20260227-avoid-objtool-binary-removal-clean-v1-1-122f3e55eae9@xxxxxxxxxx/

Cheers,
Nathan