On Wed, Jan 15, 2020 at 6:16 AM Toke Høiland-Jørgensen <toke@xxxxxxxxxx> wrote: > > From: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> > > To make sure no new files are introduced that doesn't include the bpf/ > prefix in its #include, remove tools/lib/bpf from the include path > entirely, and use tools/lib instead. To fix the original issue with > bpf_helper_defs.h being stale, change the Makefile rule to regenerate the > file in the lib/bpf dir instead of having a local copy in selftests. > > Signed-off-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> > --- > tools/testing/selftests/bpf/.gitignore | 3 ++- > tools/testing/selftests/bpf/Makefile | 16 ++++++++-------- > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/tools/testing/selftests/bpf/.gitignore b/tools/testing/selftests/bpf/.gitignore > index 1d14e3ab70be..17dd02651dee 100644 > --- a/tools/testing/selftests/bpf/.gitignore > +++ b/tools/testing/selftests/bpf/.gitignore > @@ -33,10 +33,11 @@ libbpf.pc > libbpf.so.* > test_hashmap > test_btf_dump > +test_cgroup_attach > +test_select_reuseport These were moved into test_progs, they are not independent binaries anymore, you probably just had old leftovers lying in your selftests/bpf directory. Let's not re-add them. > xdping > test_cpp > *.skel.h > /no_alu32 > /bpf_gcc > /tools > -bpf_helper_defs.h > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile > index cd98ae875e30..4889cc3ead4b 100644 > --- a/tools/testing/selftests/bpf/Makefile > +++ b/tools/testing/selftests/bpf/Makefile > @@ -21,7 +21,7 @@ LLC ?= llc > LLVM_OBJCOPY ?= llvm-objcopy > BPF_GCC ?= $(shell command -v bpf-gcc;) > CFLAGS += -g -Wall -O2 $(GENFLAGS) -I$(CURDIR) -I$(APIDIR) -I$(LIBDIR) \ > - -I$(BPFDIR) -I$(GENDIR) -I$(TOOLSINCDIR) \ > + -I$(GENDIR) -I$(TOOLSINCDIR) \ > -Dbpf_prog_load=bpf_prog_test_load \ > -Dbpf_load_program=bpf_test_load_program > LDLIBS += -lcap -lelf -lz -lrt -lpthread > @@ -129,7 +129,7 @@ $(OUTPUT)/runqslower: force > $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower \ > OUTPUT=$(CURDIR)/tools/ > > -BPFOBJ := $(OUTPUT)/libbpf.a > +BPFOBJ := $(BPFDIR)/libbpf.a We can't do that. See fa633a0f8919 ("libbpf: Fix build on read-only filesystems") for why and why we have this problem with bpf_helper_defs.h in the first place. > > $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(BPFOBJ) > > @@ -155,17 +155,17 @@ force: > DEFAULT_BPFTOOL := $(OUTPUT)/tools/sbin/bpftool > BPFTOOL ?= $(DEFAULT_BPFTOOL) > > -$(DEFAULT_BPFTOOL): force > +$(DEFAULT_BPFTOOL): force $(BPFOBJ) do we need this? bpftool's makefile will build its own libbpf.a independently. We can probably optimize that, but see above, we need to ensure that we build only within selftest/bpf dirs. This "read-only outside of selftests/bpf" requirement actually made me realize that we probably need to specify OUTPUT pointing somewhere inside selftests/bpf/tools subdir to build entire bpftool within selftests/bpf directory and not touch anything outside. Do you mind fixing that while you are at it? > $(Q)$(MAKE) $(submake_extras) -C $(BPFTOOLDIR) \ > prefix= DESTDIR=$(OUTPUT)/tools/ install > > $(BPFOBJ): force > - $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ > + $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BPFDIR)/ $(BPFOBJ) > > -BPF_HELPERS := $(OUTPUT)/bpf_helper_defs.h $(wildcard $(BPFDIR)/bpf_*.h) > -$(OUTPUT)/bpf_helper_defs.h: $(BPFOBJ) > +BPF_HELPERS := $(BPFDIR)/bpf_helper_defs.h $(wildcard $(BPFDIR)/bpf_*.h) > +$(BPFDIR)/bpf_helper_defs.h: $(BPFOBJ) > $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \ > - OUTPUT=$(OUTPUT)/ $(OUTPUT)/bpf_helper_defs.h > + OUTPUT=$(BPFDIR)/ $(BPFDIR)/bpf_helper_defs.h > > # Get Clang's default includes on this system, as opposed to those seen by > # '-target bpf'. This fixes "missing" files on some architectures/distros, > @@ -186,7 +186,7 @@ MENDIAN=$(if $(IS_LITTLE_ENDIAN),-mlittle-endian,-mbig-endian) > CLANG_SYS_INCLUDES = $(call get_sys_includes,$(CLANG)) > BPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH) $(MENDIAN) \ > -I$(OUTPUT) -I$(CURDIR) -I$(CURDIR)/include/uapi \ > - -I$(APIDIR) -I$(LIBDIR) -I$(BPFDIR) -I$(abspath $(OUTPUT)/../usr/include) > + -I$(APIDIR) -I$(LIBDIR) -I$(abspath $(OUTPUT)/../usr/include) > > CLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \ > -Wno-compare-distinct-pointer-types >