Linux-kselftest Archive on lore.kernel.org
 help / color / Atom feed
From: "Toke Høiland-Jørgensen" <toke@redhat.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
	Yonghong Song <yhs@fb.com>, Andrii Nakryiko <andriin@fb.com>,
	Doug Ledford <dledford@redhat.com>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	"David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Jesper Dangaard Brouer <brouer@redhat.com>,
	John Fastabend <john.fastabend@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Shuah Khan <shuah@kernel.org>,
	Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
	open list <linux-kernel@vger.kernel.org>,
	linux-rdma@vger.kernel.org,
	"open list\:KERNEL SELFTEST FRAMEWORK" 
	<linux-kselftest@vger.kernel.org>,
	clang-built-linux@googlegroups.com
Subject: Re: [PATCH bpf-next v3 09/11] selftests: Remove tools/lib/bpf from include path
Date: Fri, 17 Jan 2020 10:49:36 +0100
Message-ID: <87r1zyquof.fsf@toke.dk> (raw)
In-Reply-To: <CAEf4Bzba5FHN_iN52qRiGisRcauur1FqDY545EwE+RVR-nFvQA@mail.gmail.com>

Andrii Nakryiko <andrii.nakryiko@gmail.com> writes:

> On Thu, Jan 16, 2020 at 5:28 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>>
>> From: Toke Høiland-Jørgensen <toke@redhat.com>
>>
>> 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.
>>
>> Instead, we introduce a new header files directory under the scratch tools/
>> dir, and add a rule to run the 'install_headers' rule from libbpf to have a
>> full set of consistent libbpf headers in $(OUTPUT)/tools/include/bpf, and
>> then use $(OUTPUT)/tools/include as the include path for selftests.
>>
>> For consistency we also make sure we put all the scratch build files from
>> other bpftool and libbpf into tools/build/, so everything stays within
>> selftests/.
>>
>> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
>> ---
>>  tools/testing/selftests/bpf/.gitignore |    1 +
>>  tools/testing/selftests/bpf/Makefile   |   50 +++++++++++++++++++-------------
>>  2 files changed, 31 insertions(+), 20 deletions(-)
>>
>> diff --git a/tools/testing/selftests/bpf/.gitignore b/tools/testing/selftests/bpf/.gitignore
>> index 1d14e3ab70be..849be9990ad2 100644
>> --- a/tools/testing/selftests/bpf/.gitignore
>> +++ b/tools/testing/selftests/bpf/.gitignore
>> @@ -40,3 +40,4 @@ test_cpp
>>  /bpf_gcc
>>  /tools
>>  bpf_helper_defs.h
>> +/include/bpf
>
> Isn't the real path (within selftests/bpf) a tools/include/bpf, which
> is already ignored through /tools rule?

Yeah, you're correct. I started out with having it in include/bpf, but
ended up moving it, and guess I forgot to remove the .gitignore. Will fix.

>> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
>> index 1fd7da49bd56..c3fa695bb028 100644
>> --- a/tools/testing/selftests/bpf/Makefile
>> +++ b/tools/testing/selftests/bpf/Makefile
>> @@ -20,8 +20,8 @@ CLANG         ?= clang
>>  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)                      \
>> +CFLAGS += -g -Wall -O2 $(GENFLAGS) -I$(CURDIR) -I$(APIDIR)              \
>> +         -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) -I$(TOOLSINCDIR)     \
>>           -Dbpf_prog_load=bpf_prog_test_load                            \
>>           -Dbpf_load_program=bpf_test_load_program
>>  LDLIBS += -lcap -lelf -lz -lrt -lpthread
>> @@ -97,11 +97,15 @@ OVERRIDE_TARGETS := 1
>>  override define CLEAN
>>         $(call msg,CLEAN)
>>         $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES) $(EXTRA_CLEAN)
>> -       $(MAKE) -C $(BPFDIR) OUTPUT=$(OUTPUT)/ clean
>>  endef
>>
>>  include ../lib.mk
>>
>> +SCRATCH_DIR := $(OUTPUT)/tools
>> +BUILD_DIR := $(SCRATCH_DIR)/build
>> +INCLUDE_DIR := $(SCRATCH_DIR)/include
>> +INCLUDE_BPF := $(INCLUDE_DIR)/bpf/bpf.h
>> +
>>  # Define simple and short `make test_progs`, `make test_sysctl`, etc targets
>>  # to build individual tests.
>>  # NOTE: Semicolon at the end is critical to override lib.mk's default static
>> @@ -120,7 +124,7 @@ $(OUTPUT)/urandom_read: urandom_read.c
>>         $(call msg,BINARY,,$@)
>>         $(CC) -o $@ $< -Wl,--build-id
>>
>> -$(OUTPUT)/test_stub.o: test_stub.c
>> +$(OUTPUT)/test_stub.o: test_stub.c $(INCLUDE_BPF)
>>         $(call msg,CC,,$@)
>>         $(CC) -c $(CFLAGS) -o $@ $<
>>
>> @@ -129,7 +133,7 @@ $(OUTPUT)/runqslower: force
>>         $(Q)$(MAKE) $(submake_extras) -C $(TOOLSDIR)/bpf/runqslower           \
>>                     OUTPUT=$(CURDIR)/tools/ VMLINUX_BTF=$(abspath ../../../../vmlinux)
>>
>> -BPFOBJ := $(OUTPUT)/libbpf.a
>> +BPFOBJ := $(BUILD_DIR)/libbpf/libbpf.a
>>
>>  $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED): $(OUTPUT)/test_stub.o $(BPFOBJ)
>>
>> @@ -155,17 +159,23 @@ force:
>>  DEFAULT_BPFTOOL := $(OUTPUT)/tools/sbin/bpftool
>>  BPFTOOL ?= $(DEFAULT_BPFTOOL)
>>
>> -$(DEFAULT_BPFTOOL): force
>> -       $(Q)$(MAKE) $(submake_extras)  -C $(BPFTOOLDIR)                       \
>> +$(BUILD_DIR)/libbpf $(BUILD_DIR)/bpftool $(INCLUDE_DIR):
>> +       $(call msg,MKDIR,,$@)
>> +       mkdir -p $@
>> +
>> +$(DEFAULT_BPFTOOL): force $(BUILD_DIR)/bpftool
>
> directories should be included as order-only dependencies (after | )

OK.

>> +       $(Q)$(MAKE) $(submake_extras)  -C $(BPFTOOLDIR)         \
>> +                   OUTPUT=$(BUILD_DIR)/bpftool/                        \
>>                     prefix= DESTDIR=$(OUTPUT)/tools/ install
>>
>> -$(BPFOBJ): force
>> -       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(OUTPUT)/
>> +$(BPFOBJ): force $(BUILD_DIR)/libbpf
>
> same
>
>> +       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) \
>> +               OUTPUT=$(BUILD_DIR)/libbpf/
>>
>> -BPF_HELPERS := $(OUTPUT)/bpf_helper_defs.h $(wildcard $(BPFDIR)/bpf_*.h)
>> -$(OUTPUT)/bpf_helper_defs.h: $(BPFOBJ)
>> -       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR)                            \
>> -                   OUTPUT=$(OUTPUT)/ $(OUTPUT)/bpf_helper_defs.h
>> +BPF_HELPERS := $(wildcard $(BPFDIR)/bpf_*.h) $(INCLUDE_BPF)
>
> Shouldn't all BPF_HELPERS come from $(INCLUDE_DIR)/bpf now?
>
>> +$(INCLUDE_BPF): force $(BPFOBJ)
>
> And this can be more properly a $(BPF_HELPERS): force $(BPFOBJ)?
>
>> +       $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) install_headers \
>> +               OUTPUT=$(BUILD_DIR)/libbpf/ DESTDIR=$(SCRATCH_DIR) prefix=
>>
>>  # Get Clang's default includes on this system, as opposed to those seen by
>>  # '-target bpf'. This fixes "missing" files on some architectures/distros,
>> @@ -185,8 +195,8 @@ 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$(INCLUDE_DIR) -I$(CURDIR) -I$(CURDIR)/include/uapi      \
>> +            -I$(APIDIR) -I$(abspath $(OUTPUT)/../usr/include)
>>
>>  CLANG_CFLAGS = $(CLANG_SYS_INCLUDES) \
>>                -Wno-compare-distinct-pointer-types
>> @@ -306,7 +316,7 @@ $(TRUNNER_TEST_OBJS): $(TRUNNER_OUTPUT)/%.test.o:                   \
>>                       $(TRUNNER_EXTRA_HDRS)                             \
>>                       $(TRUNNER_BPF_OBJS)                               \
>>                       $(TRUNNER_BPF_SKELS)                              \
>> -                     $$(BPFOBJ) | $(TRUNNER_OUTPUT)
>> +                     $$(BPFOBJ) $$(INCLUDE_BPF) | $(TRUNNER_OUTPUT)
>
> singling out $(INCLUDE_BPF) looks weird? But I think $(BPFOBJ)
> achieves the same effect, so this change can be probably dropped? Same
> below.

