On 2020-03-11 at 18:26:50 +0100, Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > On Wed, Mar 11, 2020 at 05:14:59PM +0100, Tobias Klauser wrote: > > When compiling bpftool on a system where the /usr/include/asm symlink > > doesn't exist (e.g. on an Ubuntu system without gcc-multilib installed), > > the build fails with: > > > > CLANG skeleton/profiler.bpf.o > > In file included from skeleton/profiler.bpf.c:4: > > In file included from /usr/include/linux/bpf.h:11: > > /usr/include/linux/types.h:5:10: fatal error: 'asm/types.h' file not found > > #include <asm/types.h> > > ^~~~~~~~~~~~~ > > 1 error generated. > > I think the issue is different. > profiler.bpf.c should have picked up > tools/include/uapi/linux/bpf.h (instead of global from /usr/inclde) > which should have included > tools/include/linux/types.h (instead of /usr/include/linux/types.h) > > we also have a workaround for some cases: > ./tools/testing/selftests/bpf/include/uapi/linux/types.h I just tried that. Unfortunately, this will pull in stdbool.h, stddef.h and stdint.h libc header (via either linux/types.h header). This will again require the libc6-dev-i386 package when building for the bpf target. This is exactly the dependency that we'd like to avoid in Cilium, also see https://github.com/cilium/cilium/pull/10204 I agree that we ideally shouldn't pull in the headers from the system, but currently I don't see a way of doing that without still depending on libc headers. Suggestions welcome... > > make: *** [Makefile:123: skeleton/profiler.bpf.o] Error 1 > > > > In certain cases (e.g. for container builds), installing gcc-multilib > > and all its dependencies - which are otherwise not needed to build > > bpftool - unnecessarily increases the image size. > > > > Thus, fix this by adding /usr/include/$(uname -m)-linux-gnu to the > > clang search path so <asm/types.h> can be found. > > In general perf builds fine on all sorts of distros and configs. > I think bpftool should use the same includes from tools/ > and skeleton too. I'll check how perf builds do it but I suspect they will also depend on libc headers. This is fine for userspace tools, but we'd like to avoid it for bpf programs. - Tobias