On Tue, Feb 15, 2022 at 02:50:48PM +0100, Karl Bonde Torp wrote: > On Tue, 15 Feb 2022 at 12:27, Bruce Richardson > <bruce.richard...@intel.com> wrote: > > > > On Tue, Feb 15, 2022 at 12:07:55PM +0100, Karl Bonde Torp wrote: > > > On Mon, 14 Feb 2022 at 14:48, Bruce Richardson > > > <bruce.richard...@intel.com> wrote: > > > > > > > > On Mon, Feb 14, 2022 at 12:43:13PM +0100, Karl Bonde Torp wrote: > > > > > When building with Meson 0.61.1 on FreeBSD some archives become > > > > > corrupted. This can be avoided by using 'llvm-ar' instead of 'ar'. > > > > > > > > > > Signed-off-by: Karl Bonde Torp <k.t...@samsung.com> > > > > > --- > > > > > > > > Can you perhaps provide some instructions or more details as to > > > > how/when you see this issue? > > > > > > Some background info: > > > I'm working on xNVMe and that depends on SPDK which in turn depends > > > on DPDK. These are includes as subprojects on github which is why the > > > FreeBSD port of DPDK is not an option for me. > > > > > > The steps I took to reproduce the issue are listed below, this assumes > > > a clean img of FreeBSD 13: > > > (I know some of them may be obvious, but I tried to avoid ambiguity) > > > > > > * install git and the pkg manager: > > > pkg install git > > > * get kernel source: > > > git clone https://git.freebsd.org/src.git /usr/src > > > * get ports: > > > git clone https://git.freebsd.org/ports.git /usr/ports > > > * install dependencies (except meson) with pkg: > > > pkg install py38-pyelftools ninja pkgconf binutils > > > * build meson 0.61.1 from port: > > > cd /usr/ports/devel/meson/ && make install clean > > > * clone dpdk repo: > > > git clone https://github.com/DPDK/dpdk.git > > > * inside dpdk folder run: > > > meson builddir && meson compile -C builddir > > > * encounter error: > > > [466/1915] Generating drivers/rte_common_cpt.pmd.c with a custom > > > command > > > FAILED: drivers/rte_common_cpt.pmd.c > > > /usr/local/bin/python3.8 ../buildtools/gen-pmdinfo-cfile.py > > > /root/dpdk/builddir/buildtools ar > > > /root/dpdk/builddir/drivers/libtmp_rte_common_cpt.a > > > drivers/rte_common_cpt.pmd.c /usr/local/bin/python3.8 > > > ../buildtools/pmdinfogen.py elf > > > ar: fatal: Unrecognized archive format: Inappropriate file type or > > > format > > > Traceback (most recent call last): > > > File "../buildtools/gen-pmdinfo-cfile.py", line 13, in <module> > > > for name in subprocess.run([ar, "t", archive], > > > stdout=subprocess.PIPE, > > > File "/usr/local/lib/python3.8/subprocess.py", line 516, in run > > > raise CalledProcessError(retcode, process.args, > > > subprocess.CalledProcessError: Command '['ar', 't', > > > '/root/dpdk/builddir/drivers/libtmp_rte_common_cpt.a']' returned > > > non-zero exit status 70. > > > > > > > A clean build of mine on FreeBSD with meson 0.61.1 didn't seem to > > > > flag up any problems and I'd like to reproduce the issue to verify the > > > > fix. > > > I'm guessing you're refering to the port of DPDK here. > > > If not I am very interested to hear how you go about this. > > > > > > > I tested with latest DPDK on a FreeBSD machine also, not using the BSD > > ports version. Unfortunately it wasn't a clean install, but still a fairly > > new one. I updated the BSD pkg config to use "latest" rather than > > "quarterly" snapshot and then ran an "pkg upgrade". This gave me meson > > 0.61.1, and updated other packages too. Build of DPDK then ran cleanly. > > > > I wonder if the version of binutils or some other package might be the > > difference. The version I have is "GNU ar (GNU Binutils) 2.37". What > > version of binutils is installed on your system? > My version of binutils is 2.37_2,1, so that is the same. > However, I think you're onto something here. When I run "ar --version" I > get "BSD ar 1.1.0 - libarchive 3.5.1". > The problem my patch aimed to solve was 'BSD ar' behaving differently > than 'GNU ar'. So if you somehow got the 'ar' command to invoke 'GNU > ar' on your system, maybe I just need to do the same.
Good point, I had missed that. BSD ar is in /usr/bin and GNU ar is installed by binutils in /usr/local/bin/ar.