netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net-next PATCH 0/4] samples/bpf: Improve user experience
@ 2016-04-26 11:09 Jesper Dangaard Brouer
  2016-04-26 11:09 ` [net-next PATCH 1/4] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 11:09 UTC (permalink / raw)
  To: netdev
  Cc: bblanco, borkmann, alexei.starovoitov, linux-kbuild,
	Jesper Dangaard Brouer

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.

---

Jesper Dangaard Brouer (4):
      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/Makefile   |   32 +++++++++++++++++++++-
 samples/bpf/README.rst |   70 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 101 insertions(+), 1 deletion(-)
 create mode 100644 samples/bpf/README.rst

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

* [net-next PATCH 1/4] samples/bpf: add back functionality to redefine LLC command
  2016-04-26 11:09 [net-next PATCH 0/4] samples/bpf: Improve user experience Jesper Dangaard Brouer
@ 2016-04-26 11:09 ` Jesper Dangaard Brouer
  2016-04-26 11:36   ` Daniel Borkmann
  2016-04-26 11:09 ` [net-next PATCH 2/4] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 11:09 UTC (permalink / raw)
  To: netdev
  Cc: bblanco, borkmann, alexei.starovoitov, linux-kbuild,
	Jesper Dangaard Brouer

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] 12+ messages in thread

* [net-next PATCH 2/4] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported
  2016-04-26 11:09 [net-next PATCH 0/4] samples/bpf: Improve user experience Jesper Dangaard Brouer
  2016-04-26 11:09 ` [net-next PATCH 1/4] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
@ 2016-04-26 11:09 ` Jesper Dangaard Brouer
  2016-04-26 11:09 ` [net-next PATCH 3/4] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
  2016-04-26 11:09 ` [net-next PATCH 4/4] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
  3 siblings, 0 replies; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 11:09 UTC (permalink / raw)
  To: netdev
  Cc: bblanco, borkmann, alexei.starovoitov, linux-kbuild,
	Jesper Dangaard Brouer

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..7ac66f5bbbf5 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.0 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] 12+ messages in thread

* [net-next PATCH 3/4] samples/bpf: add a README file to get users started
  2016-04-26 11:09 [net-next PATCH 0/4] samples/bpf: Improve user experience Jesper Dangaard Brouer
  2016-04-26 11:09 ` [net-next PATCH 1/4] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
  2016-04-26 11:09 ` [net-next PATCH 2/4] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
@ 2016-04-26 11:09 ` Jesper Dangaard Brouer
  2016-04-26 11:44   ` Daniel Borkmann
  2016-04-26 11:09 ` [net-next PATCH 4/4] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
  3 siblings, 1 reply; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 11:09 UTC (permalink / raw)
  To: netdev
  Cc: bblanco, borkmann, alexei.starovoitov, linux-kbuild,
	Jesper Dangaard Brouer

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 |   67 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 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..3e1ac05d8e7c
--- /dev/null
+++ b/samples/bpf/README.rst
@@ -0,0 +1,67 @@
+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.0
+
+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.  To
+compile LLVM manually and enable BPF target run (build dependencies
+are cmake and gcc-c++)::
+
+ $ git clone http://llvm.org/git/llvm.git
+ $ cd llvm
+ $ mkdir build; cd build
+ $ cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF
+ $ make
+
+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] 12+ messages in thread

* [net-next PATCH 4/4] samples/bpf: allow make to be run from samples/bpf/ directory
  2016-04-26 11:09 [net-next PATCH 0/4] samples/bpf: Improve user experience Jesper Dangaard Brouer
                   ` (2 preceding siblings ...)
  2016-04-26 11:09 ` [net-next PATCH 3/4] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
@ 2016-04-26 11:09 ` Jesper Dangaard Brouer
  2016-04-26 14:35   ` Alexei Starovoitov
  3 siblings, 1 reply; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 11:09 UTC (permalink / raw)
  To: netdev
  Cc: bblanco, borkmann, alexei.starovoitov, linux-kbuild,
	Jesper Dangaard Brouer

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 7ac66f5bbbf5..7370dfee482f 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 3e1ac05d8e7c..3a9e6c4099aa 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] 12+ messages in thread

* Re: [net-next PATCH 1/4] samples/bpf: add back functionality to redefine LLC command
  2016-04-26 11:09 ` [net-next PATCH 1/4] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