I was having some trouble getting the dependency order right here.
$(INCLUDE_BPF) depends on $(BPFOBJ), not the other way around. May be
fixable though, I'll take another look.

-Toke


  parent reply index

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-16 13:22 [PATCH bpf-next v3 00/11] tools: Use consistent libbpf include paths everywhere Toke Høiland-Jørgensen
2020-01-16 13:22 ` [PATCH bpf-next v3 01/11] samples/bpf: Don't try to remove user's homedir on clean Toke Høiland-Jørgensen
2020-01-16 13:22 ` [PATCH bpf-next v3 02/11] tools/bpf/runqslower: Fix override option for VMLINUX_BTF Toke Høiland-Jørgensen
2020-01-16 18:54   ` Andrii Nakryiko
2020-01-17  9:44     ` Toke Høiland-Jørgensen
2020-01-16 13:22 ` [PATCH bpf-next v3 03/11] selftests: Pass VMLINUX_BTF to runqslower Makefile Toke Høiland-Jørgensen
2020-01-16 18:56   ` Andrii Nakryiko
2020-01-16 13:22 ` [PATCH bpf-next v3 04/11] tools/runqslower: Use consistent include paths for libbpf Toke Høiland-Jørgensen
2020-01-16 21:56   ` Andrii Nakryiko
2020-01-17  9:46     ` Toke Høiland-Jørgensen
2020-01-16 13:22 ` [PATCH bpf-next v3 05/11] selftests: " Toke Høiland-Jørgensen
2020-01-16 21:57   ` Andrii Nakryiko
2020-01-16 13:22 ` [PATCH bpf-next v3 06/11] bpftool: " Toke Høiland-Jørgensen
2020-01-16 22:21   ` Andrii Nakryiko
2020-01-16 13:22 ` [PATCH bpf-next v3 07/11] perf: " Toke Høiland-Jørgensen
2020-01-16 22:22   ` Andrii Nakryiko
2020-01-16 13:22 ` [PATCH bpf-next v3 08/11] samples/bpf: " Toke Høiland-Jørgensen
2020-01-16 22:23   ` Andrii Nakryiko
2020-01-16 13:22 ` [PATCH bpf-next v3 09/11] selftests: Remove tools/lib/bpf from include path Toke Høiland-Jørgensen
2020-01-16 22:41   ` Andrii Nakryiko
2020-01-16 23:05     ` Andrii Nakryiko
2020-01-17  9:50       ` Toke Høiland-Jørgensen
2020-01-17  9:49     ` Toke Høiland-Jørgensen [this message]
2020-01-16 13:22 ` [PATCH bpf-next v3 10/11] tools/runqslower: " Toke Høiland-Jørgensen
2020-01-16 22:44   ` Andrii Nakryiko
2020-01-16 13:22 ` [PATCH bpf-next v3 11/11] libbpf: Fix include of bpf_helpers.h when libbpf is installed on system Toke Høiland-Jørgensen
2020-01-16 22:43   ` Andrii Nakryiko
2020-01-17  4:14 ` [PATCH bpf-next v3 00/11] tools: Use consistent libbpf include paths everywhere Alexei Starovoitov
2020-01-17  8:57   ` Jesper Dangaard Brouer
2020-01-17  9:58     ` Toke Høiland-Jørgensen

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r1zyquof.fsf@toke.dk \
    --to=toke@redhat.com \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andriin@fb.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=brouer@redhat.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=dledford@redhat.com \
    --cc=jgg@ziepe.ca \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=kafai@fb.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=shuah@kernel.org \
    --cc=songliubraving@fb.com \
    --cc=yhs@fb.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-kselftest Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-kselftest/0 linux-kselftest/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-kselftest linux-kselftest/ https://lore.kernel.org/linux-kselftest \
		linux-kselftest@vger.kernel.org
	public-inbox-index linux-kselftest

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kselftest


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git