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

Message ID 1527133127-29407-3-git-send-email-gavin.hu@arm.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Gavin Hu May 24, 2018, 3:38 a.m. UTC
  Signed-off-by: Gavin Hu <gavin.hu@arm.com>
Reviewed-by: Steve Capper <Steve.Capper@arm.com>
Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
---
 doc/cross_compiling_sdk.txt | 58 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 doc/cross_compiling_sdk.txt
  

Comments

Kovacevic, Marko May 24, 2018, 10:45 a.m. UTC | #1
> Signed-off-by: Gavin Hu <gavin.hu@arm.com>
> Reviewed-by: Steve Capper <Steve.Capper@arm.com>
> Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
> ---
>  doc/cross_compiling_sdk.txt | 58
> +++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 58 insertions(+)
>  create mode 100644 doc/cross_compiling_sdk.txt
>

 
<...>

> +
> +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:

Spelling:  other / other

> +https://releases.linaro.org/components/toolchain/binaries/latest/
> +
> +3. Getting the prerequisite library
> +-----------------------------------
> +-- NUMA
> +--Prequisite: make sure the installed libtool version >= 2.2(run

Spelling: Prequisite /  Prerequisite

<...>

> +4. Install the numa header and lib
> +----------------------------------

Make numa / NUMA above

> +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/../aarch64-l
> +inux-gnu/libc/usr/include/ Copy the numa lib to the cross compiler;s
> +lib directory:

Copy numa / Copy NUMA

cross compiler;s  / compilers


<...>

Reviewed-by: Marko Kovacevic <marko.kovacevic@intel.com>
  
Kovacevic, Marko May 24, 2018, 10:47 a.m. UTC | #2
Auto spell corrected my text

Spelling:  ohter / other

> > +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:
> 
> Spelling:  other / other
  
Jerin Jacob May 24, 2018, 11:17 a.m. UTC | #3
-----Original Message-----
> Date: Wed, 23 May 2018 23:38:47 -0400
> From: Gavin Hu <gavin.hu@arm.com>
> To: dev@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@arm.com>
> Reviewed-by: Steve Capper <Steve.Capper@arm.com>
> Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@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.


>  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/aarch64-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/../aarch64-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/aarch64-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.

> +
> +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-gcc
for optimized build specific to target.

> +
> +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.

> +
> +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'

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

> -- 
> 2.1.4
>
  
Bruce Richardson May 24, 2018, 1:20 p.m. UTC | #4
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@arm.com>
> > To: dev@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@arm.com>
> > Reviewed-by: Steve Capper <Steve.Capper@arm.com>
> > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@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.
> 
> 
> >  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/aarch64-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/../aarch64-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/aarch64-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.
> 
> > +
> > +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-gcc
> for optimized build specific to target.
> 
> > +
> > +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.
> 
> > +
> > +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
> 

/Bruce
  
Thomas Monjalon May 24, 2018, 1:54 p.m. UTC | #5
24/05/2018 13:17, Jerin Jacob:
> -----Original Message-----
> > Date: Wed, 23 May 2018 23:38:47 -0400
> > From: Gavin Hu <gavin.hu@arm.com>
> > To: dev@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@arm.com>
> > Reviewed-by: Steve Capper <Steve.Capper@arm.com>
> > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@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 think the right location is http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html

This patch is far from being ready, so please send the patch 1,
which is a fix, separately.
  
Jerin Jacob May 24, 2018, 5:16 p.m. UTC | #6
-----Original Message-----
> Date: Thu, 24 May 2018 15:54:00 +0200
> From: Thomas Monjalon <thomas@monjalon.net>
> To: Gavin Hu <gavin.hu@arm.com>
> Cc: dev@dpdk.org, Jerin Jacob <jerin.jacob@caviumnetworks.com>
> Subject: Re: [dpdk-dev] [PATCH 2/2] doc: add a guide doc for cross
>  compiling from x86
> 
> 24/05/2018 13:17, Jerin Jacob:
> > -----Original Message-----
> > > Date: Wed, 23 May 2018 23:38:47 -0400
> > > From: Gavin Hu <gavin.hu@arm.com>
> > > To: dev@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@arm.com>
> > > Reviewed-by: Steve Capper <Steve.Capper@arm.com>
> > > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@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 think the right location is http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html

I think, that link is specific to Linux.What about freebsd ? That reason why I thought to have neutral location.
No strong opinion on the location though.

> 
> This patch is far from being ready, so please send the patch 1,
> which is a fix, separately.
> 
>
  
Thomas Monjalon May 24, 2018, 8:31 p.m. UTC | #7
24/05/2018 19:16, Jerin Jacob:
> From: Thomas Monjalon <thomas@monjalon.net>
> > 24/05/2018 13:17, Jerin Jacob:
> > > From: Gavin Hu <gavin.hu@arm.com>
> > > >  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 think the right location is http://dpdk.org/doc/guides/linux_gsg/build_dpdk.html
> 
> I think, that link is specific to Linux.

Right

> What about freebsd ?

I think FreeBSD + ARM is a niche.
We can start with Linux and re-organize these guides to be common later.

> That reason why I thought to have neutral location.
> No strong opinion on the location though.
  
Gavin Hu May 25, 2018, 7 a.m. UTC | #8
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@intel.com>
Sent: Thursday, May 24, 2018 9:21 PM
To: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Cc: Gavin Hu <Gavin.Hu@arm.com>; dev@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@arm.com>
> > To: dev@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@arm.com>
> > Reviewed-by: Steve Capper <Steve.Capper@arm.com>
> > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@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.
  

Patch

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/aarch64-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/../aarch64-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/aarch64-linux-gnu/7.2.1/
+
+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
+
+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
+
+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-