@ 2016-04-26 11:36   ` Daniel Borkmann
  0 siblings, 0 replies; 12+ messages in thread
From: Daniel Borkmann @ 2016-04-26 11:36 UTC (permalink / raw)
  To: Jesper Dangaard Brouer, netdev
  Cc: bblanco, borkmann, alexei.starovoitov, linux-kbuild

On 04/26/2016 01:09 PM, 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>
> ---
>   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 $@

Why not doing the same for clang? True that we're not using 'clang -target bpf'
here, but when someone builds llvm from git, it's very likely that clang is cloned
and built along with it.

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

* Re: [net-next PATCH 3/4] samples/bpf: add a README file to get users started
  2016-04-26 11:09 ` [net-next PATCH 3/4] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
@ 2016-04-26 11:44   ` Daniel Borkmann
  2016-04-26 11:56     ` Jesper Dangaard Brouer
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Borkmann @ 2016-04-26 11:44 UTC (permalink / raw)
  To: Jesper Dangaard Brouer, netdev
  Cc: bblanco, borkmann, alexei.starovoitov, linux-kbuild

On 04/26/2016 01:09 PM, Jesper Dangaard Brouer wrote:
> 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 |   67 ++++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 67 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..3e1ac05d8e7c
> --- /dev/null
> +++ b/samples/bpf/README.rst
> @@ -0,0 +1,67 @@
> +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.0
> +
> +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.  To
> +compile LLVM manually and enable BPF target run (build dependencies
> +are cmake and gcc-c++)::
> +
> + $ git clone http://llvm.org/git/llvm.git
> + $ cd llvm
> + $ mkdir build; cd build
> + $ cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF
> + $ make

That's perhaps a bit misleading in the sense that when you clone the
tree from git, you'd nowadays invoke cmake normally with LLVM_TARGETS_TO_BUILD
instead of LLVM_EXPERIMENTAL_TARGETS_TO_BUILD for BPF, as BPF is not an
experimental target anymore. It's probably also recommended to clone
clang into tools/ dir as well under your llvm/ repo when you compile
from scratch anyways.

> +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	[flat|nested] 12+ messages in thread

* Re: [net-next PATCH 3/4] samples/bpf: add a README file to get users started
  2016-04-26 11:44   ` Daniel Borkmann
@ 2016-04-26 11:56     ` Jesper Dangaard Brouer
  2016-04-26 12:40       ` Daniel Borkmann
  0 siblings, 1 reply; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-26 11:56 UTC (permalink / raw)
  To: Daniel Borkmann
  Cc: netdev, bblanco, borkmann, alexei.starovoitov, linux-kbuild,
	brouer

On Tue, 26 Apr 2016 13:44:06 +0200
Daniel Borkmann <daniel@iogearbox.net> wrote:

> On 04/26/2016 01:09 PM, Jesper Dangaard Brouer wrote:
> > 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 |   67 ++++++++++++++++++++++++++++++++++++++++++++++++
> >   1 file changed, 67 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..3e1ac05d8e7c
> > --- /dev/null
> > +++ b/samples/bpf/README.rst
> > @@ -0,0 +1,67 @@
> > +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.0
> > +
> > +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.  To
> > +compile LLVM manually and enable BPF target run (build dependencies
> > +are cmake and gcc-c++)::
> > +
> > + $ git clone http://llvm.org/git/llvm.git
> > + $ cd llvm
> > + $ mkdir build; cd build
> > + $ cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF
> > + $ make  
> 
> That's perhaps a bit misleading in the sense that when you clone the
> tree from git, you'd nowadays invoke cmake normally with LLVM_TARGETS_TO_BUILD
> instead of LLVM_EXPERIMENTAL_TARGETS_TO_BUILD for BPF, as BPF is not an
> experimental target anymore. It's probably also recommended to clone
> clang into tools/ dir as well under your llvm/ repo when you compile
> from scratch anyways.

Can you come up with a formulation/desc I can use instead then?

-- 
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] 12+ messages in thread

* Re: [net-next PATCH 3/4] samples/bpf: add a README file to get users started
  2016-04-26 11:56     ` Jesper Dangaard Brouer
@ 2016-04-26 12:40       ` Daniel Borkmann
  2016-04-26 14:34         ` Alexei Starovoitov
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Borkmann @ 2016-04-26 12:40 UTC (permalink / raw)
  To: Jesper Dangaard Brouer
  Cc: netdev, bblanco, borkmann, alexei.starovoitov, linux-kbuild

On 04/26/2016 01:56 PM, Jesper Dangaard Brouer wrote:
> On Tue, 26 Apr 2016 13:44:06 +0200
> Daniel Borkmann <daniel@iogearbox.net> wrote:
>
>> On 04/26/2016 01:09 PM, Jesper Dangaard Brouer wrote:
>>> 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 |   67 ++++++++++++++++++++++++++++++++++++++++++++++++
>>>    1 file changed, 67 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..3e1ac05d8e7c
>>> --- /dev/null
>>> +++ b/samples/bpf/README.rst
>>> @@ -0,0 +1,67 @@
>>> +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.0
>>> +
>>> +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.  To
>>> +compile LLVM manually and enable BPF target run (build dependencies
>>> +are cmake and gcc-c++)::
>>> +
>>> + $ git clone http://llvm.org/git/llvm.git
>>> + $ cd llvm
>>> + $ mkdir build; cd build
>>> + $ cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF
>>> + $ make
>>
>> That's perhaps a bit misleading in the sense that when you clone the
>> tree from git, you'd nowadays invoke cmake normally with LLVM_TARGETS_TO_BUILD
>> instead of LLVM_EXPERIMENTAL_TARGETS_TO_BUILD for BPF, as BPF is not an
>> experimental target anymore. It's probably also recommended to clone
>> clang into tools/ dir as well under your llvm/ repo when you compile
>> from scratch anyways.
>
> Can you come up with a formulation/desc I can use instead then?

You mean how to build with clang? There are various docs/snippets out
there, for example, see the 'Build LLVM and Clang development libs'
part of [1], that you can tweak for your README with.

   [1] https://gist.github.com/brendangregg/cfa482acb71aa577789c

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

* Re: [net-next PATCH 3/4] samples/bpf: add a README file to get users started
  2016-04-26 12:40       ` Daniel Borkmann
@ 2016-04-26 14:34         ` Alexei Starovoitov
  0 siblings, 0 replies; 12+ messages in thread
From: Alexei Starovoitov @ 2016-04-26 14:34 UTC (permalink / raw)
  To: Daniel Borkmann
  Cc: Jesper Dangaard Brouer, netdev, bblanco, borkmann, linux-kbuild

On Tue, Apr 26, 2016 at 02:40:54PM +0200, Daniel Borkmann wrote:
> On 04/26/2016 01:56 PM, Jesper Dangaard Brouer wrote:
> >>>+Compiling requires having installed:
> >>>+ * clang
> >>>+ * llvm >= version 3.7.0

please change it to 3.7.1, since 3.7.0 had several bugs.
They're rare, but better to avoid the issue.

> >>>+
> >>>+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)

there always be 3 targets for bpf, since some folks need to cross-compile.

