All of lore.kernel.org
 help / color / mirror / Atom feed
* [net-next PATCH V2 0/5] samples/bpf: Improve user experience
@ 2016-04-26 16:27 ` Jesper Dangaard Brouer
  0 siblings, 0 replies; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 16:27 UTC (permalink / raw)
  To: netdev
  Cc: linux-kbuild, bblanco, Jesper Dangaard Brouer, naveen.n.rao,
	borkmann, alexei.starovoitov

It is a steep learning curve getting started with using the eBPF
examples in samples/bpf/.  There are several dependencies, and
specific versions of these dependencies.  Invoking make in the correct
manor is also slightly obscure.

This patchset cleanup, document and hopefully improves the first time
user experience with the eBPF samples directory by auto-detecting
certain scenarios.

V2:
 - Adjusted recommend minimum versions to 3.7.1
 - Included clang build instructions
 - New patch adding CLANG variable and validation of command

---

Jesper Dangaard Brouer (5):
      samples/bpf: add back functionality to redefine LLC command
      samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported
      samples/bpf: add a README file to get users started
      samples/bpf: allow make to be run from samples/bpf/ directory
      samples/bpf: like LLC also verify and allow redefining CLANG command


 samples/bpf/Makefile   |   37 +++++++++++++++++++++-
 samples/bpf/README.rst |   80 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 115 insertions(+), 2 deletions(-)
 create mode 100644 samples/bpf/README.rst

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [net-next PATCH V2 0/5] samples/bpf: Improve user experience
@ 2016-04-26 16:27 ` Jesper Dangaard Brouer
  0 siblings, 0 replies; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 16:27 UTC (permalink / raw)
  To: netdev
  Cc: linux-kbuild, bblanco, Jesper Dangaard Brouer, naveen.n.rao,
	borkmann, alexei.starovoitov

It is a steep learning curve getting started with using the eBPF
examples in samples/bpf/.  There are several dependencies, and
specific versions of these dependencies.  Invoking make in the correct
manor is also slightly obscure.

This patchset cleanup, document and hopefully improves the first time
user experience with the eBPF samples directory by auto-detecting
certain scenarios.

V2:
 - Adjusted recommend minimum versions to 3.7.1
 - Included clang build instructions
 - New patch adding CLANG variable and validation of command

---

Jesper Dangaard Brouer (5):
      samples/bpf: add back functionality to redefine LLC command
      samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported
      samples/bpf: add a README file to get users started
      samples/bpf: allow make to be run from samples/bpf/ directory
      samples/bpf: like LLC also verify and allow redefining CLANG command


 samples/bpf/Makefile   |   37 +++++++++++++++++++++-
 samples/bpf/README.rst |   80 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 115 insertions(+), 2 deletions(-)
 create mode 100644 samples/bpf/README.rst

--

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [net-next PATCH V2 1/5] samples/bpf: add back functionality to redefine LLC command
  2016-04-26 16:27 ` Jesper Dangaard Brouer
  (?)
@ 2016-04-26 16:27 ` Jesper Dangaard Brouer
  2016-04-26 17:28   ` Alexei Starovoitov
  -1 siblings, 1 reply; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 16:27 UTC (permalink / raw)
  To: netdev
  Cc: linux-kbuild, bblanco, Jesper Dangaard Brouer, naveen.n.rao,
	borkmann, alexei.starovoitov

It is practical to be-able-to redefine the location of the LLVM
command 'llc', because not all distros have a LLVM version with bpf
target support.  Thus, it is sometimes required to compile LLVM from
source, and sometimes it is not desired to overwrite the distros
default LLVM version.

This feature was removed with 128d1514be35 ("samples/bpf: Use llc in
PATH, rather than a hardcoded value").

Add this features back. Note that it is possible to redefine the LLC
on the make command like:

 make samples/bpf/ LLC=~/git/llvm/build/bin/llc

Fixes: 128d1514be35 ("samples/bpf: Use llc in PATH, rather than a hardcoded value")
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/bpf/Makefile |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index 744dd7a16144..5bae9536f100 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -81,10 +81,14 @@ HOSTLOADLIBES_spintest += -lelf
 HOSTLOADLIBES_map_perf_test += -lelf -lrt
 HOSTLOADLIBES_test_overhead += -lelf -lrt
 
+# Allows pointing LLC to a LLVM backend with bpf support, redefine on cmdline:
+#  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
+LLC ?= llc
+
 # asm/sysreg.h - inline assembly used by it is incompatible with llvm.
 # But, there is no easy way to fix it, so just exclude it since it is
 # useless for BPF samples.
 $(obj)/%.o: $(src)/%.c
 	clang $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) \
 		-D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \
-		-O2 -emit-llvm -c $< -o -| llc -march=bpf -filetype=obj -o $@
+		-O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf -filetype=obj -o $@

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next PATCH V2 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported
  2016-04-26 16:27 ` Jesper Dangaard Brouer
  (?)
  (?)
