diff mbox series

[bpf-next,v2,5/6] tools/runqslower: Enable out-of-tree build

Message ID 20201109110929.1223538-6-jean-philippe@linaro.org (mailing list archive)
State Changes Requested
Delegated to: BPF
Headers show
Series tools/bpftool: Fix cross and out-of-tree builds | expand

Checks

Context Check Description
netdev/cover_letter success Link
netdev/fixes_present success Link
netdev/patch_count success Link
netdev/tree_selection success Clearly marked for bpf-next
netdev/subject_prefix success Link
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Link
netdev/module_param success Was 0 now: 0
netdev/build_32bit fail Errors and warnings before: 4 this patch: 4
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/verify_fixes success Link
netdev/checkpatch fail Link
netdev/build_allmodconfig_warn success Errors and warnings before: 0 this patch: 0
netdev/header_inline success Link
netdev/stable success Stable not CCed

Commit Message

Jean-Philippe Brucker Nov. 9, 2020, 11:09 a.m. UTC
Enable out-of-tree build for runqslower. Only set OUTPUT=.output if it
wasn't already set by the user.

Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
---
 tools/bpf/runqslower/Makefile | 45 +++++++++++++++++++++++------------
 1 file changed, 30 insertions(+), 15 deletions(-)

Comments

Andrii Nakryiko Nov. 9, 2020, 8:23 p.m. UTC | #1
On Mon, Nov 9, 2020 at 3:11 AM Jean-Philippe Brucker
<jean-philippe@linaro.org> wrote:
>
> Enable out-of-tree build for runqslower. Only set OUTPUT=.output if it
> wasn't already set by the user.
>
> Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
> ---
>  tools/bpf/runqslower/Makefile | 45 +++++++++++++++++++++++------------
>  1 file changed, 30 insertions(+), 15 deletions(-)
>
> diff --git a/tools/bpf/runqslower/Makefile b/tools/bpf/runqslower/Makefile
> index bcc4a7396713..861f4dcde960 100644
> --- a/tools/bpf/runqslower/Makefile
> +++ b/tools/bpf/runqslower/Makefile
> @@ -1,15 +1,20 @@
>  # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
>  include ../../scripts/Makefile.include
>
> -OUTPUT := .output
> +ifeq ($(OUTPUT),)
> +  OUTPUT = $(abspath .output)/
> +endif

OUTPUT ?= .. didn't work?

> +
>  CLANG ?= clang
>  LLC ?= llc
>  LLVM_STRIP ?= llvm-strip
> -DEFAULT_BPFTOOL := $(OUTPUT)/sbin/bpftool
> +BPFTOOL_OUTPUT := $(OUTPUT)bpftool/
> +DEFAULT_BPFTOOL := $(BPFTOOL_OUTPUT)bpftool
>  BPFTOOL ?= $(DEFAULT_BPFTOOL)
>  LIBBPF_SRC := $(abspath ../../lib/bpf)
> -BPFOBJ := $(OUTPUT)/libbpf.a
> -BPF_INCLUDE := $(OUTPUT)
> +BPFOBJ_OUTPUT := $(OUTPUT)libbpf/
> +BPFOBJ := $(BPFOBJ_OUTPUT)libbpf.a
> +BPF_INCLUDE := $(BPFOBJ_OUTPUT)
>  INCLUDES := -I$(OUTPUT) -I$(BPF_INCLUDE) -I$(abspath ../../lib)        \
>         -I$(abspath ../../include/uapi)
>  CFLAGS := -g -Wall
> @@ -20,7 +25,6 @@ VMLINUX_BTF_PATHS := /sys/kernel/btf/vmlinux /boot/vmlinux-$(KERNEL_REL)
>  VMLINUX_BTF_PATH := $(or $(VMLINUX_BTF),$(firstword                           \
>                                           $(wildcard $(VMLINUX_BTF_PATHS))))
>
> -abs_out := $(abspath $(OUTPUT))
>  ifeq ($(V),1)
>  Q =
>  else
> @@ -36,9 +40,13 @@ all: runqslower
>
>  runqslower: $(OUTPUT)/runqslower
>
> -clean:
> +clean: $(DEFAULT_BPFTOOL)-clean $(BPFOBJ)-clean

why separate targets for $(DEFAULT_BPFTOOL)-clean and $(BPFOBJ)-clean?
Are they intended to be called separately? I don't think
parallelization is that important for the clean up. Let's just keep
all the cleaning in one place, not spreading it across Makefile?

>         $(call QUIET_CLEAN, runqslower)
> -       $(Q)rm -rf $(OUTPUT) runqslower
> +       $(Q)$(RM) -r $(BPFOBJ_OUTPUT) $(BPFTOOL_OUTPUT)
> +       $(Q)$(RM) $(OUTPUT)*.o $(OUTPUT)*.d
> +       $(Q)$(RM) $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h
> +       $(Q)$(RM) $(OUTPUT)runqslower
> +       $(Q)$(RM) -r .output
>

