libbpf: Add LIBBPF_DEPRECATED_SINCE macro for scheduling API deprecations
authorQuentin Monnet <quentin@isovalent.com>
Wed, 8 Sep 2021 21:32:26 +0000 (14:32 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 9 Sep 2021 21:28:05 +0000 (23:28 +0200)
commit0b46b755056043dccfe078b96b256502b88f2464
treedb9e0fd756e5dae38b0a58f9961d0ccef8c7bafe
parent006a5099fc18a43792b01d002e1e45c5541ea666
libbpf: Add LIBBPF_DEPRECATED_SINCE macro for scheduling API deprecations

Introduce a macro LIBBPF_DEPRECATED_SINCE(major, minor, message) to prepare
the deprecation of two API functions. This macro marks functions as deprecated
when libbpf's version reaches the values passed as an argument.

As part of this change libbpf_version.h header is added with recorded major
(LIBBPF_MAJOR_VERSION) and minor (LIBBPF_MINOR_VERSION) libbpf version macros.
They are now part of libbpf public API and can be relied upon by user code.
libbpf_version.h is installed system-wide along other libbpf public headers.

Due to this new build-time auto-generated header, in-kernel applications
relying on libbpf (resolve_btfids, bpftool, bpf_preload) are updated to
include libbpf's output directory as part of a list of include search paths.
Better fix would be to use libbpf's make_install target to install public API
headers, but that clean up is left out as a future improvement. The build
changes were tested by building kernel (with KBUILD_OUTPUT and O= specified
explicitly), bpftool, libbpf, selftests/bpf, and resolve_btfids builds. No
problems were detected.

Note that because of the constraints of the C preprocessor we have to write
a few lines of macro magic for each version used to prepare deprecation (0.6
for now).

Also, use LIBBPF_DEPRECATED_SINCE() to schedule deprecation of
btf__get_from_id() and btf__load(), which are replaced by
btf__load_from_kernel_by_id() and btf__load_into_kernel(), respectively,
starting from future libbpf v0.6. This is part of libbpf 1.0 effort ([0]).

  [0] Closes: https://github.com/libbpf/libbpf/issues/278

Co-developed-by: Quentin Monnet <quentin@isovalent.com>
Co-developed-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Quentin Monnet <quentin@isovalent.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20210908213226.1871016-1-andrii@kernel.org
kernel/bpf/preload/Makefile
tools/bpf/bpftool/Makefile
tools/bpf/resolve_btfids/Makefile
tools/lib/bpf/Makefile
tools/lib/bpf/btf.h
tools/lib/bpf/libbpf_common.h
tools/testing/selftests/bpf/Makefile