[dpdk-dev] [PATCH 2/2] doc: add a guide doc for cross compiling from x86

Gavin Hu Gavin.Hu at arm.com
Fri May 25 09:00:03 CEST 2018


Hi Bruce and Jerin,

Thanks for your comments, some inline feedback for your comments.

Any further comments are welcome.

Best Regards,
Gavin

-----Original Message-----
From: Bruce Richardson <bruce.richardson at intel.com>
Sent: Thursday, May 24, 2018 9:21 PM
To: Jerin Jacob <jerin.jacob at caviumnetworks.com>
Cc: Gavin Hu <Gavin.Hu at arm.com>; dev at dpdk.org
Subject: Re: [dpdk-dev] [PATCH 2/2] doc: add a guide doc for cross compiling from x86

On Thu, May 24, 2018 at 04:47:56PM +0530, Jerin Jacob wrote:
> -----Original Message-----
> > Date: Wed, 23 May 2018 23:38:47 -0400
> > From: Gavin Hu <gavin.hu at arm.com>
> > To: dev at dpdk.org
> > Subject: [dpdk-dev] [PATCH 2/2] doc: add a guide doc for cross
> > compiling  from x86
> > X-Mailer: git-send-email 2.1.4
> >
> > Signed-off-by: Gavin Hu <gavin.hu at arm.com>
> > Reviewed-by: Steve Capper <Steve.Capper at arm.com>
> > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli at arm.com>
>
> In addition to comments from Marko,
>
> > ---
> >  doc/cross_compiling_sdk.txt | 58
> > +++++++++++++++++++++++++++++++++++++++++++++
>
> I think, instead of keeping it as a orphan document, IMO, it should
> linked with https://dpdk.org/doc/guides/ I think, it can go a new
> section or "HowTo Guides" section, So that in future armv7 and/or
> PowerPC cross compilation details can be added.
>

I can move it to "HowTo Guides", but all the guides are not for compiling.
On the contrary, there are two other docs for compiling in this place
To maintain relevancy and consistency, should we keep it here?
http://dpdk.org/browse/dpdk/tree/doc/build-sdk-meson.txt
http://dpdk.org/browse/dpdk/tree/doc/build-sdk-quick.txt


> >  1 file changed, 58 insertions(+)
> >  create mode 100644 doc/cross_compiling_sdk.txt
> >
> > diff --git a/doc/cross_compiling_sdk.txt
> > b/doc/cross_compiling_sdk.txt new file mode 100644 index
> > 0000000..aa08871
> > --- /dev/null
> > +++ b/doc/cross_compiling_sdk.txt
> > @@ -0,0 +1,58 @@
> > +How to cross compile DPDK for ARM64
> > +-----------------------------------
> > +
> > +NOTE: Whilst it is recommended to natively build DPDK on ARM64
> > +(just like with x86), it is also possible to cross-build DPDK for
> > +ARM64.  An
> > +ARM64 cross compile GNU toolchain is used for this, which currently
> > +requires the NUMA libraries to be integrated. Following are the steps to follow.
> > +
> > +1. Obtain the cross tool chain
> > +------------------------------
> > +The latest cross compile tool chain can be downloaded from:
> > +https://releases.linaro.org/components/toolchain/binaries/latest/aa
> > +rch64-linux-gnu/ Following is the step to get the version 7.2.1,
> > +latest so far.
> > +$ wget
> > +https://releases.linaro.org/components/toolchain/binaries/latest/
> > +aarch64-linux-gnu/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu
> > +.tar.xz
> > +
> > +2. Unzip and add into the PATH
> > +------------------------------
> > +$ tar -xvf gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz
> > +$ export PATH=$PATH:<install
> > +dir>/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/bin
> > +Note: For the host requirements and ohter info, refer to the release note section:
> > +https://releases.linaro.org/components/toolchain/binaries/latest/
> > +
> > +3. Getting the prerequisite library
> > +-----------------------------------
> > +-- NUMA
> > +--Prequisite: make sure the installed libtool version >= 2.2(run
> > +libtool --version to check), otherwise the compilation will fail with errors.
> > +$ git clone https://github.com/numactl/numactl.git
> > +$ cd numactl
> > +$ git checkout v2.0.11 -b v2.0.11
> > +$ ./autogen.sh
> > +$ autoconf -i
> > +$ ./configure --host=x86_64 CC=aarch64-linux-gnu-gcc $ make
> > +
> > +4. Install the numa header and lib
> > +----------------------------------
> > +Copy the header files to the cross compiler's include directory:
> > +$ cp numa*.h <install
> > +dir>/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/bin/../aarch
> > +64-linux-gnu/libc/usr/include/ Copy the numa lib to the cross
> > +compiler;s lib directory:
> > +$ cp .libs/libnuma.a <install
> > +dir>/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/lib/gcc/aarc
> > +h64-linux-gnu/7.2.1/
>
> Installing numactrl header files and library files to toolchain area
> does not looks very correct. IMO, You can use --prefix option in
> numactrl to install to separate directory and add the include details
> through EXTRA_CFLAGS and EXTRA_LDFLAGS. This will help in meson for
> pkg-config related case as well.