@ 2016-04-26 16:27 ` Jesper Dangaard Brouer
  2016-04-26 17:28   ` Alexei Starovoitov
  2016-04-27 13:52   ` David Laight
  -1 siblings, 2 replies; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 16:27 UTC (permalink / raw)
  To: netdev
  Cc: linux-kbuild, bblanco, Jesper Dangaard Brouer, naveen.n.rao,
	borkmann, alexei.starovoitov

Make compiling samples/bpf more user friendly, by detecting if LLVM
compiler tool 'llc' is available, and also detect if the 'bpf' target
is available in this version of LLVM.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/bpf/Makefile |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index 5bae9536f100..45859c99f573 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -85,6 +85,24 @@ HOSTLOADLIBES_test_overhead += -lelf -lrt
 #  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
 LLC ?= llc
 
+# Verify LLVM compiler is available and bpf target is supported
+.PHONY: verify_cmd_llc verify_target_bpf
+
+verify_cmd_llc:
+	@if ! (which "${LLC}" > /dev/null 2>&1); then \
+		echo "*** ERROR: Cannot find LLVM tool 'llc' (${LLC})" ;\
+		exit 1; \
+	else true; fi
+
+verify_target_bpf: verify_cmd_llc
+	@if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \
+		echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\
+		echo "   NOTICE: LLVM version >= 3.7.1 required" ;\
+		exit 2; \
+	else true; fi
+
+$(src)/*.c: verify_target_bpf
+
 # asm/sysreg.h - inline assembly used by it is incompatible with llvm.
 # But, there is no easy way to fix it, so just exclude it since it is
 # useless for BPF samples.

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next PATCH V2 3/5] samples/bpf: add a README file to get users started
  2016-04-26 16:27 ` Jesper Dangaard Brouer
                   ` (2 preceding siblings ...)
  (?)
@ 2016-04-26 16:27 ` Jesper Dangaard Brouer
  2016-04-26 17:31   ` Alexei Starovoitov
  -1 siblings, 1 reply; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 16:27 UTC (permalink / raw)
  To: netdev
  Cc: linux-kbuild, bblanco, Jesper Dangaard Brouer, naveen.n.rao,
	borkmann, alexei.starovoitov

Getting started with using examples in samples/bpf/ is not
straightforward.  There are several dependencies, and specific
versions of these dependencies.

Just compiling the example tool is also slightly obscure, e.g. one
need to call make like:

 make samples/bpf/

Do notice the "/" slash after the directory name.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/bpf/README.rst |   77 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 samples/bpf/README.rst

diff --git a/samples/bpf/README.rst b/samples/bpf/README.rst
new file mode 100644
index 000000000000..c7ccf553af0d
--- /dev/null
+++ b/samples/bpf/README.rst
@@ -0,0 +1,77 @@
+eBPF sample programs
+====================
+
+This kernel samples/bpf directory contains a mini eBPF library, test
+stubs, verifier test-suite and examples for using eBPF.
+
+Build dependencies
+==================
+
+Compiling requires having installed:
+ * clang
+ * llvm >= version 3.7.1
+
+Note that LLVM's tool 'llc' must support target 'bpf', list with command::
+
+ $ llc --version
+ LLVM (http://llvm.org/):
+  LLVM version 3.x.y
+  [...]
+  Host CPU: xxx
+
+  Registered Targets:
+    [...]
+    bpf        - BPF (host endian)
+    bpfeb      - BPF (big endian)
+    bpfel      - BPF (little endian)
+    [...]
+
+Kernel headers
+--------------
+
+There are usually dependencies to header files of the current kernel.
+To avoid installing devel kernel headers system wide, as a normal
+user, simply call::
+
+ make headers_install
+
+This will creates a local "usr/include" directory in the git/build top
+level directory, that the make system automatically pickup first.
+
+Compiling
+=========
+
+For compiling goto kernel top level build directory and run make like::
+
+ make samples/bpf/
+
+Do notice the "/" slash after the directory name.
+
+Manually compiling LLVM with 'bpf' support
+------------------------------------------
+
+In some LLVM versions the BPF target were marked experimental. They
+needed the 'cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF'.  Since
+version 3.7.1, LLVM adds a proper LLVM backend target for the BPF
+bytecode architecture.
+
+By default llvm will build all non-experimental backends including bpf.
+To generate a smaller llc binary one can use::
+
+ -DLLVM_TARGETS_TO_BUILD="BPF;X86"
+
+Quick sniplet for manually compiling LLVM and clang
+(build dependencies are cmake and gcc-c++)::
+
+ $ git clone http://llvm.org/git/llvm.git
+ $ cd llvm/tools
+ $ git clone --depth 1 http://llvm.org/git/clang.git
+ $ cd ..; mkdir build; cd build
+ $ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86"
+ $ make -j $(getconf _NPROCESSORS_ONLN)
+
+It is also possible to point make to the newly compile 'llc' command
+via redefining LLC on the make command line::
+
+ make samples/bpf/ LLC=~/git/llvm/build/bin/llc
+


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next PATCH V2 4/5] samples/bpf: allow make to be run from samples/bpf/ directory
  2016-04-26 16:27 ` Jesper Dangaard Brouer
                   ` (3 preceding siblings ...)
  (?)
@ 2016-04-26 16:27 ` Jesper Dangaard Brouer
  2016-04-26 17:31   ` Alexei Starovoitov
  -1 siblings, 1 reply; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 16:27 UTC (permalink / raw)
  To: netdev
  Cc: linux-kbuild, bblanco, Jesper Dangaard Brouer, naveen.n.rao,
	borkmann, alexei.starovoitov

It is not intuitive that 'make' must be run from the top level
directory with argument "samples/bpf/" to compile these eBPF samples.

Introduce a kbuild make file trick that allow make to be run from the
"samples/bpf/" directory itself.  It basically change to the top level
directory and call "make samples/bpf/" with the "/" slash after the
directory name.

Also add a clean target that only cleans this directory, by taking
advantage of the kbuild external module setting M=$PWD.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/bpf/Makefile   |    8 ++++++++
 samples/bpf/README.rst |    3 +++
 2 files changed, 11 insertions(+)

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index 45859c99f573..dd63521832d8 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -85,6 +85,14 @@ HOSTLOADLIBES_test_overhead += -lelf -lrt
 #  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
 LLC ?= llc
 
+# Trick to allow make to be run from this directory
+all:
+	$(MAKE) -C ../../ $$PWD/
+
+clean:
+	$(MAKE) -C ../../ M=$$PWD clean
+	@rm -f *~
+
 # Verify LLVM compiler is available and bpf target is supported
 .PHONY: verify_cmd_llc verify_target_bpf
 
diff --git a/samples/bpf/README.rst b/samples/bpf/README.rst
index c7ccf553af0d..1ec4b08a7b40 100644
--- a/samples/bpf/README.rst
+++ b/samples/bpf/README.rst
@@ -47,6 +47,9 @@ For compiling goto kernel top level build directory and run make like::
 
 Do notice the "/" slash after the directory name.
 
+It is also possible to call make from this directory.  This will just
+hide the the invocation of make as above with the appended "/".
+
 Manually compiling LLVM with 'bpf' support
 ------------------------------------------
 


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [net-next PATCH V2 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command
  2016-04-26 16:27 ` Jesper Dangaard Brouer
                   ` (4 preceding siblings ...)
  (?)
@ 2016-04-26 16:27 ` Jesper Dangaard Brouer
  2016-04-26 17:36   ` Alexei Starovoitov
  -1 siblings, 1 reply; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 16:27 UTC (permalink / raw)
  To: netdev
  Cc: linux-kbuild, bblanco, Jesper Dangaard Brouer, naveen.n.rao,
	borkmann, alexei.starovoitov

Users are likely to manually compile both LLVM 'llc' and 'clang'
tools.  Thus, also allow redefining CLANG and verify command exist.

Makefile implementation wise, the target that verify the command have
been generalized.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
 samples/bpf/Makefile   |   23 +++++++++++++----------
 samples/bpf/README.rst |    6 +++---
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index dd63521832d8..c02ea9d2a248 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -81,9 +81,10 @@ HOSTLOADLIBES_spintest += -lelf
 HOSTLOADLIBES_map_perf_test += -lelf -lrt
 HOSTLOADLIBES_test_overhead += -lelf -lrt
 
-# Allows pointing LLC to a LLVM backend with bpf support, redefine on cmdline:
-#  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
+# Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline:
+#  make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
 LLC ?= llc
+CLANG ?= clang
 
 # Trick to allow make to be run from this directory
 all:
@@ -94,15 +95,17 @@ clean:
 	@rm -f *~
 
 # Verify LLVM compiler is available and bpf target is supported
-.PHONY: verify_cmd_llc verify_target_bpf
+.PHONY: verify_cmd_llc verify_target_bpf $(CLANG) $(LLC)
 
-verify_cmd_llc:
-	@if ! (which "${LLC}" > /dev/null 2>&1); then \
-		echo "*** ERROR: Cannot find LLVM tool 'llc' (${LLC})" ;\
-		exit 1; \
-	else true; fi
+verify_cmds: $(CLANG) $(LLC)
+	@for TOOL in $^ ; do \
+		if ! (which "$${TOOL}" > /dev/null 2>&1); then \
+			echo "*** ERROR: Cannot find LLVM tool $${TOOL}" ;\
+			exit 1; \
+		else true; fi; \
+	done
 
-verify_target_bpf: verify_cmd_llc
+verify_target_bpf: verify_cmds
 	@if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \
 		echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\
 		echo "   NOTICE: LLVM version >= 3.7.1 required" ;\
@@ -115,6 +118,6 @@ $(src)/*.c: verify_target_bpf
 # But, there is no easy way to fix it, so just exclude it since it is
 # useless for BPF samples.
 $(obj)/%.o: $(src)/%.c
-	clang $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) \
+	$(CLANG) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) \
 		-D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \
 		-O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf -filetype=obj -o $@
diff --git a/samples/bpf/README.rst b/samples/bpf/README.rst
index 1ec4b08a7b40..74897dbe6458 100644
--- a/samples/bpf/README.rst
+++ b/samples/bpf/README.rst
@@ -73,8 +73,8 @@ Quick sniplet for manually compiling LLVM and clang
  $ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86"
  $ make -j $(getconf _NPROCESSORS_ONLN)
 
-It is also possible to point make to the newly compile 'llc' command
-via redefining LLC on the make command line::
+It is also possible to point make to the newly compile 'llc' or
+'clang' command via redefining LLC or CLANG on the make command line::
 
- make samples/bpf/ LLC=~/git/llvm/build/bin/llc
+ make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
 

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [net-next PATCH V2 1/5] samples/bpf: add back functionality to redefine LLC command
  2016-04-26 16:27 ` [net-next PATCH V2 1/5] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
