On Wed, Feb 10, 2021 at 11:26:28AM -0800, Andrii Nakryiko wrote: SNIP > > > > Can't reproduce it. It works in all kinds of variants (relative and > > > > absolute O=, clean and not clean trees, etc). Jiri, please check as > > > > well. > > > > > > > > > > Odd, this reproduces for me on a completely clean checkout of bpf-next: > > > > > > $ git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/ > > > > > > $ cd bpf-next > > > > > > $ make -s O=build distclean > > > ../../scripts/Makefile.include:4: *** O=/tmp/bpf-next/build/tools/bpf/resolve_btfids does not exist. Stop. > > > > > > I do not really see how this could be environment related. It seems like > > > this comes from tools/scripts/Makefile.include, where there is no > > > guarantee that $(O) is created before being used like in the main > > > Makefile? > > > > right, we need to handle the case where tools/bpf/resolve_btfids > > does not exist, patch below fixes it for me > > > > jirka > > > > Looks good to me, please send it as a proper patch to bpf-next. > > But I'm curious, why is objtool not doing something like that? Is it > not doing clean at all? Or does it do it in some different way? yes, it's not connected to global make clean > > > > > --- > > diff --git a/Makefile b/Makefile > > index 159d9592b587..ce9685961abe 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -1088,8 +1088,14 @@ endif > > > > PHONY += resolve_btfids_clean > > > > +resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids > > + > > +# tools/bpf/resolve_btfids directory might not exist > > +# in output directory, skip its clean in that case > > resolve_btfids_clean: > > - $(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(abspath $(objtree))/tools/bpf/resolve_btfids clean > > +ifneq (,$(wildcard $(resolve_btfids_O))) > > nit: kind of backwards, usually it's in a `ifneq($var,)` form ok thanks, jirka