Skip to content
  • Quentin Monnet's avatar
    tools: bpftool: ignore make built-in rules for getting kernel version · e0a43aa3
    Quentin Monnet authored
    
    
    Bpftool calls the toplevel Makefile to get the kernel version for the
    sources it is built from. But when the utility is built from the top of
    the kernel repository, it may dump the following error message for
    certain architectures (including x86):
    
        $ make tools/bpf
        [...]
        make[3]: *** [checkbin] Error 1
        [...]
    
    This does not prevent bpftool compilation, but may feel disconcerting.
    The "checkbin" arch-dependent target is not supposed to be called for
    target "kernelversion", which is a simple "echo" of the version number.
    
    It turns out this is caused by the make invocation in tools/bpf/bpftool,
    which attempts to find implicit rules to apply. Extract from debug
    output:
    
        Reading makefiles...
        Reading makefile 'Makefile'...
        Reading makefile 'scripts/Kbuild.include' (search path) (no ~ expansion)...
        Reading makefile 'scripts/subarch.include' (search path) (no ~ expansion)...
        Reading makefile 'arch/x86/Makefile' (search path) (no ~ expansion)...
        Reading makefile 'scripts/Makefile.kcov' (search path) (no ~ expansion)...
        Reading makefile 'scripts/Makefile.gcc-plugins' (search path) (no ~ expansion)...
        Reading makefile 'scripts/Makefile.kasan' (search path) (no ~ expansion)...
        Reading makefile 'scripts/Makefile.extrawarn' (search path) (no ~ expansion)...
        Reading makefile 'scripts/Makefile.ubsan' (search path) (no ~ expansion)...
        Updating makefiles....
         Considering target file 'scripts/Makefile.ubsan'.
          Looking for an implicit rule for 'scripts/Makefile.ubsan'.
          Trying pattern rule with stem 'Makefile.ubsan'.
        [...]
          Trying pattern rule with stem 'Makefile.ubsan'.
          Trying implicit prerequisite 'scripts/Makefile.ubsan.o'.
          Looking for a rule with intermediate file 'scripts/Makefile.ubsan.o'.
           Avoiding implicit rule recursion.
           Trying pattern rule with stem 'Makefile.ubsan'.
           Trying rule prerequisite 'prepare'.
           Trying rule prerequisite 'FORCE'.
          Found an implicit rule for 'scripts/Makefile.ubsan'.
            Considering target file 'prepare'.
             File 'prepare' does not exist.
              Considering target file 'prepare0'.
               File 'prepare0' does not exist.
                Considering target file 'archprepare'.
                 File 'archprepare' does not exist.
                  Considering target file 'archheaders'.
                   File 'archheaders' does not exist.
                   Finished prerequisites of target file 'archheaders'.
                  Must remake target 'archheaders'.
        Putting child 0x55976f4f6980 (archheaders) PID 31743 on the chain.
    
    To avoid that, pass the -r and -R flags to eliminate the use of make
    built-in rules (and while at it, built-in variables) when running
    command "make kernelversion" from bpftool's Makefile.
    
    Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
    Reviewed-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    e0a43aa3