mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-13 20:16:26 +00:00
Merge branch 'samples-bpf-user-experience'
Jesper Dangaard Brouer says: ==================== samples/bpf: Improve user experience 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 ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
638af17873
2 changed files with 101 additions and 2 deletions
|
@ -81,10 +81,43 @@ HOSTLOADLIBES_spintest += -lelf
|
|||
HOSTLOADLIBES_map_perf_test += -lelf -lrt
|
||||
HOSTLOADLIBES_test_overhead += -lelf -lrt
|
||||
|
||||
# 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:
|
||||
$(MAKE) -C ../../ $$PWD/
|
||||
|
||||
clean:
|
||||
$(MAKE) -C ../../ M=$$PWD clean
|
||||
@rm -f *~
|
||||
|
||||
# Verify LLVM compiler tools are available and bpf target is supported by llc
|
||||
.PHONY: verify_cmds verify_target_bpf $(CLANG) $(LLC)
|
||||
|
||||
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_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" ;\
|
||||
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.
|
||||
$(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 $@
|
||||
-O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf -filetype=obj -o $@
|
||||
|
|
66
samples/bpf/README.rst
Normal file
66
samples/bpf/README.rst
Normal file
|
@ -0,0 +1,66 @@
|
|||
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.
|
||||
|
||||
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
|
||||
------------------------------------------
|
||||
|
||||
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' or
|
||||
'clang' command via redefining LLC or CLANG on the make command line::
|
||||
|
||||
make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang
|
Loading…
Reference in a new issue