[net-next,V2,5/5] samples/bpf: like LLC also verify and allow redefining CLANG command
diff mbox

Message ID 20160426162732.22962.73140.stgit@firesoul
State New
Headers show

Commit Message

Jesper Dangaard Brouer April 26, 2016, 4:27 p.m. UTC
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(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Alexei Starovoitov April 26, 2016, 5:36 p.m. UTC | #1
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>

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jesper Dangaard Brouer April 27, 2016, 6:45 a.m. UTC | #2
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>

Patch
diff mbox

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