Re: Building perf with BUILD_BPF_SKEL=1 by default

Song Liu
2021-12-03T19:32:39Z

> On Dec 3, 2021, at 5:10 AM, Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
>
> Hi Song,
>
> So I'm changing all my containers to build with BUILD_BPF_SKEL=1
> to then make this the default, so far older containers fail either
> because the clang available is too old, so I've added a NO_BUILD_BPF_SKEL=1
> env var to disable that in those containers and then there is this other
> case where clang is recent enough but:
>
> util/bpf_skel/bperf_leader.bpf.c:13:20: error: use of undeclared identifier 'BPF_F_PRESERVE_ELEMS'
> __uint(map_flags, BPF_F_PRESERVE_ELEMS);
>
> Because the system's /usr/include/linux/bpf.h doesn't have that
> BPF_F_PRESERVE_ELEMS enum entry.
>
> These are enums to make them available via BTF, but then I can't use
> the:
>
> #ifdef BPF_F_PRESERVE_ELEMS
> #define BPF_F_PRESERVE_ELEMS (1U << 11)
> #endif
>
> approach.
>
> But then we _have_ it in the tools/include/uapi/linux/bpf.h we ship:
>
> $ grep BPF_F_PRESERVE_ELEMS tools/include/uapi/linux/bpf.h
> BPF_F_PRESERVE_ELEMS = (1U << 11),
> $
>
> so we need to switch to using it somehow, this way we can build in more
> systems and make bperf and other BPF enabled features.
>
> From a quick look I couldn't find where to add
> $(sourcedir)/tools/include/uapi/ to the include path used to build
> util/bpf_skel/bperf_leader.bpf.c, should be easy, can you take a look?
>
> Thanks,
>
> - Arnaldo

I think the following should fix it

Thanks,
Song

diff --git i/tools/perf/util/bpf_skel/bperf_follower.bpf.c w/tools/perf/util/bpf_skel/bperf_follower.bpf.c
index b8fa3cb2da230..4a6acfde14937 100644
--- i/tools/perf/util/bpf_skel/bperf_follower.bpf.c
+++ w/tools/perf/util/bpf_skel/bperf_follower.bpf.c
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
// Copyright (c) 2021 Facebook
-#include <linux/bpf.h>
-#include <linux/perf_event.h>
+#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
#include "bperf.h"
diff --git i/tools/perf/util/bpf_skel/bperf_leader.bpf.c w/tools/perf/util/bpf_skel/bperf_leader.bpf.c
index 4f70d1459e86c..40d962b058634 100644
--- i/tools/perf/util/bpf_skel/bperf_leader.bpf.c
+++ w/tools/perf/util/bpf_skel/bperf_leader.bpf.c
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
// Copyright (c) 2021 Facebook
-#include <linux/bpf.h>
-#include <linux/perf_event.h>
+#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
#include "bperf.h"
diff --git i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c
index ab12b4c4ece21..97037d3b3d9fa 100644
--- i/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c
+++ w/tools/perf/util/bpf_skel/bpf_prog_profiler.bpf.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
// Copyright (c) 2020 Facebook
-#include <linux/bpf.h>
+#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>