[...]
Jean-Philippe Brucker Nov. 10, 2020, 12:43 p.m. UTC | #2
On Mon, Nov 09, 2020 at 12:23:28PM -0800, Andrii Nakryiko wrote:
> On Mon, Nov 9, 2020 at 3:11 AM Jean-Philippe Brucker
> <jean-philippe@linaro.org> wrote:
> >
> > Enable out-of-tree build for runqslower. Only set OUTPUT=.output if it
> > wasn't already set by the user.
> >
> > Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
> > ---
> >  tools/bpf/runqslower/Makefile | 45 +++++++++++++++++++++++------------
> >  1 file changed, 30 insertions(+), 15 deletions(-)
> >
> > diff --git a/tools/bpf/runqslower/Makefile b/tools/bpf/runqslower/Makefile
> > index bcc4a7396713..861f4dcde960 100644
> > --- a/tools/bpf/runqslower/Makefile
> > +++ b/tools/bpf/runqslower/Makefile
> > @@ -1,15 +1,20 @@
> >  # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
> >  include ../../scripts/Makefile.include
> >
> > -OUTPUT := .output
> > +ifeq ($(OUTPUT),)
> > +  OUTPUT = $(abspath .output)/
> > +endif
> 
> OUTPUT ?= .. didn't work?

Yes it should, I'll change it. The difference is when make is invoked with
OUTPUT explicitly set to "", then ?= wouldn't override it. But I didn't
see any external Makefile passing OUTPUT= to this one, and the user-facing
option is O=

> 
> > +
> >  CLANG ?= clang
> >  LLC ?= llc
> >  LLVM_STRIP ?= llvm-strip
> > -DEFAULT_BPFTOOL := $(OUTPUT)/sbin/bpftool
> > +BPFTOOL_OUTPUT := $(OUTPUT)bpftool/
> > +DEFAULT_BPFTOOL := $(BPFTOOL_OUTPUT)bpftool
> >  BPFTOOL ?= $(DEFAULT_BPFTOOL)
> >  LIBBPF_SRC := $(abspath ../../lib/bpf)
> > -BPFOBJ := $(OUTPUT)/libbpf.a
> > -BPF_INCLUDE := $(OUTPUT)
> > +BPFOBJ_OUTPUT := $(OUTPUT)libbpf/
> > +BPFOBJ := $(BPFOBJ_OUTPUT)libbpf.a
> > +BPF_INCLUDE := $(BPFOBJ_OUTPUT)
> >  INCLUDES := -I$(OUTPUT) -I$(BPF_INCLUDE) -I$(abspath ../../lib)        \
> >         -I$(abspath ../../include/uapi)
> >  CFLAGS := -g -Wall
> > @@ -20,7 +25,6 @@ VMLINUX_BTF_PATHS := /sys/kernel/btf/vmlinux /boot/vmlinux-$(KERNEL_REL)
> >  VMLINUX_BTF_PATH := $(or $(VMLINUX_BTF),$(firstword                           \
> >                                           $(wildcard $(VMLINUX_BTF_PATHS))))
> >
> > -abs_out := $(abspath $(OUTPUT))
> >  ifeq ($(V),1)
> >  Q =
> >  else
> > @@ -36,9 +40,13 @@ all: runqslower
> >
> >  runqslower: $(OUTPUT)/runqslower
> >
> > -clean:
> > +clean: $(DEFAULT_BPFTOOL)-clean $(BPFOBJ)-clean
> 
> why separate targets for $(DEFAULT_BPFTOOL)-clean and $(BPFOBJ)-clean?
> Are they intended to be called separately? I don't think
> parallelization is that important for the clean up. Let's just keep
> all the cleaning in one place, not spreading it across Makefile?

Ok

Thanks,
Jean
diff mbox series

Patch

diff --git a/tools/bpf/runqslower/Makefile b/tools/bpf/runqslower/Makefile
index bcc4a7396713..861f4dcde960 100644
--- a/tools/bpf/runqslower/Makefile
+++ b/tools/bpf/runqslower/Makefile
@@ -1,15 +1,20 @@ 
 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
 include ../../scripts/Makefile.include
 
-OUTPUT := .output
+ifeq ($(OUTPUT),)
+  OUTPUT = $(abspath .output)/
+endif
+
 CLANG ?= clang
 LLC ?= llc
 LLVM_STRIP ?= llvm-strip
-DEFAULT_BPFTOOL := $(OUTPUT)/sbin/bpftool
+BPFTOOL_OUTPUT := $(OUTPUT)bpftool/
+DEFAULT_BPFTOOL := $(BPFTOOL_OUTPUT)bpftool
 BPFTOOL ?= $(DEFAULT_BPFTOOL)
 LIBBPF_SRC := $(abspath ../../lib/bpf)