I simply tried, it did not work out yet, will try again.

> > +
> > +5. Configuring the DPDK Build
> > +-----------------------------
> > +To configure a build, follow the build-sdk-quick.txt file to select
> > +the target configuration.
> > +$ make config T=arm64-armv8a-linuxapp-gcc
>
> IMO, You can mentioned about other armv8 target such as
> defconfig_arm64-dpaa2-linuxapp-gcc/defconfig_arm64-thunderx-linuxapp-g
> cc for optimized build specific to target.

Ok, I will fix it in next version.

> > +6. Cross Compiling DPDK
> > +-----------------------
> > +To cross-compile DPDK for ARM64 target machine, without compiling
> > +the kernel modules, use the following
> > +command:
> > +$ make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n
> > +CONFIG_RTE_EAL_IGB_UIO=n
>
> I think, you could mention to set CONFIG_RTE_LIBRTE_VHOST_NUMA=n and
> CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=n for NON numa systems to avoid
> building numactl for single node systems.

Ok, I will fix it in next version.

> > +
> > +To cross-compile DPDK for ARM64, including the kernel modules, the kernel source tree is required.
> > +Set RTE_KERNEL_SRC_ROOTDIR to the kernel source tree folder and use the following command:
> > +$ make -j CROSS=aarch64-linux-gnu- RTE_KERNELDIR=KERNEL_SRC_ROOTDIR
> > +CROSS_COMPILE=aarch64-linux-gnu-
>
> You could add meson cross build details too.
>
> export MESON_PARAMS='-Dwerror=true
> -Dexamples=bond,bbdev_app,cmdline,distributor,eventdev_pipeline,exception_path,flow_classify,flow_filtering,helloworld,ip_fragmentation,ip_pipeline,ip_reassembly,ipsec-secgw,ipv4_multicast,kni,l2fwd,l2fwd-crypto,l2fwd-jobstats,l2fwd-keepalive,l3fwd,l3fwd-acl,l3fwd-power,l3fwd-vf,link_status_interrupt,load_balancer,packet_ordering,ptpclient,qos_meter,qos_sched,rxtx_callbacks,service_cores,skeleton,tep_termination,timer,vhost,vhost_scsi,vmdq,vmdq_dcb'
>

This long list of examples can now be shortened to "all", since meson now has each app detecting if it can be compiled or not.

> meson --default-library=static $MESON_PARAMS --cross-file
> config/arm/arm64_armv8_linuxapp_gcc arm64-static-build ninja -C
> arm64-static-build
>

There is already a section for meson cross compiling in http://dpdk.org/browse/dpdk/tree/doc/build-sdk-meson.txt
This doc will cover GNU Makefile cross gcc.
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.


More information about the dev mailing list