Message ID | 20180515053506.4345-1-jakub.kicinski@netronome.com |
---|---|
Headers | show |
Series | samples: bpf: fix build after move to full libbpf | expand |
On Mon, May 14, 2018 at 10:35:01PM -0700, Jakub Kicinski wrote: > Hi! > > Following patches address build issues after recent move to libbpf. > For out-of-tree builds we would see the following error: > > gcc: error: samples/bpf/../../tools/lib/bpf/libbpf.a: No such file or directory > > libbpf build system is now always invoked explicitly rather than > relying on building single objects most of the time. We need to > resolve the friction between Kbuild and tools/ build system. > > Mini-library called libbpf.h in samples is renamed to bpf_insn.h, > using linux/filter.h seems not completely trivial since some samples > get upset when order on include search path in changed. We do have > to rename libbpf.h, however, because otherwise it's hard to reliably > get to libbpf's header in out-of-tree builds. > > v2: > - fix the build error harder (patch 3); > - add patch 5 (make clang less noisy). Applied, Thanks
On Mon, 14 May 2018 22:57:53 -0700 Alexei Starovoitov <alexei.starovoitov@gmail.com> wrote: > On Mon, May 14, 2018 at 10:35:01PM -0700, Jakub Kicinski wrote: > > Hi! > > > > Following patches address build issues after recent move to libbpf. > > For out-of-tree builds we would see the following error: > > > > gcc: error: samples/bpf/../../tools/lib/bpf/libbpf.a: No such file or directory > > > > libbpf build system is now always invoked explicitly rather than > > relying on building single objects most of the time. We need to > > resolve the friction between Kbuild and tools/ build system. > > > > Mini-library called libbpf.h in samples is renamed to bpf_insn.h, > > using linux/filter.h seems not completely trivial since some samples > > get upset when order on include search path in changed. We do have > > to rename libbpf.h, however, because otherwise it's hard to reliably > > get to libbpf's header in out-of-tree builds. > > > > v2: > > - fix the build error harder (patch 3); > > - add patch 5 (make clang less noisy). > > Applied, Thanks I just tried it out, but the build fails. $ make samples/bpf/ CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK include/generated/bounds.h CHK include/generated/timeconst.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh DESCEND objtool CHK scripts/mod/devicetable-offsets.h make -C /home/jbrouer/git/kernel/bpf-next/samples/bpf/../../tools/lib/bpf/ RM='rm -rf' LDFLAGS= srctree=/home/jbrouer/git/kernel/bpf-next/samples/bpf/../../ O= Auto-detecting system features: ... libelf: [ OFF ] ... bpf: [ OFF ] No libelf found make[2]: *** [Makefile:212: elfdep] Error 1 make[1]: *** [samples/bpf/Makefile:207: /home/jbrouer/git/kernel/bpf-next/samples/bpf/../../tools/lib/bpf/libbpf.a] Error 2 make: *** [Makefile:1743: samples/bpf/] Error 2 But it might not be related to this change, as the problem seems to the with the "Auto-detecting system features". It is the build of libbpf that is the problem. $ cd tools/lib/bpf/ $ make Auto-detecting system features: ... libelf: [ OFF ] ... bpf: [ OFF ] No libelf found make: *** [Makefile:212: elfdep] Error 1 And do have 'libelf' installed on this system... the same build/make commands works on net-next. On net-next I see: $ cd tools/lib/bpf/ $ make Auto-detecting system features: ... libelf: [ on ] ... bpf: [ on ] Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h' Warning: Kernel ABI header at 'tools/include/uapi/linux/if_link.h' differs from latest version at 'include/uapi/linux/if_link.h' CC libbpf.o CC bpf.o CC nlattr.o CC btf.o LD libbpf-in.o LINK libbpf.a LINK libbpf.so
SOLVED, how see below On Tue, 15 May 2018 08:10:09 +0200 Jesper Dangaard Brouer <brouer@redhat.com> wrote: > On Mon, 14 May 2018 22:57:53 -0700 > Alexei Starovoitov <alexei.starovoitov@gmail.com> wrote: > > > On Mon, May 14, 2018 at 10:35:01PM -0700, Jakub Kicinski wrote: > > > Hi! > > > > > > Following patches address build issues after recent move to libbpf. > > > For out-of-tree builds we would see the following error: > > > > > > gcc: error: samples/bpf/../../tools/lib/bpf/libbpf.a: No such file or directory > > > > > > libbpf build system is now always invoked explicitly rather than > > > relying on building single objects most of the time. We need to > > > resolve the friction between Kbuild and tools/ build system. > > > > > > Mini-library called libbpf.h in samples is renamed to bpf_insn.h, > > > using linux/filter.h seems not completely trivial since some samples > > > get upset when order on include search path in changed. We do have > > > to rename libbpf.h, however, because otherwise it's hard to reliably > > > get to libbpf's header in out-of-tree builds. > > > > > > v2: > > > - fix the build error harder (patch 3); > > > - add patch 5 (make clang less noisy). > > > > Applied, Thanks > > I just tried it out, but the build fails. > > $ make samples/bpf/ > CHK include/config/kernel.release > CHK include/generated/uapi/linux/version.h > CHK include/generated/utsrelease.h > CHK include/generated/bounds.h > CHK include/generated/timeconst.h > CHK include/generated/asm-offsets.h > CALL scripts/checksyscalls.sh > DESCEND objtool > CHK scripts/mod/devicetable-offsets.h > make -C /home/jbrouer/git/kernel/bpf-next/samples/bpf/../../tools/lib/bpf/ RM='rm -rf' LDFLAGS= srctree=/home/jbrouer/git/kernel/bpf-next/samples/bpf/../../ O= > > Auto-detecting system features: > ... libelf: [ OFF ] > ... bpf: [ OFF ] > > No libelf found > make[2]: *** [Makefile:212: elfdep] Error 1 > make[1]: *** [samples/bpf/Makefile:207: /home/jbrouer/git/kernel/bpf-next/samples/bpf/../../tools/lib/bpf/libbpf.a] Error 2 > make: *** [Makefile:1743: samples/bpf/] Error 2 > > > But it might not be related to this change, as the problem seems to the > with the "Auto-detecting system features". It is the build of libbpf > that is the problem. > > $ cd tools/lib/bpf/ > $ make > > Auto-detecting system features: > ... libelf: [ OFF ] > ... bpf: [ OFF ] > > No libelf found > make: *** [Makefile:212: elfdep] Error 1 > > > And do have 'libelf' installed on this system... the same build/make > commands works on net-next. > > On net-next I see: > > $ cd tools/lib/bpf/ > $ make > > Auto-detecting system features: > ... libelf: [ on ] > ... bpf: [ on ] > > Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h' > Warning: Kernel ABI header at 'tools/include/uapi/linux/if_link.h' differs from latest version at 'include/uapi/linux/if_link.h' > CC libbpf.o > CC bpf.o > CC nlattr.o > CC btf.o > LD libbpf-in.o > LINK libbpf.a > LINK libbpf.so SOLVED It seems that the "Auto-detecting system" needed a 'make clean'. My problem goes away when I did the following: $ cd tools/ $ make clean $ cd lib/bpf/ $ make Auto-detecting system features: ... libelf: [ on ] ... bpf: [ on ] HOSTCC fixdep.o HOSTLD fixdep-in.o LINK fixdep Warning: Kernel ABI header at 'tools/include/uapi/linux/if_link.h' differs from latest version at 'include/uapi/linux/if_link.h' CC libbpf.o CC bpf.o CC nlattr.o CC btf.o LD libbpf-in.o LINK libbpf.a LINK libbpf.so
On Tue, 15 May 2018 11:16:43 +0200, Jesper Dangaard Brouer wrote: > > $ cd tools/lib/bpf/ > > $ make > > > > Auto-detecting system features: > > ... libelf: [ on ] > > ... bpf: [ on ] > > > > Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h' > > Warning: Kernel ABI header at 'tools/include/uapi/linux/if_link.h' differs from latest version at 'include/uapi/linux/if_link.h' > > CC libbpf.o > > CC bpf.o > > CC nlattr.o > > CC btf.o > > LD libbpf-in.o > > LINK libbpf.a > > LINK libbpf.so > > SOLVED > > It seems that the "Auto-detecting system" needed a 'make clean'. > My problem goes away when I did the following: > > $ cd tools/ > $ make clean > > $ cd lib/bpf/ > $ make > > Auto-detecting system features: > ... libelf: [ on ] > ... bpf: [ on ] Interesting! I've seen the same thing (on Fedora, not sure distro is relevant). I tracked it down to dependency files (*.d) in tools/build/features/ containing a reference to a sigset.h header which didn't exist :S I did git clean -xdf to fix my tree. Thanks for testing and sorry about the breakage!