> >>>+Manually compiling LLVM with 'bpf' support
> >>>+------------------------------------------
> >>>+
> >>>+In some LLVM versions the BPF target were marked experimental.  To
> >>>+compile LLVM manually and enable BPF target run (build dependencies
> >>>+are cmake and gcc-c++)::
> >>>+
> >>>+ $ git clone http://llvm.org/git/llvm.git
> >>>+ $ cd llvm
> >>>+ $ mkdir build; cd build
> >>>+ $ cmake .. -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=BPF
> >>>+ $ make
> >>
> >>That's perhaps a bit misleading in the sense that when you clone the
> >>tree from git, you'd nowadays invoke cmake normally with LLVM_TARGETS_TO_BUILD
> >>instead of LLVM_EXPERIMENTAL_TARGETS_TO_BUILD for BPF, as BPF is not an
> >>experimental target anymore. It's probably also recommended to clone
> >>clang into tools/ dir as well under your llvm/ repo when you compile
> >>from scratch anyways.

yes. LLVM_EXPERIMENTAL_TARGETS_TO_BUILD is the thing of the past
when bpf was just merged into llvm < 3.7
By default llvm will build all non-experimental backends including bpf.
If you need to make llc binary smaller you can use:
-DLLVM_TARGETS_TO_BUILD="BPF;X86"

Also fedora and ubuntu ship with llvm that has bpf support.

> >Can you come up with a formulation/desc I can use instead then?
> 
> You mean how to build with clang? There are various docs/snippets out
> there, for example, see the 'Build LLVM and Clang development libs'
> part of [1], that you can tweak for your README with.
> 
>   [1] https://gist.github.com/brendangregg/cfa482acb71aa577789c

yep. +1 for the link.


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

* Re: [net-next PATCH 4/4] samples/bpf: allow make to be run from samples/bpf/ directory
  2016-04-26 11:09 ` [net-next PATCH 4/4] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
@ 2016-04-26 14:35   ` Alexei Starovoitov
  2016-04-27 13:15     ` David Laight
  0 siblings, 1 reply; 12+ messages in thread
From: Alexei Starovoitov @ 2016-04-26 14:35 UTC (permalink / raw)
  To: Jesper Dangaard Brouer; +Cc: netdev, bblanco, borkmann, linux-kbuild

On Tue, Apr 26, 2016 at 01:09:32PM +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>
> ---
>  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 7ac66f5bbbf5..7370dfee482f 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 *~
> +

nice trick!


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

* RE: [net-next PATCH 4/4] samples/bpf: allow make to be run from samples/bpf/ directory
  2016-04-26 14:35   ` Alexei Starovoitov
@ 2016-04-27 13:15     ` David Laight
  0 siblings, 0 replies; 12+ messages in thread
From: David Laight @ 2016-04-27 13:15 UTC (permalink / raw)
  To: 'Alexei Starovoitov', Jesper Dangaard Brouer
  Cc: netdev@vger.kernel.org, bblanco@plumgrid.com,
	borkmann@iogearbox.net, linux-kbuild@vger.kernel.org

From: Alexei Starovoitov
> Sent: 26 April 2016 15:35
> On Tue, Apr 26, 2016 at 01:09:32PM +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>
> > ---
> >  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 7ac66f5bbbf5..7370dfee482f 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 *~
> > +
> 
> nice trick!

Another nice 'trick' is to write a GNUmakefie containing the local rules.
GNU make will read it in preference to Makefile and makefile.

	David

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

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

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-26 11:09 [net-next PATCH 0/4] samples/bpf: Improve user experience Jesper Dangaard Brouer
2016-04-26 11:09 ` [net-next PATCH 1/4] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
2016-04-26 11:36   ` Daniel Borkmann
2016-04-26 11:09 ` [net-next PATCH 2/4] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
2016-04-26 11:09 ` [net-next PATCH 3/4] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
2016-04-26 11:44   ` Daniel Borkmann
2016-04-26 11:56     ` Jesper Dangaard Brouer
2016-04-26 12:40       ` Daniel Borkmann
2016-04-26 14:34         ` Alexei Starovoitov
2016-04-26 11:09 ` [net-next PATCH 4/4] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
2016-04-26 14:35   ` Alexei Starovoitov
2016-04-27 13:15     ` David Laight

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).