@ 2016-04-26 17:28   ` Alexei Starovoitov
  0 siblings, 0 replies; 15+ messages in thread
From: Alexei Starovoitov @ 2016-04-26 17:28 UTC (permalink / raw)
  To: Jesper Dangaard Brouer
  Cc: netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann

On Tue, Apr 26, 2016 at 06:27:11PM +0200, Jesper Dangaard Brouer wrote:
> It is practical to be-able-to redefine the location of the LLVM
> command 'llc', because not all distros have a LLVM version with bpf
> target support.  Thus, it is sometimes required to compile LLVM from
> source, and sometimes it is not desired to overwrite the distros
> default LLVM version.
> 
> This feature was removed with 128d1514be35 ("samples/bpf: Use llc in
> PATH, rather than a hardcoded value").
> 
> Add this features back. Note that it is possible to redefine the LLC
> on the make command like:
> 
>  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
> 
> Fixes: 128d1514be35 ("samples/bpf: Use llc in PATH, rather than a hardcoded value")
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>

Acked-by: Alexei Starovoitov <ast@kernel.org>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next PATCH V2 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported
  2016-04-26 16:27 ` [net-next PATCH V2 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
@ 2016-04-26 17:28   ` Alexei Starovoitov
  2016-04-27 13:52   ` David Laight
  1 sibling, 0 replies; 15+ messages in thread
From: Alexei Starovoitov @ 2016-04-26 17:28 UTC (permalink / raw)
  To: Jesper Dangaard Brouer
  Cc: netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann

On Tue, Apr 26, 2016 at 06:27:16PM +0200, Jesper Dangaard Brouer wrote:
> Make compiling samples/bpf more user friendly, by detecting if LLVM
> compiler tool 'llc' is available, and also detect if the 'bpf' target
> is available in this version of LLVM.
> 
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>

Acked-by: Alexei Starovoitov <ast@kernel.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next PATCH V2 3/5] samples/bpf: add a README file to get users started
  2016-04-26 16:27 ` [net-next PATCH V2 3/5] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
@ 2016-04-26 17:31   ` Alexei Starovoitov
  2016-04-27  6:30     ` Jesper Dangaard Brouer
  0 siblings, 1 reply; 15+ messages in thread
From: Alexei Starovoitov @ 2016-04-26 17:31 UTC (permalink / raw)
  To: Jesper Dangaard Brouer
  Cc: netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann

On Tue, Apr 26, 2016 at 06:27:22PM +0200, Jesper Dangaard Brouer wrote:
> +
> +Manually compiling LLVM with 'bpf' support
> +------------------------------------------
> +
> +In some LLVM versions the BPF target were marked experimental. They
> +needed the 'cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF'.  Since
> +version 3.7.1, LLVM adds a proper LLVM backend target for the BPF
> +bytecode architecture.

it's actually non-experimental since 3.7.0.
It was experimental after 3.6 was released during development of 3.7.
I doubt you can find this anywhere, so I suggest to just drop this paragraph.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next PATCH V2 4/5] samples/bpf: allow make to be run from samples/bpf/ directory
  2016-04-26 16:27 ` [net-next PATCH V2 4/5] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
