[dpdk-users] Cross compile for ARM64 fails due to librte_vhost and pmdinfogen issues
Hi Michael, One of the problem, I found with Linaro gcc 4.9 toolchain for i686 (default one), that it seems to be built with older kernel headers (<3.8). This usages older linux/vhost.h file. However, we have not observed this issue with x86_64 based toolchain on 64 bit m/c. https://releases.linaro.org/14.11/components/toolchain/binaries/aarch64-linux-gnu/ Regards, Hemant > -Original Message- > From: users [mailto:users-bounces at dpdk.org] On Behalf Of Michael Wildt > Sent: Wednesday, September 14, 2016 12:05 AM > To: Thomas Monjalon > Cc: users at dpdk.org > Subject: Re: [dpdk-users] Cross compile for ARM64 fails due to librte_vhost > and > pmdinfogen issues > > Hi Thomas, > > The Linaro gcc 4.9 is correct when it gets to __GNUC_MINOR__, used a test > application. Its actually 4.9.2. > > Tried a newer Linaro tool chain, turned out to be a bit more complicated since > that does not work on RHEL6, is however a success. With Linaro 5.3 one can > cross compile dpdk fine with no errors, though the rte_byteorder.h file still > points to arm's version, but pmdinfogen builds. > > Probably should still fix both issues just to keep the base clean. > > At least I have a workaround in the interim. > > Thanks for the help. > > Thanks, > Michael > > > On Tue, Sep 13, 2016 at 11:07 AM, Thomas Monjalon > > wrote: > > > 2016-09-13 07:45, Michael Wildt: > > > Hi Thomas, > > > > > > Appreciate the assistance. Please see inline. > > > > > > > > > On Tue, Sep 13, 2016 at 5:03 AM, Thomas Monjalon < > > thomas.monjalon at 6wind.com> > > > wrote: > > > > > > > Hi, > > > > > > > > 2016-09-12 22:20, Michael Wildt: > > > > > I'm attempting to cross compile DPDK on an x86 for an ARM64 target. > > This > > > > > fails in the following areas, using latest dpdk as of 9/12. When > > > > compiling > > > > > natively there are no issues. > > > > > > > > Your analysis below seems good. > > > > Interestingly, I do not see such error (don't know why). > > > > Please could you share the commands you are using? > > > > > > > > > > Sure can. > > > > > > make config T=arm64-armv8a-linuxapp-gcc CROSS=/projects/ccxsw/ > > > toolchains/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/ > > bin/aarch64-linux-gnu- > > > ARCH=arm64 > > > > > > make T=arm64-armv8a-linuxapp-gcc CROSS=/projects/ccxsw/ > > > toolchains/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/ > > bin/aarch64-linux-gnu- > > > ARCH=arm64 RTE_KERNELDIR=/projects/kernel > > > > > > > > - librte_vhost, fails with: > > > > > > > > > > /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio- > > > > net-user.c:250:23: > > > > > error: array subscript is above array bounds [-Werror=array-bounds] > > > > >rvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_RXQ]; > > > > [...] > > > > > - buildtools/pmdinfogen, fails with: > > > > > > > > > > == Build buildtools/pmdinfogen > > > > > HOSTCC pmdinfogen.o > > > > > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h: > > > > > Assembler messages: > > > > > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_ > > byteorder.h:53: > > > > > Error: no such instruction: `rev16 %bx,%bx' > > > > [...] > > > > > - The issue is due to the rte_byteorder.h file which gets > > > > > symlink'ed with the ARM version at the beginning of the build. > > > > > The pmdinfogen is always compiled for x86 thus the asm is failing. > > > > It is definitely something to fix. > > In the meantime, you should be able to compile DPDK by using a more > > recent toolchain. This error is in: > > > > /* fix missing __builtin_bswap16 for gcc older then 4.8 */ #if > > !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) > > > > I know you are using gcc-4.9 but maybe __GNUC_MINOR__ is wrong in yours. > > > >
[dpdk-users] Cross compile for ARM64 fails due to librte_vhost and pmdinfogen issues
Hi Thomas, The Linaro gcc 4.9 is correct when it gets to __GNUC_MINOR__, used a test application. Its actually 4.9.2. Tried a newer Linaro tool chain, turned out to be a bit more complicated since that does not work on RHEL6, is however a success. With Linaro 5.3 one can cross compile dpdk fine with no errors, though the rte_byteorder.h file still points to arm's version, but pmdinfogen builds. Probably should still fix both issues just to keep the base clean. At least I have a workaround in the interim. Thanks for the help. Thanks, Michael On Tue, Sep 13, 2016 at 11:07 AM, Thomas Monjalon wrote: > 2016-09-13 07:45, Michael Wildt: > > Hi Thomas, > > > > Appreciate the assistance. Please see inline. > > > > > > On Tue, Sep 13, 2016 at 5:03 AM, Thomas Monjalon < > thomas.monjalon at 6wind.com> > > wrote: > > > > > Hi, > > > > > > 2016-09-12 22:20, Michael Wildt: > > > > I'm attempting to cross compile DPDK on an x86 for an ARM64 target. > This > > > > fails in the following areas, using latest dpdk as of 9/12. When > > > compiling > > > > natively there are no issues. > > > > > > Your analysis below seems good. > > > Interestingly, I do not see such error (don't know why). > > > Please could you share the commands you are using? > > > > > > > Sure can. > > > > make config T=arm64-armv8a-linuxapp-gcc CROSS=/projects/ccxsw/ > > toolchains/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/ > bin/aarch64-linux-gnu- > > ARCH=arm64 > > > > make T=arm64-armv8a-linuxapp-gcc CROSS=/projects/ccxsw/ > > toolchains/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/ > bin/aarch64-linux-gnu- > > ARCH=arm64 RTE_KERNELDIR=/projects/kernel > > > > > > - librte_vhost, fails with: > > > > > > > > /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio- > > > net-user.c:250:23: > > > > error: array subscript is above array bounds [-Werror=array-bounds] > > > >rvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_RXQ]; > > > [...] > > > > - buildtools/pmdinfogen, fails with: > > > > > > > > == Build buildtools/pmdinfogen > > > > HOSTCC pmdinfogen.o > > > > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h: > > > > Assembler messages: > > > > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_ > byteorder.h:53: > > > > Error: no such instruction: `rev16 %bx,%bx' > > > [...] > > > > - The issue is due to the rte_byteorder.h file which gets > > > > symlink'ed with the ARM version at the beginning of the build. > > > > The pmdinfogen is always compiled for x86 thus the asm is failing. > > It is definitely something to fix. > In the meantime, you should be able to compile DPDK by using a more recent > toolchain. This error is in: > > /* fix missing __builtin_bswap16 for gcc older then 4.8 */ > #if !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) > > I know you are using gcc-4.9 but maybe __GNUC_MINOR__ is wrong in yours. > >
[dpdk-users] Cross compile for ARM64 fails due to librte_vhost and pmdinfogen issues
Hi, 2016-09-12 22:20, Michael Wildt: > I'm attempting to cross compile DPDK on an x86 for an ARM64 target. This > fails in the following areas, using latest dpdk as of 9/12. When compiling > natively there are no issues. Your analysis below seems good. Interestingly, I do not see such error (don't know why). Please could you share the commands you are using? > - librte_vhost, fails with: > > /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio-net-user.c:250:23: > error: array subscript is above array bounds [-Werror=array-bounds] >rvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_RXQ]; [...] > - buildtools/pmdinfogen, fails with: > > == Build buildtools/pmdinfogen > HOSTCC pmdinfogen.o > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h: > Assembler messages: > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h:53: > Error: no such instruction: `rev16 %bx,%bx' [...] > - The issue is due to the rte_byteorder.h file which gets symlink'ed with > the ARM version at the beginning of the build. The pmdinfogen is always > compiled for x86 thus the asm is failing. I see two ways to address this. > > - Have pmdinfogen always pickup the local OS rte_byteorder.h file, not the > ARCH symlinked one. Yes we should not use DPDK headers in pmdinfogen or have a host-include/. > - Fix pmdinfogen such that it gets cross compiled correctly as the rest of > the code. Did a quick attempt by setting the HOST_OS to 0, , but then it > fails at the HOST_LD. No it must be native because it is part of the build system.
[dpdk-users] Cross compile for ARM64 fails due to librte_vhost and pmdinfogen issues
Hi Thomas, Appreciate the assistance. Please see inline. On Tue, Sep 13, 2016 at 5:03 AM, Thomas Monjalon wrote: > Hi, > > 2016-09-12 22:20, Michael Wildt: > > I'm attempting to cross compile DPDK on an x86 for an ARM64 target. This > > fails in the following areas, using latest dpdk as of 9/12. When > compiling > > natively there are no issues. > > Your analysis below seems good. > Interestingly, I do not see such error (don't know why). > Please could you share the commands you are using? > Sure can. make config T=arm64-armv8a-linuxapp-gcc CROSS=/projects/ccxsw/ toolchains/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/bin/aarch64-linux-gnu- ARCH=arm64 make T=arm64-armv8a-linuxapp-gcc CROSS=/projects/ccxsw/ toolchains/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/bin/aarch64-linux-gnu- ARCH=arm64 RTE_KERNELDIR=/projects/kernel Thanks, Michael > > - librte_vhost, fails with: > > > > /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio- > net-user.c:250:23: > > error: array subscript is above array bounds [-Werror=array-bounds] > >rvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_RXQ]; > [...] > > - buildtools/pmdinfogen, fails with: > > > > == Build buildtools/pmdinfogen > > HOSTCC pmdinfogen.o > > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h: > > Assembler messages: > > /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h:53: > > Error: no such instruction: `rev16 %bx,%bx' > [...] > > - The issue is due to the rte_byteorder.h file which gets symlink'ed > with > > the ARM version at the beginning of the build. The pmdinfogen is always > > compiled for x86 thus the asm is failing. I see two ways to address this. > > > > - Have pmdinfogen always pickup the local OS rte_byteorder.h file, not > the > > ARCH symlinked one. > > Yes we should not use DPDK headers in pmdinfogen or have a host-include/. > > > - Fix pmdinfogen such that it gets cross compiled correctly as the rest > of > > the code. Did a quick attempt by setting the HOST_OS to 0, , but then it > > fails at the HOST_LD. > > No it must be native because it is part of the build system. >
[dpdk-users] Cross compile for ARM64 fails due to librte_vhost and pmdinfogen issues
Dear DPDK, I'm attempting to cross compile DPDK on an x86 for an ARM64 target. This fails in the following areas, using latest dpdk as of 9/12. When compiling natively there are no issues. - librte_vhost, fails with: /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio-net-user.c:250:23: error: array subscript is above array bounds [-Werror=array-bounds] rvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_RXQ]; ^ /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio-net-user.c:251:23: error: array subscript is above array bounds [-Werror=array-bounds] tvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_TXQ]; ^ /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio-net-user.c:250:23: error: array subscript is above array bounds [-Werror=array-bounds] rvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_RXQ]; ^ /projects/dpdk_latest/lib/librte_vhost/vhost_user/virtio-net-user.c:251:23: error: array subscript is above array bounds [-Werror=array-bounds] tvq = dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_TXQ]; ^ cc1: all warnings being treated as errors - This is only a warning on the downloadable release v16.07 tar ball, not error as in this case. I'm guessing the compile flags must have been changed. - buildtools/pmdinfogen, fails with: == Build buildtools/pmdinfogen HOSTCC pmdinfogen.o /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h: Assembler messages: /projects/dpdk_test_wget/dpdk-16.07/build/include/rte_byteorder.h:53: Error: no such instruction: `rev16 %bx,%bx' /projects/dpdk_test_wget/dpdk-16.07/mk/internal/rte.compile-pre.mk:138: recipe for target 'pmdinfogen.o' failed make[3]: *** [pmdinfogen.o] Error 1 /projects/dpdk_test_wget/dpdk-16.07/mk/rte.subdir.mk:61: recipe for target 'pmdinfogen' failed make[2]: *** [pmdinfogen] Error 2 /projects/dpdk_test_wget/dpdk-16.07/mk/rte.sdkbuild.mk:78: recipe for target 'buildtools' failed make[1]: *** [buildtools] Error 2 /projects/dpdk_test_wget/dpdk-16.07/mk/rte.sdkroot.mk:123: recipe for target 'all' failed make: *** [all] Error 2 - The issue is due to the rte_byteorder.h file which gets symlink'ed with the ARM version at the beginning of the build. The pmdinfogen is always compiled for x86 thus the asm is failing. I see two ways to address this. - Have pmdinfogen always pickup the local OS rte_byteorder.h file, not the ARCH symlinked one. - Fix pmdinfogen such that it gets cross compiled correctly as the rest of the code. Did a quick attempt by setting the HOST_OS to 0, , but then it fails at the HOST_LD. If the pmdinfogen commit is removed, by checking out v16.07-rc1 followed by a fresh build, then it is possible to cross compile for ARM64 fine. Used tool chain: gcc-linaro-aarch64-linux-gnu-4.9-2014.09 It would be great if the forum could help with patches on these two issues. Regards, Michael