-BPFOBJ := $(OUTPUT)/libbpf.a
-BPF_INCLUDE := $(OUTPUT)
+BPFOBJ_OUTPUT := $(OUTPUT)libbpf/
+BPFOBJ := $(BPFOBJ_OUTPUT)libbpf.a
+BPF_INCLUDE := $(BPFOBJ_OUTPUT)
 INCLUDES := -I$(OUTPUT) -I$(BPF_INCLUDE) -I$(abspath ../../lib)        \
        -I$(abspath ../../include/uapi)
 CFLAGS := -g -Wall
@@ -20,7 +25,6 @@  VMLINUX_BTF_PATHS := /sys/kernel/btf/vmlinux /boot/vmlinux-$(KERNEL_REL)
 VMLINUX_BTF_PATH := $(or $(VMLINUX_BTF),$(firstword			       \
 					  $(wildcard $(VMLINUX_BTF_PATHS))))
 
-abs_out := $(abspath $(OUTPUT))
 ifeq ($(V),1)
 Q =
 else
@@ -36,9 +40,13 @@  all: runqslower
 
 runqslower: $(OUTPUT)/runqslower
 
-clean:
+clean: $(DEFAULT_BPFTOOL)-clean $(BPFOBJ)-clean
 	$(call QUIET_CLEAN, runqslower)
-	$(Q)rm -rf $(OUTPUT) runqslower
+	$(Q)$(RM) -r $(BPFOBJ_OUTPUT) $(BPFTOOL_OUTPUT)
+	$(Q)$(RM) $(OUTPUT)*.o $(OUTPUT)*.d
+	$(Q)$(RM) $(OUTPUT)*.skel.h $(OUTPUT)vmlinux.h
+	$(Q)$(RM) $(OUTPUT)runqslower
+	$(Q)$(RM) -r .output
 
 $(OUTPUT)/runqslower: $(OUTPUT)/runqslower.o $(BPFOBJ)
 	$(QUIET_LINK)$(CC) $(CFLAGS) $^ -lelf -lz -o $@
@@ -59,8 +67,8 @@  $(OUTPUT)/%.bpf.o: %.bpf.c $(BPFOBJ) | $(OUTPUT)
 $(OUTPUT)/%.o: %.c | $(OUTPUT)
 	$(QUIET_CC)$(CC) $(CFLAGS) $(INCLUDES) -c $(filter %.c,$^) -o $@
 
-$(OUTPUT):
-	$(QUIET_MKDIR)mkdir -p $(OUTPUT)
+$(OUTPUT) $(BPFOBJ_OUTPUT) $(BPFTOOL_OUTPUT):
+	$(QUIET_MKDIR)mkdir -p $@
 
 $(OUTPUT)/vmlinux.h: $(VMLINUX_BTF_PATH) | $(OUTPUT) $(BPFTOOL)
 	$(Q)if [ ! -e "$(VMLINUX_BTF_PATH)" ] ; then \
@@ -70,10 +78,17 @@  $(OUTPUT)/vmlinux.h: $(VMLINUX_BTF_PATH) | $(OUTPUT) $(BPFTOOL)
 	fi
 	$(QUIET_GEN)$(BPFTOOL) btf dump file $(VMLINUX_BTF_PATH) format c > $@
 
-$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(OUTPUT)
-	$(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC)			       \
-		    OUTPUT=$(abspath $(dir $@))/ $(abspath $@)
+$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(BPFOBJ_OUTPUT)
+	$(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(BPFOBJ_OUTPUT) $@
+
+$(BPFOBJ)-clean: $(BPFOBJ_OUTPUT)
+	$(Q)$(MAKE) -C $(LIBBPF_SRC) OUTPUT=$(BPFOBJ_OUTPUT) clean
 
-$(DEFAULT_BPFTOOL):
-	$(Q)$(MAKE) $(submake_extras) -C ../bpftool			      \
-		    prefix= OUTPUT=$(abs_out)/ DESTDIR=$(abs_out) install
+$(DEFAULT_BPFTOOL): | $(BPFTOOL_OUTPUT)
+	$(Q)$(MAKE) $(submake_extras) -C ../bpftool OUTPUT=$(BPFTOOL_OUTPUT)
+
+$(DEFAULT_BPFTOOL)-clean: $(BPFTOOL_OUTPUT)
+ifeq ($(DEFAULT_BPFTOOL),$(BPFTOOL))
+	$(call QUIET_CLEAN,bpftool)
+	$(Q)$(MAKE) -C ../bpftool OUTPUT=$(BPFTOOL_OUTPUT) clean
+endif