commit | 0d9b1b200082c7e61a6ebdb488950cad5ddd8de3 | [log] [tgz] |
---|---|---|
author | Quentin Monnet <quentin@isovalent.com> | Thu Jan 26 02:06:38 2023 +0000 |
committer | Quentin Monnet <qmonnet+github@qoba.lt> | Wed Feb 01 21:05:41 2023 +0000 |
tree | 767b00a778a8902dfb15a41b50763b9fd1a1fcbd | |
parent | efbc3cdfd3c77cc8519a2becf669864f40120835 [diff] |
mirror: Improve README.md documentation for static builds The README.md file explains that one can do a static build of bpftool by passing CFLAGS=--static when invoking make, but that it does not work out of the box when using libbfd. It should work, though; this is simply a matter of passing the correct $(LIBS) flags, and we are missing -liberty and -lz. The reason why we are missing these is that the $(CFLAGS), containing the --static flag, are not passed down to the feature detection system, which does dynamic builds and finds that -liberty and -lz may not be necessary. However, the $(EXTRA_CFLAGS) variable is passed to the feature detection system. If we use it instead of $(CFLAGS) to pass the --static flag, then bpftool compiles just fine against libbfd. For static builds with the LLVM disassembler, the same $(EXTRA_CFLAGS) should be used. However, this requires a static version of the LLVM libraries, which is not typically install (or packaged) on the host by default. We can document the few steps needed (although compiling and linking these libraries takes time and RAM). Update the README.md file accordingly. Signed-off-by: Quentin Monnet <quentin@isovalent.com>
This is a mirror of bpf-next Linux source tree's tools/bpf/bpftool
directory, plus its few dependencies from under kernel/bpf/
, and its supporting header files.
All the gory details of syncing can be found in scripts/sync-kernel.sh
script.
Some header files in this repo (include/linux/*.h
) are reduced versions of their counterpart files at bpf-next's tools/include/linux/*.h
to make compilation successful.
Please check out the manual pages for documentation about bpftool. A number of example invocations are also displayed in this blog post.
All general BPF questions, including kernel functionality, bpftool features and usage, should be sent to bpf@vger.kernel.org mailing list. You can subscribe to it here and search its archive here. Please search the archive before asking new questions. It very well might be that this was already addressed or answered before.
bpf@vger.kernel.org is monitored by many more people and they will happily try to help you with whatever issue you have. This repository's PRs and issues should be opened only for dealing with issues pertaining to specific way this bpftool mirror repo is set up and organized.
Required:
Optional:
This repository uses libbpf as a submodule. You can initialize it when cloning bpftool:
$ git clone --recurse-submodules https://github.com/libbpf/bpftool.git
Alternatively, if you have already cloned the repository, you can initialize the submodule by running the following command from within the repository:
$ git submodule update --init
To build bpftool:
$ cd src
$ make
To build and install bpftool on the system:
$ cd src # make install
Building bpftool in a separate directory is supported via the OUTPUT
variable:
$ mkdir /tmp/bpftool $ cd src $ OUTPUT=/tmp/bpftool make
Most of the output is suppressed by default, but detailed building logs can be displayed by passing V=1
:
$ cd src $ make V=1
Additional compilation flags can be passed to the command line if required. For example, we can create a static build with the following commands:
$ cd src $ EXTRA_CFLAGS=--static make
Note that to use the LLVM disassembler with static builds, we need a static version of the LLVM library installed on the system:
Clone and build the LLVM libraries locally.
$ git clone https://github.com/llvm/llvm-project.git $ mkdir llvm_build $ cmake -S llvm-project/llvm -B llvm_build -DCMAKE_BUILD_TYPE=Release $ make -j -C llvm_build llvm-config llvm-libraries
Build bpftool with EXTRA_CFLAGS
set to --static
, and by passing the path to the relevant llvm-config
.
$ cd bpftool $ LLVM_CONFIG=../llvm_build/bin/llvm-config EXTRA_CFLAGS=--static make -j
The man pages for bpftool can be built with:
$ cd docs
$ make
They can be installed on the system with:
$ cd docs # make install
This work is dual-licensed under the GNU GPL v2.0 (only) license and the BSD 2-clause license. You can choose between one of them if you use this work.
SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)