Commit bdefbbf2 authored by Jesper Dangaard Brouer's avatar Jesper Dangaard Brouer Committed by David S. Miller

samples/bpf: like LLC also verify and allow redefining CLANG command

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: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b62a796c
...@@ -81,9 +81,10 @@ HOSTLOADLIBES_spintest += -lelf ...@@ -81,9 +81,10 @@ HOSTLOADLIBES_spintest += -lelf
HOSTLOADLIBES_map_perf_test += -lelf -lrt HOSTLOADLIBES_map_perf_test += -lelf -lrt
HOSTLOADLIBES_test_overhead += -lelf -lrt HOSTLOADLIBES_test_overhead += -lelf -lrt
# Allows pointing LLC to a LLVM backend with bpf support, redefine on cmdline: # Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline:
# make samples/bpf/ LLC=~/git/llvm/build/bin/llc # make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
LLC ?= llc LLC ?= llc
CLANG ?= clang
# Trick to allow make to be run from this directory # Trick to allow make to be run from this directory
all: all:
...@@ -93,16 +94,18 @@ clean: ...@@ -93,16 +94,18 @@ clean:
$(MAKE) -C ../../ M=$$PWD clean $(MAKE) -C ../../ M=$$PWD clean
@rm -f *~ @rm -f *~
# Verify LLVM compiler is available and bpf target is supported # Verify LLVM compiler tools are available and bpf target is supported by llc
.PHONY: verify_cmd_llc verify_target_bpf .PHONY: verify_cmds verify_target_bpf $(CLANG) $(LLC)
verify_cmd_llc: verify_cmds: $(CLANG) $(LLC)
@if ! (which "${LLC}" > /dev/null 2>&1); then \ @for TOOL in $^ ; do \
echo "*** ERROR: Cannot find LLVM tool 'llc' (${LLC})" ;\ if ! (which -- "$${TOOL}" > /dev/null 2>&1); then \
exit 1; \ echo "*** ERROR: Cannot find LLVM tool $${TOOL}" ;\
else true; fi 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 \ @if ! (${LLC} -march=bpf -mattr=help > /dev/null 2>&1); then \
echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\ echo "*** ERROR: LLVM (${LLC}) does not support 'bpf' target" ;\
echo " NOTICE: LLVM version >= 3.7.1 required" ;\ echo " NOTICE: LLVM version >= 3.7.1 required" ;\
...@@ -115,6 +118,6 @@ $(src)/*.c: verify_target_bpf ...@@ -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 # But, there is no easy way to fix it, so just exclude it since it is
# useless for BPF samples. # useless for BPF samples.
$(obj)/%.o: $(src)/%.c $(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 \ -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 $@
...@@ -60,7 +60,7 @@ Quick sniplet for manually compiling LLVM and clang ...@@ -60,7 +60,7 @@ Quick sniplet for manually compiling LLVM and clang
$ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86" $ cmake .. -DLLVM_TARGETS_TO_BUILD="BPF;X86"
$ make -j $(getconf _NPROCESSORS_ONLN) $ make -j $(getconf _NPROCESSORS_ONLN)
It is also possible to point make to the newly compiled 'llc' command It is also possible to point make to the newly compiled 'llc' or
via redefining LLC on the make command line:: '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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment