* [net-next PATCH V4 1/5] samples/bpf: add back functionality to redefine LLC command
2016-04-28 12:20 [net-next PATCH V4 0/5] samples/bpf: Improve user experience Jesper Dangaard Brouer
@ 2016-04-28 12:20 ` Jesper Dangaard Brouer
2016-04-28 13:21 ` Naveen N. Rao
2016-04-28 12:20 ` [net-next PATCH V4 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
` (4 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-28 12:20 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>
Acked-by: Alexei Starovoitov <ast@kernel.org>
---
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
* Re: [net-next PATCH V4 1/5] samples/bpf: add back functionality to redefine LLC command
2016-04-28 12:20 ` [net-next PATCH V4 1/5] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
@ 2016-04-28 13:21 ` Naveen N. Rao
2016-04-28 14:40 ` Jesper Dangaard Brouer
0 siblings, 1 reply; 12+ messages in thread
From: Naveen N. Rao @ 2016-04-28 13:21 UTC (permalink / raw)
To: Jesper Dangaard Brouer
Cc: netdev, linux-kbuild, bblanco, borkmann, alexei.starovoitov
On 2016/04/28 02:20PM, 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
I don't have an objection to this patch, but you didn't explain why/how
this approach is better than just doing:
PATH=~/git/llvm/build/bin make samples/bpf/
- Naveen
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [net-next PATCH V4 1/5] samples/bpf: add back functionality to redefine LLC command
2016-04-28 13:21 ` Naveen N. Rao
@ 2016-04-28 14:40 ` Jesper Dangaard Brouer
2016-04-28 14:50 ` Naveen N. Rao
0 siblings, 1 reply; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-28 14:40 UTC (permalink / raw)
To: Naveen N. Rao
Cc: netdev, linux-kbuild, bblanco, borkmann, alexei.starovoitov,
brouer
On Thu, 28 Apr 2016 18:51:33 +0530
"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> wrote:
> > 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
>
> I don't have an objection to this patch, but you didn't explain why/how
> this approach is better than just doing:
> PATH=~/git/llvm/build/bin make samples/bpf/
It is almost the same. There is always another way to do the same.
I explicitly use this to test different combinations of LLC and CLANG,
in-order to validate Alexei's claim that older versions of CLANG could
still work with a newer version of LLC. Thus, one use-case you
approach cannot cover ;-)
And clang seems to install a clang-3.9, which my solution also covers
by explicitly specifying CLANG=clang-3.9, if several avail clang's are
in the PATH.
--
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 V4 1/5] samples/bpf: add back functionality to redefine LLC command
2016-04-28 14:40 ` Jesper Dangaard Brouer
@ 2016-04-28 14:50 ` Naveen N. Rao
0 siblings, 0 replies; 12+ messages in thread
From: Naveen N. Rao @ 2016-04-28 14:50 UTC (permalink / raw)
To: Jesper Dangaard Brouer
Cc: netdev, linux-kbuild, bblanco, borkmann, alexei.starovoitov
On 2016/04/28 04:40PM, Jesper Dangaard Brouer wrote:
> On Thu, 28 Apr 2016 18:51:33 +0530
> "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> wrote:
>
> > > 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
> >
> > I don't have an objection to this patch, but you didn't explain why/how
> > this approach is better than just doing:
> > PATH=~/git/llvm/build/bin make samples/bpf/
>
> It is almost the same. There is always another way to do the same.
>
> I explicitly use this to test different combinations of LLC and CLANG,
> in-order to validate Alexei's claim that older versions of CLANG could
> still work with a newer version of LLC. Thus, one use-case you
> approach cannot cover ;-)
>
> And clang seems to install a clang-3.9, which my solution also covers
> by explicitly specifying CLANG=clang-3.9, if several avail clang's are
> in the PATH.
Ah, so a very niche use-case.
Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
- Naveen
^ permalink raw reply [flat|nested] 12+ messages in thread
* [net-next PATCH V4 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported
2016-04-28 12:20 [net-next PATCH V4 0/5] samples/bpf: Improve user experience Jesper Dangaard Brouer
2016-04-28 12:20 ` [net-next PATCH V4 1/5] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
@ 2016-04-28 12:20 ` Jesper Dangaard Brouer
2016-04-28 12:21 ` [net-next PATCH V4 3/5] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-28 12:20 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>
Acked-by: Alexei Starovoitov <ast@kernel.org>
---
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] 12+ messages in thread
* [net-next PATCH V4 3/5] samples/bpf: add a README file to get users started
2016-04-28 12:20 [net-next PATCH V4 0/5] samples/bpf: Improve user experience Jesper Dangaard Brouer
2016-04-28 12:20 ` [net-next PATCH V4 1/5] samples/bpf: add back functionality to redefine LLC command Jesper Dangaard Brouer
2016-04-28 12:20 ` [net-next PATCH V4 2/5] samples/bpf: Makefile verify LLVM compiler avail and bpf target is supported Jesper Dangaard Brouer
@ 2016-04-28 12:21 ` Jesper Dangaard Brouer
2016-04-28 13:37 ` Naveen N. Rao
2016-04-28 16:49 ` Alexei Starovoitov
2016-04-28 12:21 ` [net-next PATCH V4 4/5] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
` (2 subsequent siblings)
5 siblings, 2 replies; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-28 12:21 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 | 64 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 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..993d280184fa
--- /dev/null
+++ b/samples/bpf/README.rst
@@ -0,0 +1,64 @@
+eBPF sample programs
+====================
+
+This directory contains a mini eBPF library, test stubs, verifier
+test-suite and examples for using eBPF.
+
+Build dependencies
+==================
+
+Compiling requires having installed:
+ * clang >= version 3.4.0
+ * llvm >= version 3.7.1
+
+Note that LLVM's tool 'llc' must support target 'bpf', list version
+and supported targets with command: ``llc --version``
+
+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 building the BPF samples, issue the below command from the kernel
+top level directory::
+
+ make samples/bpf/
+
+Do notice the "/" slash after the directory name.
+
+Manually compiling LLVM with 'bpf' support
+------------------------------------------
+
+Since version 3.7.0, 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"
+
+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 compiled '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
* Re: [net-next PATCH V4 3/5] samples/bpf: add a README file to get users started
2016-04-28 12:21 ` [net-next PATCH V4 3/5] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
@ 2016-04-28 13:37 ` Naveen N. Rao
2016-04-28 16:49 ` Alexei Starovoitov
1 sibling, 0 replies; 12+ messages in thread
From: Naveen N. Rao @ 2016-04-28 13:37 UTC (permalink / raw)
To: Jesper Dangaard Brouer
Cc: netdev, linux-kbuild, bblanco, borkmann, alexei.starovoitov
On 2016/04/28 02:21PM, 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>
Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
> ---
> samples/bpf/README.rst | 64 ++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 64 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..993d280184fa
> --- /dev/null
> +++ b/samples/bpf/README.rst
> @@ -0,0 +1,64 @@
> +eBPF sample programs
> +====================
> +
> +This directory contains a mini eBPF library, test stubs, verifier
> +test-suite and examples for using eBPF.
> +
> +Build dependencies
> +==================
> +
> +Compiling requires having installed:
> + * clang >= version 3.4.0
> + * llvm >= version 3.7.1
> +
> +Note that LLVM's tool 'llc' must support target 'bpf', list version
> +and supported targets with command: ``llc --version``
> +
> +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 building the BPF samples, issue the below command from the kernel
> +top level directory::
> +
> + make samples/bpf/
> +
> +Do notice the "/" slash after the directory name.
> +
> +Manually compiling LLVM with 'bpf' support
> +------------------------------------------
> +
> +Since version 3.7.0, 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"
> +
> +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 compiled '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 V4 3/5] samples/bpf: add a README file to get users started
2016-04-28 12:21 ` [net-next PATCH V4 3/5] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
2016-04-28 13:37 ` Naveen N. Rao
@ 2016-04-28 16:49 ` Alexei Starovoitov
1 sibling, 0 replies; 12+ messages in thread
From: Alexei Starovoitov @ 2016-04-28 16:49 UTC (permalink / raw)
To: Jesper Dangaard Brouer
Cc: netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann
On Thu, Apr 28, 2016 at 02:21:04PM +0200, 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>
Acked-by: Alexei Starovoitov <ast@kernel.org>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [net-next PATCH V4 4/5] samples/bpf: allow make to be run from samples/bpf/ directory
2016-04-28 12:20 [net-next PATCH V4 0/5] samples/bpf: Improve user experience Jesper Dangaard Brouer
` (2 preceding siblings ...)
2016-04-28 12:21 ` [net-next PATCH V4 3/5] samples/bpf: add a README file to get users started Jesper Dangaard Brouer
@ 2016-04-28 12:21 ` Jesper Dangaard Brouer
2016-04-28 12:21 ` [net-next PATCH V4 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command Jesper Dangaard Brouer
2016-04-29 18:26 ` [net-next PATCH V4 0/5] samples/bpf: Improve user experience David Miller
5 siblings, 0 replies; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-28 12:21 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>
Acked-by: Alexei Starovoitov <ast@kernel.org>
---
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 993d280184fa..0da069ffa434 100644
--- a/samples/bpf/README.rst
+++ b/samples/bpf/README.rst
@@ -36,6 +36,9 @@ top level directory::
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
* [net-next PATCH V4 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command
2016-04-28 12:20 [net-next PATCH V4 0/5] samples/bpf: Improve user experience Jesper Dangaard Brouer
` (3 preceding siblings ...)
2016-04-28 12:21 ` [net-next PATCH V4 4/5] samples/bpf: allow make to be run from samples/bpf/ directory Jesper Dangaard Brouer
@ 2016-04-28 12:21 ` Jesper Dangaard Brouer
2016-04-29 18:26 ` [net-next PATCH V4 0/5] samples/bpf: Improve user experience David Miller
5 siblings, 0 replies; 12+ messages in thread
From: Jesper Dangaard Brouer @ 2016-04-28 12:21 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>
Acked-by: Alexei Starovoitov <ast@kernel.org>
---
samples/bpf/Makefile | 25 ++++++++++++++-----------
samples/bpf/README.rst | 6 +++---
2 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index dd63521832d8..66897e61232c 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:
@@ -93,16 +94,18 @@ 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
+# Verify LLVM compiler tools are available and bpf target is supported by llc
+.PHONY: verify_cmds 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 0da069ffa434..d60d50d94640 100644
--- a/samples/bpf/README.rst
+++ b/samples/bpf/README.rst
@@ -60,8 +60,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 compiled 'llc' command
-via redefining LLC on the make command line::
+It is also possible to point make to the newly compiled '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] 12+ messages in thread
* Re: [net-next PATCH V4 0/5] samples/bpf: Improve user experience
2016-04-28 12:20 [net-next PATCH V4 0/5] samples/bpf: Improve user experience Jesper Dangaard Brouer
` (4 preceding siblings ...)
2016-04-28 12:21 ` [net-next PATCH V4 5/5] samples/bpf: like LLC also verify and allow redefining CLANG command Jesper Dangaard Brouer
@ 2016-04-29 18:26 ` David Miller
5 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2016-04-29 18:26 UTC (permalink / raw)
To: brouer
Cc: netdev, linux-kbuild, bblanco, naveen.n.rao, borkmann,
alexei.starovoitov
From: Jesper Dangaard Brouer <brouer@redhat.com>
Date: Thu, 28 Apr 2016 14:20:48 +0200
> 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.
>
> V4:
> - Address Naveen's nitpicks
> - Handle/fail if extra args are passed in LLC or CLANG (David Laight)
>
> V3:
> - Add Alexei's ACKs
> - Remove README paragraph about LLVM experimental BPF target
> as it only existed between LLVM version 3.6 to 3.7.
>
> V2:
> - Adjusted recommend minimum versions to 3.7.1
> - Included clang build instructions
> - New patch adding CLANG variable and validation of command
Series applied, thanks Jesper.
^ permalink raw reply [flat|nested] 12+ messages in thread