@ 2016-04-26 17:31   ` Alexei Starovoitov
  0 siblings, 0 replies; 15+ messages in thread
From: Alexei Starovoitov @ 2016-04-26 17:31 UTC (permalink / raw)
  To: Jesper Dangaard Brouer
  Cc: netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann

On Tue, Apr 26, 2016 at 06:27:27PM +0200, Jesper Dangaard Brouer wrote:
> It is not intuitive that 'make' must be run from the top level
> directory with argument "samples/bpf/" to compile these eBPF samples.
> 
> Introduce a kbuild make file trick that allow make to be run from the
> "samples/bpf/" directory itself.  It basically change to the top level
> directory and call "make samples/bpf/" with the "/" slash after the
> directory name.
> 
> Also add a clean target that only cleans this directory, by taking
> advantage of the kbuild external module setting M=$PWD.
> 
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>

Acked-by: Alexei Starovoitov <ast@kernel.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next PATCH V2 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command
  2016-04-26 16:27 ` [net-next PATCH V2 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command Jesper Dangaard Brouer
@ 2016-04-26 17:36   ` Alexei Starovoitov
  2016-04-27  6:45     ` Jesper Dangaard Brouer
  0 siblings, 1 reply; 15+ messages in thread
From: Alexei Starovoitov @ 2016-04-26 17:36 UTC (permalink / raw)
  To: Jesper Dangaard Brouer
  Cc: netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann

On Tue, Apr 26, 2016 at 06:27:32PM +0200, Jesper Dangaard Brouer wrote:
> Users are likely to manually compile both LLVM 'llc' and 'clang'
> tools.  Thus, also allow redefining CLANG and verify command exist.
> 
> Makefile implementation wise, the target that verify the command have
> been generalized.
> 
> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> ---
>  samples/bpf/Makefile   |   23 +++++++++++++----------
>  samples/bpf/README.rst |    6 +++---
>  2 files changed, 16 insertions(+), 13 deletions(-)
> 
> diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
> index dd63521832d8..c02ea9d2a248 100644
> --- a/samples/bpf/Makefile
> +++ b/samples/bpf/Makefile
> @@ -81,9 +81,10 @@ HOSTLOADLIBES_spintest += -lelf
>  HOSTLOADLIBES_map_perf_test += -lelf -lrt
>  HOSTLOADLIBES_test_overhead += -lelf -lrt
>  
> -# Allows pointing LLC to a LLVM backend with bpf support, redefine on cmdline:
> -#  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
> +# Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline:
> +#  make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
>  LLC ?= llc
> +CLANG ?= clang
>  
>  # Trick to allow make to be run from this directory
>  all:
> @@ -94,15 +95,17 @@ clean:
>  	@rm -f *~
>  
>  # Verify LLVM compiler is available and bpf target is supported
> -.PHONY: verify_cmd_llc verify_target_bpf
> +.PHONY: verify_cmd_llc verify_target_bpf $(CLANG) $(LLC)
>  
> -verify_cmd_llc:
> -	@if ! (which "${LLC}" > /dev/null 2>&1); then \
> -		echo "*** ERROR: Cannot find LLVM tool 'llc' (${LLC})" ;\
> -		exit 1; \
> -	else true; fi
> +verify_cmds: $(CLANG) $(LLC)
> +	@for TOOL in $^ ; do \
> +		if ! (which "$${TOOL}" > /dev/null 2>&1); then \
> +			echo "*** ERROR: Cannot find LLVM tool $${TOOL}" ;\
> +			exit 1; \
> +		else true; fi; \
> +	done
>  
> -verify_target_bpf: verify_cmd_llc
> +verify_target_bpf: verify_cmds
>  	@if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \
>  		echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\
>  		echo "   NOTICE: LLVM version >= 3.7.1 required" ;\

If I read the patch correctly, it only checks that any version
of clang is available and llc supports -march=bpf.
That's correct.
There is no need to build the latest clang most of the time.
clang 3.4 and 3.5 are fine to compile samples/bpf/
since llvm ir is mostly compatible with llc from 3.7 or 3.8

Acked-by: Alexei Starovoitov <ast@kernel.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next PATCH V2 3/5] samples/bpf: add a README file to get users started
  2016-04-26 17:31   ` Alexei Starovoitov
@ 2016-04-27  6:30     ` Jesper Dangaard Brouer
  0 siblings, 0 replies; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-27  6:30 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: brouer, netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann

