[RFC,2/3] net/af_xdp: determine libbpf version by checking for symbols

Message ID 20220721121415.1709202-2-ciara.loftus@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Andrew Rybchenko
Headers
Series [RFC,1/3] net/af_xdp: simplify libbpf version checking in meson |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Loftus, Ciara July 21, 2022, 12:14 p.m. UTC
  Instead of using pkg-config to query the version of the libbpf library,
search for symbols in the library and use their presence or absence to
determine what version of the library is being linked.

Suggested-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
---
 drivers/net/af_xdp/meson.build | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
  

Patch

diff --git a/drivers/net/af_xdp/meson.build b/drivers/net/af_xdp/meson.build
index c90ab10a7b..d91545f9c3 100644
--- a/drivers/net/af_xdp/meson.build
+++ b/drivers/net/af_xdp/meson.build
@@ -15,8 +15,12 @@  xdp_dep = dependency('libxdp', version : '>=1.2.2', required: false, method: 'pk
 bpf_dep = dependency('libbpf', required: false, method: 'pkg-config')
 if not bpf_dep.found()
     bpf_dep = cc.find_library('bpf', required: false)
-else
-    bpf_ver_dep = dependency('libbpf', version : '>=0.7.0', required: false, method: 'pkg-config')
+endif
+
+libbpf070 = false
+
+if bpf_dep.found() and cc.has_header('bpf/bpf.h') and cc.has_header_symbol('bpf/bpf.h', 'bpf_btf_load')
+    libbpf070 = true
 endif
 
 if cc.has_header('linux/if_xdp.h')
@@ -26,7 +30,7 @@  if cc.has_header('linux/if_xdp.h')
             cflags += ['-DRTE_NET_AF_XDP_SHARED_UMEM']
             ext_deps += xdp_dep
             ext_deps += bpf_dep
-            if bpf_ver_dep.found()
+            if libbpf070
                 cflags += ['-DRTE_NET_AF_XDP_LIBBPF_OBJ_OPEN']
             endif
         else
@@ -36,11 +40,10 @@  if cc.has_header('linux/if_xdp.h')
     elif bpf_dep.found() and cc.has_header('bpf/xsk.h') and cc.has_header('bpf/bpf.h')
         # libxdp not found. Rely solely on libbpf for xsk functionality
         # which is only available in versions < v0.7.0.
-        if not bpf_ver_dep.found()
+        if not libbpf070
             ext_deps += bpf_dep
-            bpf_shumem_ver_dep = dependency('libbpf', version : '>=0.2.0',
-                            required: false, method: 'pkg-config')
-            if bpf_shumem_ver_dep.found()
+            bpf_shumem_ver_dep = cc.has_header_symbol('bpf/bpf.h', 'bpf_prog_bind_map')
+            if bpf_shumem_ver_dep
                 cflags += ['-DRTE_NET_AF_XDP_SHARED_UMEM']
             endif
         else