On Wed, May 31, 2023 at 09:20:44AM +0200, Viktor Malik wrote: > On 5/30/23 15:29, Jiri Olsa wrote: > > On Tue, May 30, 2023 at 02:33:52PM +0200, Viktor Malik wrote: > >> Building BPF selftests with custom HOSTCFLAGS yields an error: > >> > >> # make HOSTCFLAGS="-O2" > >> [...] > >> HOSTCC ./tools/testing/selftests/bpf/tools/build/resolve_btfids/main.o > >> main.c:73:10: fatal error: linux/rbtree.h: No such file or directory > >> 73 | #include <linux/rbtree.h> > >> | ^~~~~~~~~~~~~~~~ > >> > >> The reason is that tools/bpf/resolve_btfids/Makefile passes header > >> include paths by extending HOSTCFLAGS which is overridden by setting > >> HOSTCFLAGS in the make command (because of Makefile rules [1]). > >> > >> This patch fixes the above problem by passing the include paths via > >> `HOSTCFLAGS_resolve_btfids` which is used by tools/build/Build.include > >> and can be combined with overridding HOSTCFLAGS. > >> > >> [1] https://www.gnu.org/software/make/manual/html_node/Overriding.html > >> > >> Fixes: 56a2df7615fa ("tools/resolve_btfids: Compile resolve_btfids as host program") > >> Signed-off-by: Viktor Malik <vmalik@xxxxxxxxxx> > >> --- > >> tools/bpf/resolve_btfids/Makefile | 4 ++-- > >> 1 file changed, 2 insertions(+), 2 deletions(-) > >> > >> diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile > >> index ac548a7baa73..4b8079f294f6 100644 > >> --- a/tools/bpf/resolve_btfids/Makefile > >> +++ b/tools/bpf/resolve_btfids/Makefile > >> @@ -67,7 +67,7 @@ $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OU > >> LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null) > >> LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf) > >> > >> -HOSTCFLAGS += -g \ > >> +HOSTCFLAGS_resolve_btfids += -g \ > >> -I$(srctree)/tools/include \ > >> -I$(srctree)/tools/include/uapi \ > >> -I$(LIBBPF_INCLUDE) \ > >> @@ -76,7 +76,7 @@ HOSTCFLAGS += -g \ > >> > >> LIBS = $(LIBELF_LIBS) -lz > >> > >> -export srctree OUTPUT HOSTCFLAGS Q HOSTCC HOSTLD HOSTAR > >> +export srctree OUTPUT HOSTCFLAGS_resolve_btfids Q HOSTCC HOSTLD HOSTAR > > > > hum, AFAICS this way the spacified HOSTCFLAGS="-O2" won't be pushed > > to the libbpf and libsubcmd dependencies, right? > > IIUC, it will, b/c we're doing: > > HOST_OVERRIDES := ... EXTRA_CFLAGS="$(HOSTCFLAGS)" > > and then pass HOST_OVERRIDES to libbpf and libsubcmd builds, which will > then pick EXTRA_CFLAGS as a part of their build. > > Confirmed for libsubcmd: > > $ make HOSTCFLAGS="-O2" V=1 | grep libsubcmd | grep O2 | wc -l > 14 > $ make V=1 | grep libsubcmd | grep O2 | wc -l > 0 > > Interestingly, I couldn't do the same for libbpf. It looks like libbpf > is not rebuilt for resolve_btfids b/c resolve_btfids/Makefile uses > $(BPFOBJ) as the libbpf target and selftests/bpf/Makefile passes > BPFOBJ=$(HOST_BPFOBJ) to the resolve_btfids build. So, an already built > libbpf is reused and that one hasn't picked HOSTCFLAGS. > > > how about we add the EXTRA_CFLAGS variable like we do in libbpf, > > libsubcmd or perf > > > > with the change below you'd need to run: > > > > $ make EXTRA_CFLAGS="-O2" > > > > I'd like to avoid that b/c then, we would need to issue a different make > command for the BPF selftests than for the rest of the kernel to pass > custom flags to host-built programs. ok > > > I'll dig up the cross build scenarious we broke last time we > > touched this stuff, perhaps Ian might remember as well ;-) > > That will be useful, thanks :-) there's test described by Nathan in here: https://lore.kernel.org/bpf/Y9mFVNEi5wAINARY@dev-arch.thelio-3990X/ jirka > > Viktor > > > > > jirka > > > > > > --- > > diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile > > index ac548a7baa73..58cfedc9c2db 100644 > > --- a/tools/bpf/resolve_btfids/Makefile > > +++ b/tools/bpf/resolve_btfids/Makefile > > @@ -18,8 +18,8 @@ else > > endif > > > > # Overrides for the prepare step libraries. > > -HOST_OVERRIDES := AR="$(HOSTAR)" CC="$(HOSTCC)" LD="$(HOSTLD)" ARCH="$(HOSTARCH)" \ > > - CROSS_COMPILE="" EXTRA_CFLAGS="$(HOSTCFLAGS)" > > +HOST_OVERRIDES = AR="$(HOSTAR)" CC="$(HOSTCC)" LD="$(HOSTLD)" ARCH="$(HOSTARCH)" \ > > + CROSS_COMPILE="" > > > > RM ?= rm > > HOSTCC ?= gcc > > @@ -67,7 +67,7 @@ $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OU > > LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null) > > LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf) > > > > -HOSTCFLAGS += -g \ > > +HOSTCFLAGS += $(EXTRA_CFLAGS) -g \ > > -I$(srctree)/tools/include \ > > -I$(srctree)/tools/include/uapi \ > > -I$(LIBBPF_INCLUDE) \ > > @@ -76,7 +76,7 @@ HOSTCFLAGS += -g \ > > > > LIBS = $(LIBELF_LIBS) -lz > > > > -export srctree OUTPUT HOSTCFLAGS Q HOSTCC HOSTLD HOSTAR > > +export srctree OUTPUT HOSTCFLAGS Q HOSTCC HOSTLD HOSTAR EXTRA_CFLAGS > > include $(srctree)/tools/build/Makefile.include > > > > $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) > > >