diff mbox series

[bpf-next,v2] samples: bpf: print a warning about headers_install

Message ID 20190605234722.2291-1-jakub.kicinski@netronome.com
State Accepted
Delegated to: BPF Maintainers
Headers show
Series [bpf-next,v2] samples: bpf: print a warning about headers_install | expand

Commit Message

Jakub Kicinski June 5, 2019, 11:47 p.m. UTC
It seems like periodically someone posts patches to "fix"
header includes.  The issue is that samples expect the
include path to have the uAPI headers (from usr/) first,
and then tools/ headers, so that locally installed uAPI
headers take precedence.  This means that if users didn't
run headers_install they will see all sort of strange
compilation errors, e.g.:

  HOSTCC  samples/bpf/test_lru_dist
  samples/bpf/test_lru_dist.c:39:8: error: redefinition of ‘struct list_head’
   struct list_head {
          ^~~~~~~~~
   In file included from samples/bpf/test_lru_dist.c:9:0:
   ../tools/include/linux/types.h:69:8: note: originally defined here
    struct list_head {
           ^~~~~~~~~

Try to detect this situation, and print a helpful warning.

v2: just use HOSTCC (Jiong).

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
---
 samples/bpf/Makefile | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Martin KaFai Lau June 6, 2019, 12:03 a.m. UTC | #1
On Wed, Jun 05, 2019 at 04:47:22PM -0700, Jakub Kicinski wrote:
> It seems like periodically someone posts patches to "fix"
> header includes.  The issue is that samples expect the
> include path to have the uAPI headers (from usr/) first,
> and then tools/ headers, so that locally installed uAPI
> headers take precedence.  This means that if users didn't
> run headers_install they will see all sort of strange
> compilation errors, e.g.:
> 
>   HOSTCC  samples/bpf/test_lru_dist
>   samples/bpf/test_lru_dist.c:39:8: error: redefinition of ‘struct list_head’
>    struct list_head {
>           ^~~~~~~~~
>    In file included from samples/bpf/test_lru_dist.c:9:0:
>    ../tools/include/linux/types.h:69:8: note: originally defined here
>     struct list_head {
>            ^~~~~~~~~
> 
> Try to detect this situation, and print a helpful warning.
Acked-by: Martin KaFai Lau <kafai@fb.com>
Daniel Borkmann June 6, 2019, 12:18 a.m. UTC | #2
On 06/06/2019 01:47 AM, Jakub Kicinski wrote:
> It seems like periodically someone posts patches to "fix"
> header includes.  The issue is that samples expect the
> include path to have the uAPI headers (from usr/) first,
> and then tools/ headers, so that locally installed uAPI
> headers take precedence.  This means that if users didn't
> run headers_install they will see all sort of strange
> compilation errors, e.g.:
> 
>   HOSTCC  samples/bpf/test_lru_dist
>   samples/bpf/test_lru_dist.c:39:8: error: redefinition of ‘struct list_head’
>    struct list_head {
>           ^~~~~~~~~
>    In file included from samples/bpf/test_lru_dist.c:9:0:
>    ../tools/include/linux/types.h:69:8: note: originally defined here
>     struct list_head {
>            ^~~~~~~~~
> 
> Try to detect this situation, and print a helpful warning.
> 
> v2: just use HOSTCC (Jiong).
> 
> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
> Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>

Applied, thanks!
diff mbox series

Patch

diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
index 253e5a2856be..4074a66a70ca 100644
--- a/samples/bpf/Makefile
+++ b/samples/bpf/Makefile
@@ -206,6 +206,15 @@  HOSTCC = $(CROSS_COMPILE)gcc
 CLANG_ARCH_ARGS = -target $(ARCH)
 endif
 
+HDR_PROBE := $(shell echo "\#include <linux/types.h>\n struct list_head { int a; }; int main() { return 0; }" | \
+	$(HOSTCC) $(KBUILD_HOSTCFLAGS) -x c - -o /dev/null 2>/dev/null && \
+	echo okay)
+
+ifeq ($(HDR_PROBE),)
+$(warning WARNING: Detected possible issues with include path.)
+$(warning WARNING: Please install kernel headers locally (make headers_install).)
+endif
+
 BTF_LLC_PROBE := $(shell $(LLC) -march=bpf -mattr=help 2>&1 | grep dwarfris)
 BTF_PAHOLE_PROBE := $(shell $(BTF_PAHOLE) --help 2>&1 | grep BTF)
 BTF_OBJCOPY_PROBE := $(shell $(LLVM_OBJCOPY) --help 2>&1 | grep -i 'usage.*llvm')