On Tue, 26 Apr 2016 10:31:06 -0700
Alexei Starovoitov <alexei.starovoitov@gmail.com> wrote:

> On Tue, Apr 26, 2016 at 06:27:22PM +0200, Jesper Dangaard Brouer wrote:
> > +
> > +Manually compiling LLVM with 'bpf' support
> > +------------------------------------------
> > +
> > +In some LLVM versions the BPF target were marked experimental. They
> > +needed the 'cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF'.  Since
> > +version 3.7.1, LLVM adds a proper LLVM backend target for the BPF
> > +bytecode architecture.  
> 
> it's actually non-experimental since 3.7.0.
> It was experimental after 3.6 was released during development of 3.7.
> I doubt you can find this anywhere, so I suggest to just drop this paragraph.

Okay lets drop this paragraph, given the LLVM period was so short, it
does not make sense to mention here.

I will send a V3 patch series, as DaveM usually likes a full resubmit
(I'll add your acks to the other patches, but you need to ack this one).

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  Author of http://www.iptv-analyzer.org
  LinkedIn: http://www.linkedin.com/in/brouer

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [net-next PATCH V2 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command
  2016-04-26 17:36   ` Alexei Starovoitov
@ 2016-04-27  6:45     ` Jesper Dangaard Brouer
  0 siblings, 0 replies; 15+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-27  6:45 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: brouer, netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann

On Tue, 26 Apr 2016 10:36:10 -0700
Alexei Starovoitov <alexei.starovoitov@gmail.com> wrote:

> On Tue, Apr 26, 2016 at 06:27:32PM +0200, Jesper Dangaard Brouer wrote:
> > Users are likely to manually compile both LLVM 'llc' and 'clang'
> > tools.  Thus, also allow redefining CLANG and verify command exist.
> > 
> > Makefile implementation wise, the target that verify the command have
> > been generalized.
> > 
> > Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
> > ---
> >  samples/bpf/Makefile   |   23 +++++++++++++----------
> >  samples/bpf/README.rst |    6 +++---
> >  2 files changed, 16 insertions(+), 13 deletions(-)
> > 
> > diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
> > index dd63521832d8..c02ea9d2a248 100644
> > --- a/samples/bpf/Makefile
> > +++ b/samples/bpf/Makefile
> > @@ -81,9 +81,10 @@ HOSTLOADLIBES_spintest += -lelf
> >  HOSTLOADLIBES_map_perf_test += -lelf -lrt
> >  HOSTLOADLIBES_test_overhead += -lelf -lrt
> >  
> > -# Allows pointing LLC to a LLVM backend with bpf support, redefine on cmdline:
> > -#  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
> > +# Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline:
> > +#  make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
> >  LLC ?= llc
> > +CLANG ?= clang
> >  
> >  # Trick to allow make to be run from this directory
> >  all:
> > @@ -94,15 +95,17 @@ clean:
> >  	@rm -f *~
> >  
> >  # Verify LLVM compiler is available and bpf target is supported
> > -.PHONY: verify_cmd_llc verify_target_bpf
> > +.PHONY: verify_cmd_llc verify_target_bpf $(CLANG) $(LLC)
> >  
> > -verify_cmd_llc:
> > -	@if ! (which "${LLC}" > /dev/null 2>&1); then \
> > -		echo "*** ERROR: Cannot find LLVM tool 'llc' (${LLC})" ;\
> > -		exit 1; \
> > -	else true; fi
> > +verify_cmds: $(CLANG) $(LLC)
> > +	@for TOOL in $^ ; do \
> > +		if ! (which "$${TOOL}" > /dev/null 2>&1); then \
> > +			echo "*** ERROR: Cannot find LLVM tool $${TOOL}" ;\
> > +			exit 1; \
> > +		else true; fi; \
> > +	done
> >  
> > -verify_target_bpf: verify_cmd_llc
> > +verify_target_bpf: verify_cmds
> >  	@if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \
> >  		echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\
> >  		echo "   NOTICE: LLVM version >= 3.7.1 required" ;\  
> 
> If I read the patch correctly, it only checks that any version
> of clang is available and llc supports -march=bpf.
> That's correct.

Yes, you read the patch correctly :-)

> There is no need to build the latest clang most of the time.
> clang 3.4 and 3.5 are fine to compile samples/bpf/
> since llvm ir is mostly compatible with llc from 3.7 or 3.8

Good to get confirmation. I was testing with clang 3.5.0, and llc 3.9-git.

> Acked-by: Alexei Starovoitov <ast@kernel.org>

-- 
Best regards,
  Jesper Dangaard Brouer
  MSc.CS, Principal Kernel Engineer at Red Hat
  Author of http://www.iptv-analyzer.org
  LinkedIn: http://www.linkedin.com/in/brouer

^ permalink raw reply	[flat|nested] 15+ messages in thread

* RE: [net-next PATCH V2 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported
  2016-04-26 16:27 ` [net-next PATCH V2 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
  2016-04-26 17:28   ` Alexei Starovoitov
@ 2016-04-27 13:52   ` David Laight
  1 sibling, 0 replies; 15+ messages in thread
From: David Laight @ 2016-04-27 13:52 UTC (permalink / raw)
  To: 'Jesper Dangaard Brouer', netdev
  Cc: linux-kbuild, bblanco, naveen.n.rao, borkmann, alexei.starovoitov

From: Jesper Dangaard Brouer
> Sent: 26 April 2016 17:27
> Make compiling samples/bpf more user friendly, by detecting if LLVM
> compiler tool 'llc' is available, and also detect if the 'bpf' target
> is available in this version of LLVM.
...
> diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
> index 5bae9536f100..45859c99f573 100644
> --- a/samples/bpf/Makefile
> +++ b/samples/bpf/Makefile
> @@ -85,6 +85,24 @@ HOSTLOADLIBES_test_overhead += -lelf -lrt
>  #  make samples/bpf/ LLC=~/git/llvm/build/bin/llc
>  LLC ?= llc
> 
> +# Verify LLVM compiler is available and bpf target is supported
> +.PHONY: verify_cmd_llc verify_target_bpf
> +
> +verify_cmd_llc:
> +	@if ! (which "${LLC}" > /dev/null 2>&1); then \

You should use 'type' not 'which'.
'type' is a posix shell builtin, 'which' is a script/program
that tries to emulate a 'csh' builtin.
You want to know whether the shell that make runs can execute ${LLC}
not whether a csh would be able to run it.

You might also want to worry about:
    LLC="/path_to_llc/llc -extra_arg" make fubar

	David


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2016-04-27 13:54 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-26 16:27 [net-next PATCH V2 0/5] samples/bpf: Improve user experience Jesper Dangaard Brouer
2016-04-26 16:27 ` Jesper Dangaard Brouer
2016-04-26 16:27 ` [net-next PATCH V2 1/5] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
2016-04-26 17:28   ` Alexei Starovoitov
2016-04-26 16:27 ` [net-next PATCH V2 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
2016-04-26 17:28   ` Alexei Starovoitov
2016-04-27 13:52   ` David Laight
2016-04-26 16:27 ` [net-next PATCH V2 3/5] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
2016-04-26 17:31   ` Alexei Starovoitov
2016-04-27  6:30     ` Jesper Dangaard Brouer
2016-04-26 16:27 ` [net-next PATCH V2 4/5] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
2016-04-26 17:31   ` Alexei Starovoitov
2016-04-26 16:27 ` [net-next PATCH V2 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command Jesper Dangaard Brouer
2016-04-26 17:36   ` Alexei Starovoitov
2016-04-27  6:45     ` Jesper Dangaard Brouer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.