Skip to content
  • Quentin Monnet's avatar
    tools: bpftool: improve and check builds for different make invocations · 45c5589d
    Quentin Monnet authored
    
    
    There are a number of alternative "make" invocations that can be used to
    compile bpftool. The following invocations are expected to work:
    
      - through the kbuild system, from the top of the repository
        (make tools/bpf)
      - by telling make to change to the bpftool directory
        (make -C tools/bpf/bpftool)
      - by building the BPF tools from tools/
        (cd tools && make bpf)
      - by running make from bpftool directory
        (cd tools/bpf/bpftool && make)
    
    Additionally, setting the O or OUTPUT variables should tell the build
    system to use a custom output path, for each of these alternatives.
    
    The following patch fixes the following invocations:
    
      $ make tools/bpf
      $ make tools/bpf O=<dir>
      $ make -C tools/bpf/bpftool OUTPUT=<dir>
      $ make -C tools/bpf/bpftool O=<dir>
      $ cd tools/ && make bpf O=<dir>
      $ cd tools/bpf/bpftool && make OUTPUT=<dir>
      $ cd tools/bpf/bpftool && make O=<dir>
    
    After this commit, the build still fails for two variants when passing
    the OUTPUT variable:
    
      $ make tools/bpf OUTPUT=<dir>
      $ cd tools/ && make bpf OUTPUT=<dir>
    
    In order to remember and check what make invocations are supposed to
    work, and to document the ones which do not, a new script is added to
    the BPF selftests. Note that some invocations require the kernel to be
    configured, so the script skips them if no .config file is found.
    
    v2:
    - In make_and_clean(), set $ERROR to 1 when "make" returns non-zero,
      even if the binary was produced.
    - Run "make clean" from the correct directory (bpf/ instead of bpftool/,
      when relevant).
    
    Reported-by: default avatarLorenz Bauer <lmb@cloudflare.com>
    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>
    45c5589d