On Thu, 2019-04-04 at 13:55 +0800, Ye Xiaolong wrote: > Hi, Luca > > On 04/03, Luca Boccassi wrote: > > On Wed, 2019-04-03 at 18:44 +0100, Ferruh Yigit wrote: > > > On 4/3/2019 5:59 PM, Xiaolong Ye wrote: > > > > Add a new PMD driver for AF_XDP which is a proposed faster > > > > version > > > > of > > > > AF_PACKET interface in Linux. More info about AF_XDP, please > > > > refer > > > > to [1] > > > > [2]. > > > > > > > > This is the vanilla version PMD which just uses a raw buffer > > > > registered as > > > > the umem. > > > > > > > > [1] > > > > https://fosdem.org/2018/schedule/event/af_xdp/ > > > > > > > > > > > > [2] > > > > https://lwn.net/Articles/745934/ > > > > > > > > > > > > > > > > Signed-off-by: Xiaolong Ye < > > > > [email protected] > > > > > > > > > > I am not able to test functionality but code looks good to me, I > > > can > > > compile via > > > Makefile (with suggested steps in doc) but not able to build with > > > meson, can you > > > please check below comments? > > > > > > <...> > > > > > > > @@ -0,0 +1,21 @@ > > > > +# SPDX-License-Identifier: BSD-3-Clause > > > > +# Copyright(c) 2019 Intel Corporation > > > > + > > > > +if host_machine.system() != 'linux' > > > > + build = false > > > > +endif > > > > > > After this point, if build is false it shouldn't continue to > > > below > > > checks I think. > > > > > > > + > > > > +bpf_dep = dependency('libbpf', required: false) > > > > > > My library is in '/usr/local/lib64/libbpf.so' but this line can't > > > find it. Where > > > does 'dependency()' checks for libraries? > > > > dependency() uses only pkg-config (or cmake or embedded specific > > tools, > > neither of which applies to bpf), so if you haven't built from bpf- > > next > > you won't have the pkg-config file installed, and it will fall back > > to > > the next block. > > > > Side note, there's an issue open upstream in Meson to merge > > dependency() and find_library(), with some traction but it's not > > done > > yet. > > > > For me building from bpf-next it works fine: > > > > $ PKG_CONFIG_PATH=/tmp/bpf/lib64/pkgconfig/ ninja -C build-gcc- > > shared > > ... > > Dependency libbpf found: YES 0.0.2 > > ... > > $ lddtree build-gcc-shared/drivers/librte_pmd_af_xdp.so.1.1 > > librte_pmd_af_xdp.so.1.1 => build-gcc- > > shared/drivers/librte_pmd_af_xdp.so.1.1 (interpreter => none) > > libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 > > libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 > > libnuma.so.1 => /lib/x86_64-linux-gnu/libnuma.so.1 > > librte_ethdev.so.12 => build-gcc- > > shared/drivers/../lib/librte_ethdev.so.12 > > librte_eal.so.10 => build-gcc- > > shared/drivers/../lib/librte_eal.so.10 > > librte_kvargs.so.1 => build-gcc- > > shared/drivers/../lib/librte_kvargs.so.1 > > librte_net.so.1 => build-gcc- > > shared/drivers/../lib/librte_net.so.1 > > librte_mbuf.so.5 => build-gcc- > > shared/drivers/../lib/librte_mbuf.so.5 > > librte_mempool.so.5 => build-gcc- > > shared/drivers/../lib/librte_mempool.so.5 > > librte_ring.so.2 => build-gcc- > > shared/drivers/../lib/librte_ring.so.2 > > librte_cmdline.so.2 => build-gcc- > > shared/drivers/../lib/librte_cmdline.so.2 > > librte_meter.so.2 => build-gcc- > > shared/drivers/../lib/librte_meter.so.2 > > librte_bus_pci.so.2 => not found > > librte_pci.so.1 => build-gcc- > > shared/drivers/../lib/librte_pci.so.1 > > librte_bus_vdev.so.2 => not found > > libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 > > librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 > > libbpf.so.0 => /tmp/bpf/lib64/libbpf.so.0 > > libelf.so.1 => /lib/x86_64-linux-gnu/libelf.so.1 > > libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 > > libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 > > libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 > > ld-linux-x86-64.so.2 => /lib/x86_64-linux-gnu/ld-linux-x86- > > 64.so.2 > > > > > > +if bpf_dep.found() > > > > + build = true > > > > +else > > > > + bpf_dep = cc.find_library('libbpf', required: false) > > > > > > Also this line can't find it, in log it says "(tried pkgconfig > > > and > > > cmake)" and > > > yes there is no pkgconfig for it, any idea how 'cmake' used? > > > > The issue here is that it should be cc.find_library('bpf' - not > > 'libbpf'. I missed this when reviewing, good catch. > > > > That's because find_library just does a compilation test passing > > the > > value to the compiler as a linker flag - so right now it's passing > > -llibbpf. Fixing this line and the header line below makes it work > > without pkg-config: > > > > $ CPPFLAGS=-I/tmp/bpf/include LDFLAGS=-L/tmp/bpf/lib64 meson testt > > ... > > Dependency libbpf found: NO (tried pkgconfig and cmake) > > Library bpf found: YES > > After apply the fix in af_xdp pmd's meson.build, now I was able to > build > library for af_xdp pmd. > > $ ls drivers/ |grep xdp > a715181@@rte_pmd_af_xdp@sha > a715181@@rte_pmd_af_xdp@sta > a715181@@tmp_rte_pmd_af_xdp@sta > librte_pmd_af_xdp.a > librte_pmd_af_xdp.so > librte_pmd_af_xdp.so.1 > librte_pmd_af_xdp.so.1.1 > libtmp_rte_pmd_af_xdp.a > rte_pmd_af_xdp.pmd.c > > But I found that if I install libbpf to /usr/local/lib64 by default, > application > built by meson build will fail to run: > > $ ./dpdk-testpmd > ./dpdk-testpmd: error while loading shared libraries: libbpf.so.0: > cannot open shared object file: No such file or directory > > While install libbpf to /usr/lib doesn't have this issue (I was > testing on ubuntu system). > Is it a expected behavior? Do we need any fix for it?
Hi, That is expected and distro specific: if your distro doesn't add /usr/local/lib* to the compiler path, it also won't be in the LD_LIBRARY_PATH. So if you do: LD_LIBRARY_PATH=/usr/local/lib64 ./dpdk-testpmd It should then work. It's not related to the build system, but just to what the default paths are in the distro. -- Kind regards, Luca Boccassi

