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

Message ID 1527590616-28299-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 29, 2018, 10:43 a.m. UTC
  This is the guide for cross compiling ARM64 DPDK from X86 hosts.

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>
Reviewed-by: Marko Kovacevic <marko.kovacevic@intel.com>
Reviewed-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Reviewed-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>
---
 .../linux_gsg/cross_build_dpdk_for_arm64.rst       | 125 +++++++++++++++++++++
 doc/guides/linux_gsg/index.rst                     |   1 +
 2 files changed, 126 insertions(+)
 create mode 100644 doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
  

Comments

Kovacevic, Marko May 29, 2018, 1:33 p.m. UTC | #1
Can you supersede your v4. :)

After looking at the v5 looks good to me.

Acked-by: Marko Kovacevic <marko.kovacevic@intel.com>
  
Thomas Monjalon May 30, 2018, 7:16 p.m. UTC | #2
29/05/2018 12:43, Gavin Hu:
> This is the guide for cross compiling ARM64 DPDK from X86 hosts.
> 
> 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>
> Reviewed-by: Marko Kovacevic <marko.kovacevic@intel.com>
> Reviewed-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> Reviewed-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>

I have not reviewed the content of this patch.
And not sure Jerin and Bruce approve this v5.
Please make sure we fully agree with the patch before adding our
"Reviewed-by" tag.
  
Jerin Jacob May 30, 2018, 7:35 p.m. UTC | #3
-----Original Message-----
> Date: Tue, 29 May 2018 18:43:36 +0800
> From: Gavin Hu <gavin.hu@arm.com>
> To: dev@dpdk.org
> CC: gavin.hu@arm.com
> Subject: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross compiling
>  from x86
> X-Mailer: git-send-email 2.1.4
> 
> +   1. EXTRA_CFLAGS and EXTRA_LDFLAGS should be added to include the NUMA headers and link the library respectively,
> +   if the step :ref:`argment_the_cross_toolcain_with_numa_support` was skipped therefore the toolchain was not
> +   argmented with NUMA support.
> +
> +   2. RTE_DEVEL_BUILD has to be disabled, otherwise the numa.h file gets

If the warnings are from numa.h then please use -isystem <numa install dir> instead of disabling RTE_DEVEL_BUILD.


> +   a lot of compiling errors of Werror=cast-qual, Werror=strict-prototypes and Werror=old-style-definition.
> +   An example is given below:
> +
> +   .. code-block:: console
> +
> +      make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n
> +      RTE_DEVEL_BUILD=n EXTRA_CFLAGS="-I<numa_install_dir>/include" EXTRA_LDFLAGS=
> +      "-L<numa_install_dir>/lib -lnuma"
> +

As discussed earlier, meson cross build instruction is missing.


> diff --git a/doc/guides/linux_gsg/index.rst b/doc/guides/linux_gsg/index.rst
> index 2a7bdfe..077f930 100644
> --- a/doc/guides/linux_gsg/index.rst
> +++ b/doc/guides/linux_gsg/index.rst
> @@ -13,6 +13,7 @@ Getting Started Guide for Linux
>      intro
>      sys_reqs
>      build_dpdk
> +    cross_build_dpdk_for_arm64
>      linux_drivers
>      build_sample_apps
>      enable_func
> -- 
> 2.1.4
>
  
Gavin Hu June 4, 2018, 6:03 a.m. UTC | #4
See my inline comments:

> -----Original Message-----
> From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> Sent: Thursday, May 31, 2018 3:36 AM
> To: Gavin Hu <Gavin.Hu@arm.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> compiling from x86
>
> -----Original Message-----
> > Date: Tue, 29 May 2018 18:43:36 +0800
> > From: Gavin Hu <gavin.hu@arm.com>
> > To: dev@dpdk.org
> > CC: gavin.hu@arm.com
> > Subject: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> > compiling  from x86
> > X-Mailer: git-send-email 2.1.4
> >
> > +   1. EXTRA_CFLAGS and EXTRA_LDFLAGS should be added to include the
> NUMA headers and link the library respectively,
> > +   if the step :ref:`argment_the_cross_toolcain_with_numa_support` was
> skipped therefore the toolchain was not
> > +   argmented with NUMA support.
> > +
> > +   2. RTE_DEVEL_BUILD has to be disabled, otherwise the numa.h file
> > + gets
>
> If the warnings are from numa.h then please use -isystem <numa install dir>
> instead of disabling RTE_DEVEL_BUILD.
>
[Gavin Hu] This is a good advice, I verified it okay and can upload a new patch.

> > +   a lot of compiling errors of Werror=cast-qual, Werror=strict-prototypes
> and Werror=old-style-definition.
> > +   An example is given below:
> > +
> > +   .. code-block:: console
> > +
> > +      make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n
> CONFIG_RTE_EAL_IGB_UIO=n
> > +      RTE_DEVEL_BUILD=n EXTRA_CFLAGS="-I<numa_install_dir>/include"
> EXTRA_LDFLAGS=
> > +      "-L<numa_install_dir>/lib -lnuma"
> > +
>
> As discussed earlier, meson cross build instruction is missing.
>
[Gavin Hu] I reproduced the meson build issue Bruce reported, as shown below.
It was not introduced by gcc, nor clang, it was actually introduced by meson.build, see line #65 of http://www.dpdk.org/browse/dpdk/tree/config/meson.build
Even worse, "has_argument" is not reliable(refer here: http://mesonbuild.com/Compiler-properties.html#has-argument) for some compilers.
This is the case of gcc and clang, which caused the 4 warning options were included in the whole project, either the compiler is gcc or clang, cross or native.
This finally caused the unrecognized warning options.

I tried to disable the warning options, then the compiling got lots of noisy warnings and errors.

To fix this issue, we need to create a meson subproject  for pmdinfogen, the change is not little and I am not familiar with this.

Any comments are welcome!

[265/893] Compiling C object 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o'.
warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option]
1 warning generated.

>
> > diff --git a/doc/guides/linux_gsg/index.rst
> > b/doc/guides/linux_gsg/index.rst index 2a7bdfe..077f930 100644
> > --- a/doc/guides/linux_gsg/index.rst
> > +++ b/doc/guides/linux_gsg/index.rst
> > @@ -13,6 +13,7 @@ Getting Started Guide for Linux
> >      intro
> >      sys_reqs
> >      build_dpdk
> > +    cross_build_dpdk_for_arm64
> >      linux_drivers
> >      build_sample_apps
> >      enable_func
> > --
> > 2.1.4
> >
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.
  
Jerin Jacob June 4, 2018, 12:50 p.m. UTC | #5
-----Original Message-----
> Date: Mon, 4 Jun 2018 06:03:34 +0000
> From: Gavin Hu <Gavin.Hu@arm.com>
> To: Jerin Jacob <jerin.jacob@caviumnetworks.com>, Bruce Richardson
>  <bruce.richardson@intel.com>, Thomas Monjalon <thomas@monjalon.net>
> CC: "dev@dpdk.org" <dev@dpdk.org>
> Subject: RE: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
>  compiling from x86
> 
> See my inline comments:
> 
> > -----Original Message-----
> > From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> > Sent: Thursday, May 31, 2018 3:36 AM
> > To: Gavin Hu <Gavin.Hu@arm.com>
> > Cc: dev@dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> > compiling from x86
> >
> > -----Original Message-----
> > > Date: Tue, 29 May 2018 18:43:36 +0800
> > > From: Gavin Hu <gavin.hu@arm.com>
> > > To: dev@dpdk.org
> > > CC: gavin.hu@arm.com
> > > Subject: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> > > compiling  from x86
> > > X-Mailer: git-send-email 2.1.4
> > >
> > > +   1. EXTRA_CFLAGS and EXTRA_LDFLAGS should be added to include the
> > NUMA headers and link the library respectively,
> > > +   if the step :ref:`argment_the_cross_toolcain_with_numa_support` was
> > skipped therefore the toolchain was not
> > > +   argmented with NUMA support.
> > > +
> > > +   2. RTE_DEVEL_BUILD has to be disabled, otherwise the numa.h file
> > > + gets
> >
> > If the warnings are from numa.h then please use -isystem <numa install dir>
> > instead of disabling RTE_DEVEL_BUILD.
> >
> [Gavin Hu] This is a good advice, I verified it okay and can upload a new patch.
> 
> > > +   a lot of compiling errors of Werror=cast-qual, Werror=strict-prototypes
> > and Werror=old-style-definition.
> > > +   An example is given below:
> > > +
> > > +   .. code-block:: console
> > > +
> > > +      make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n
> > CONFIG_RTE_EAL_IGB_UIO=n
> > > +      RTE_DEVEL_BUILD=n EXTRA_CFLAGS="-I<numa_install_dir>/include"
> > EXTRA_LDFLAGS=
> > > +      "-L<numa_install_dir>/lib -lnuma"
> > > +
> >
> > As discussed earlier, meson cross build instruction is missing.
> >
> [Gavin Hu] I reproduced the meson build issue Bruce reported, as shown below.
> It was not introduced by gcc, nor clang, it was actually introduced by meson.build, see line #65 of http://www.dpdk.org/browse/dpdk/tree/config/meson.build
> Even worse, "has_argument" is not reliable(refer here: http://mesonbuild.com/Compiler-properties.html#has-argument) for some compilers.
> This is the case of gcc and clang, which caused the 4 warning options were included in the whole project, either the compiler is gcc or clang, cross or native.
> This finally caused the unrecognized warning options.
> 
> I tried to disable the warning options, then the compiling got lots of noisy warnings and errors.
> 
> To fix this issue, we need to create a meson subproject  for pmdinfogen, the change is not little and I am not familiar with this.
> 
> Any comments are welcome!


If I am not wrong, This is specific to host compiler issue with
specific version. Right? The build steps will remain same, so as far as
this patch concerned, you can add the meson build step in this patch.


> 
> [265/893] Compiling C object 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o'.
> warning: unknown warning option '-Wno-format-truncation' [-Wunknown-warning-option]
> 1 warning generated.
> 
> >
> > > diff --git a/doc/guides/linux_gsg/index.rst
> > > b/doc/guides/linux_gsg/index.rst index 2a7bdfe..077f930 100644
> > > --- a/doc/guides/linux_gsg/index.rst
> > > +++ b/doc/guides/linux_gsg/index.rst
> > > @@ -13,6 +13,7 @@ Getting Started Guide for Linux
> > >      intro
> > >      sys_reqs
> > >      build_dpdk
> > > +    cross_build_dpdk_for_arm64
> > >      linux_drivers
> > >      build_sample_apps
> > >      enable_func
> > > --
> > > 2.1.4
> > >
> 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.
  
Gavin Hu June 12, 2018, 1:27 a.m. UTC | #6
> -----Original Message-----
> From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> Sent: Monday, June 4, 2018 8:51 PM
> To: Gavin Hu <Gavin.Hu@arm.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>; Thomas Monjalon
> <thomas@monjalon.net>; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> compiling from x86
> 
> -----Original Message-----
> > Date: Mon, 4 Jun 2018 06:03:34 +0000
> > From: Gavin Hu <Gavin.Hu@arm.com>
> > To: Jerin Jacob <jerin.jacob@caviumnetworks.com>, Bruce Richardson
> > <bruce.richardson@intel.com>, Thomas Monjalon <thomas@monjalon.net>
> > CC: "dev@dpdk.org" <dev@dpdk.org>
> > Subject: RE: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> > compiling from x86
> >
> > See my inline comments:
> >
> > > -----Original Message-----
> > > From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> > > Sent: Thursday, May 31, 2018 3:36 AM
> > > To: Gavin Hu <Gavin.Hu@arm.com>
> > > Cc: dev@dpdk.org
> > > Subject: Re: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for
> > > cross compiling from x86
> > >
> > > -----Original Message-----
> > > > Date: Tue, 29 May 2018 18:43:36 +0800
> > > > From: Gavin Hu <gavin.hu@arm.com>
> > > > To: dev@dpdk.org
> > > > CC: gavin.hu@arm.com
> > > > Subject: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> > > > compiling  from x86
> > > > X-Mailer: git-send-email 2.1.4
> > > >
> > > > +   1. EXTRA_CFLAGS and EXTRA_LDFLAGS should be added to include
> > > > + the
> > > NUMA headers and link the library respectively,
> > > > +   if the step
> > > > + :ref:`argment_the_cross_toolcain_with_numa_support` was
> > > skipped therefore the toolchain was not
> > > > +   argmented with NUMA support.
> > > > +
> > > > +   2. RTE_DEVEL_BUILD has to be disabled, otherwise the numa.h
> > > > + file gets
> > >
> > > If the warnings are from numa.h then please use -isystem <numa
> > > install dir> instead of disabling RTE_DEVEL_BUILD.
> > >
> > [Gavin Hu] This is a good advice, I verified it okay and can upload a new
> patch.
> >
> > > > +   a lot of compiling errors of Werror=cast-qual,
> > > > + Werror=strict-prototypes
> > > and Werror=old-style-definition.
> > > > +   An example is given below:
> > > > +
> > > > +   .. code-block:: console
> > > > +
> > > > +      make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n
> > > CONFIG_RTE_EAL_IGB_UIO=n
> > > > +      RTE_DEVEL_BUILD=n EXTRA_CFLAGS="-
> I<numa_install_dir>/include"
> > > EXTRA_LDFLAGS=
> > > > +      "-L<numa_install_dir>/lib -lnuma"
> > > > +
> > >
> > > As discussed earlier, meson cross build instruction is missing.
> > >
> > [Gavin Hu] I reproduced the meson build issue Bruce reported, as shown
> below.
> > It was not introduced by gcc, nor clang, it was actually introduced by
> > meson.build, see line #65 of
> > http://www.dpdk.org/browse/dpdk/tree/config/meson.build
> > Even worse, "has_argument" is not reliable(refer here:
> http://mesonbuild.com/Compiler-properties.html#has-argument) for some
> compilers.
> > This is the case of gcc and clang, which caused the 4 warning options were
> included in the whole project, either the compiler is gcc or clang, cross or
> native.
> > This finally caused the unrecognized warning options.
> >
> > I tried to disable the warning options, then the compiling got lots of noisy
> warnings and errors.
> >
> > To fix this issue, we need to create a meson subproject  for pmdinfogen,
> the change is not little and I am not familiar with this.
> >
> > Any comments are welcome!
> 
> 
> If I am not wrong, This is specific to host compiler issue with specific version.
> Right? The build steps will remain same, so as far as this patch concerned,
> you can add the meson build step in this patch.
> 
[Gavin Hu] Hi Jerin, 
Sorry for late response, but I am still keeping working on that(some more patches are in process of internal review).
The host compiler issue with specific version was fixed by one of my patch. 

With all my patches applied:
For GNU Makefile, 
1. Host clang + cross gcc works
2. Host gcc + cross gcc works

For Meson/Ninja:
3. Host gcc + cross gcc works
4. Host clang + cross gcc does NOT work

The root cause of number 4  is clear, it is a meson build project issue. 
Both gcc and clang take all the 4 project arguments, but can NOT recognize this one: warning option '-Wno-format-truncation'
For more details , please have a look at line #56~#67 of this file:
http://www.dpdk.org/browse/dpdk/tree/config/meson.build 
http://mesonbuild.com/Compiler-properties.html#has-argument 

The compiling error:
clang  -Ibuildtools/pmdinfogen/pmdinfogen@exe -Ibuildtools/pmdinfogen -I../buildtools/pmdinfogen -Iconfig -I../config -I. -I../ -Ilib/librte_eal/common/include/arch/arm -I../lib/librte_eal/common/include/arch/arm -Ilib/librte_eal/common/include -I../lib/librte_eal/common/include -Ilib/librte_eal/common -I../lib/librte_eal/common -Ilib/librte_eal/linuxapp/eal/../../../librte_compat -I../lib/librte_eal/linuxapp/eal/../../../librte_compat -I../lib/librte_eal/linuxapp/eal/include -Ibuildtools/pmdinfogen/../../lib/librte_pci -I../buildtools/pmdinfogen/../../lib/librte_pci -Xclang -fcolor-diagnostics -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Werror -O3 -include rte_config.h -Wsign-compare -Wcast-qual -Wno-address-of-packed-member -Wno-format-truncation -MD -MQ 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o' -MF 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o.d' -o 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o' -c ../buildtools/pmdinfogen/pmdinfogen.c
error: unknown warning option '-Wno-format-truncation' [-Werror,-Wunknown-warning-option]
[265/1011] Compiling C object 'lib/rte_pipeline@sta/librte_pipeline_rte_table_action.c.o'.

Best Regards,
Gavin





> >
> > [265/893] Compiling C object
> 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o'.
> > warning: unknown warning option '-Wno-format-truncation'
> > [-Wunknown-warning-option]
> > 1 warning generated.
> >
> > >
> > > > diff --git a/doc/guides/linux_gsg/index.rst
> > > > b/doc/guides/linux_gsg/index.rst index 2a7bdfe..077f930 100644
> > > > --- a/doc/guides/linux_gsg/index.rst
> > > > +++ b/doc/guides/linux_gsg/index.rst
> > > > @@ -13,6 +13,7 @@ Getting Started Guide for Linux
> > > >      intro
> > > >      sys_reqs
> > > >      build_dpdk
> > > > +    cross_build_dpdk_for_arm64
> > > >      linux_drivers
> > > >      build_sample_apps
> > > >      enable_func
> > > > --
> > > > 2.1.4
> > > >
  
Gavin Hu June 12, 2018, 12:06 p.m. UTC | #7
Hi Jerin, Bruce and Thomas,

To fix the meson cross build issue(host clang + cross gcc), we have to decouple clang options from gcc ones.
Currently the options for gcc and clang tightly coupled as they share a single meson project and both added to the project arguments, this is the root cause.

I have a patch to remove the specific options from the project arguments and add it individually to C_FLAGS. It basically work, but it changed a lot of meson.build files.

Any comments are welcome.

Best Regards,
Gavin

> -----Original Message-----
> From: Gavin Hu
> Sent: Tuesday, June 12, 2018 9:28 AM
> To: 'Jerin Jacob' <jerin.jacob@caviumnetworks.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>; Thomas Monjalon
> <thomas@monjalon.net>; dev@dpdk.org; nd <nd@arm.com>
> Subject: RE: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> compiling from x86
> 
> 
> 
> > -----Original Message-----
> > From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> > Sent: Monday, June 4, 2018 8:51 PM
> > To: Gavin Hu <Gavin.Hu@arm.com>
> > Cc: Bruce Richardson <bruce.richardson@intel.com>; Thomas Monjalon
> > <thomas@monjalon.net>; dev@dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for cross
> > compiling from x86
> >
> > -----Original Message-----
> > > Date: Mon, 4 Jun 2018 06:03:34 +0000
> > > From: Gavin Hu <Gavin.Hu@arm.com>
> > > To: Jerin Jacob <jerin.jacob@caviumnetworks.com>, Bruce Richardson
> > > <bruce.richardson@intel.com>, Thomas Monjalon
> <thomas@monjalon.net>
> > > CC: "dev@dpdk.org" <dev@dpdk.org>
> > > Subject: RE: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for
> > > cross compiling from x86
> > >
> > > See my inline comments:
> > >
> > > > -----Original Message-----
> > > > From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> > > > Sent: Thursday, May 31, 2018 3:36 AM
> > > > To: Gavin Hu <Gavin.Hu@arm.com>
> > > > Cc: dev@dpdk.org
> > > > Subject: Re: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for
> > > > cross compiling from x86
> > > >
> > > > -----Original Message-----
> > > > > Date: Tue, 29 May 2018 18:43:36 +0800
> > > > > From: Gavin Hu <gavin.hu@arm.com>
> > > > > To: dev@dpdk.org
> > > > > CC: gavin.hu@arm.com
> > > > > Subject: [dpdk-dev] [PATCH v5 2/2] doc: add a guide doc for
> > > > > cross compiling  from x86
> > > > > X-Mailer: git-send-email 2.1.4
> > > > >
> > > > > +   1. EXTRA_CFLAGS and EXTRA_LDFLAGS should be added to include
> > > > > + the
> > > > NUMA headers and link the library respectively,
> > > > > +   if the step
> > > > > + :ref:`argment_the_cross_toolcain_with_numa_support` was
> > > > skipped therefore the toolchain was not
> > > > > +   argmented with NUMA support.
> > > > > +
> > > > > +   2. RTE_DEVEL_BUILD has to be disabled, otherwise the numa.h
> > > > > + file gets
> > > >
> > > > If the warnings are from numa.h then please use -isystem <numa
> > > > install dir> instead of disabling RTE_DEVEL_BUILD.
> > > >
> > > [Gavin Hu] This is a good advice, I verified it okay and can upload
> > > a new
> > patch.
> > >
> > > > > +   a lot of compiling errors of Werror=cast-qual,
> > > > > + Werror=strict-prototypes
> > > > and Werror=old-style-definition.
> > > > > +   An example is given below:
> > > > > +
> > > > > +   .. code-block:: console
> > > > > +
> > > > > +      make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n
> > > > CONFIG_RTE_EAL_IGB_UIO=n
> > > > > +      RTE_DEVEL_BUILD=n EXTRA_CFLAGS="-
> > I<numa_install_dir>/include"
> > > > EXTRA_LDFLAGS=
> > > > > +      "-L<numa_install_dir>/lib -lnuma"
> > > > > +
> > > >
> > > > As discussed earlier, meson cross build instruction is missing.
> > > >
> > > [Gavin Hu] I reproduced the meson build issue Bruce reported, as
> > > shown
> > below.
> > > It was not introduced by gcc, nor clang, it was actually introduced
> > > by meson.build, see line #65 of
> > > http://www.dpdk.org/browse/dpdk/tree/config/meson.build
> > > Even worse, "has_argument" is not reliable(refer here:
> > http://mesonbuild.com/Compiler-properties.html#has-argument) for
> some
> > compilers.
> > > This is the case of gcc and clang, which caused the 4 warning
> > > options were
> > included in the whole project, either the compiler is gcc or clang,
> > cross or native.
> > > This finally caused the unrecognized warning options.
> > >
> > > I tried to disable the warning options, then the compiling got lots
> > > of noisy
> > warnings and errors.
> > >
> > > To fix this issue, we need to create a meson subproject  for
> > > pmdinfogen,
> > the change is not little and I am not familiar with this.
> > >
> > > Any comments are welcome!
> >
> >
> > If I am not wrong, This is specific to host compiler issue with specific
> version.
> > Right? The build steps will remain same, so as far as this patch
> > concerned, you can add the meson build step in this patch.
> >
> [Gavin Hu] Hi Jerin,
> Sorry for late response, but I am still keeping working on that(some more
> patches are in process of internal review).
> The host compiler issue with specific version was fixed by one of my patch.
> 
> With all my patches applied:
> For GNU Makefile,
> 1. Host clang + cross gcc works
> 2. Host gcc + cross gcc works
> 
> For Meson/Ninja:
> 3. Host gcc + cross gcc works
> 4. Host clang + cross gcc does NOT work
> 
> The root cause of number 4  is clear, it is a meson build project issue.
> Both gcc and clang take all the 4 project arguments, but can NOT recognize
> this one: warning option '-Wno-format-truncation'
> For more details , please have a look at line #56~#67 of this file:
> http://www.dpdk.org/browse/dpdk/tree/config/meson.build
> http://mesonbuild.com/Compiler-properties.html#has-argument
> 
> The compiling error:
> clang  -Ibuildtools/pmdinfogen/pmdinfogen@exe -Ibuildtools/pmdinfogen -
> I../buildtools/pmdinfogen -Iconfig -I../config -I. -I../ -
> Ilib/librte_eal/common/include/arch/arm -
> I../lib/librte_eal/common/include/arch/arm -Ilib/librte_eal/common/include
> -I../lib/librte_eal/common/include -Ilib/librte_eal/common -
> I../lib/librte_eal/common -Ilib/librte_eal/linuxapp/eal/../../../librte_compat -
> I../lib/librte_eal/linuxapp/eal/../../../librte_compat -
> I../lib/librte_eal/linuxapp/eal/include -
> Ibuildtools/pmdinfogen/../../lib/librte_pci -
> I../buildtools/pmdinfogen/../../lib/librte_pci -Xclang -fcolor-diagnostics -pipe
> -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Werror -O3 -include
> rte_config.h -Wsign-compare -Wcast-qual -Wno-address-of-packed-member
> -Wno-format-truncation -MD -MQ
> 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o' -MF
> 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o.d' -o
> 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o' -
> c ../buildtools/pmdinfogen/pmdinfogen.c
> error: unknown warning option '-Wno-format-truncation' [-Werror,-
> Wunknown-warning-option]
> [265/1011] Compiling C object
> 'lib/rte_pipeline@sta/librte_pipeline_rte_table_action.c.o'.
> 
> Best Regards,
> Gavin
> 
> 
> 
> 
> 
> > >
> > > [265/893] Compiling C object
> > 'buildtools/pmdinfogen/pmdinfogen@exe/pmdinfogen.c.o'.
> > > warning: unknown warning option '-Wno-format-truncation'
> > > [-Wunknown-warning-option]
> > > 1 warning generated.
> > >
> > > >
> > > > > diff --git a/doc/guides/linux_gsg/index.rst
> > > > > b/doc/guides/linux_gsg/index.rst index 2a7bdfe..077f930 100644
> > > > > --- a/doc/guides/linux_gsg/index.rst
> > > > > +++ b/doc/guides/linux_gsg/index.rst
> > > > > @@ -13,6 +13,7 @@ Getting Started Guide for Linux
> > > > >      intro
> > > > >      sys_reqs
> > > > >      build_dpdk
> > > > > +    cross_build_dpdk_for_arm64
> > > > >      linux_drivers
> > > > >      build_sample_apps
> > > > >      enable_func
> > > > > --
> > > > > 2.1.4
> > > > >
  
Thomas Monjalon June 12, 2018, 12:11 p.m. UTC | #8
12/06/2018 14:06, Gavin Hu:
> Hi Jerin, Bruce and Thomas,
> 
> To fix the meson cross build issue(host clang + cross gcc), we have to decouple clang options from gcc ones.
> Currently the options for gcc and clang tightly coupled as they share a single meson project and both added to the project arguments, this is the root cause.
> 
> I have a patch to remove the specific options from the project arguments and add it individually to C_FLAGS. It basically work, but it changed a lot of meson.build files.

Why is it changing many files? Can we have a fix in a common place?

Can you show your patch please?
  

Patch

diff --git a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
new file mode 100644
index 0000000..4864f8f
--- /dev/null
+++ b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
@@ -0,0 +1,125 @@ 
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2018 ARM Corporation.
+
+Cross compile DPDK for ARM64
+============================
+This chapter describes how to cross compile DPDK for ARM64 from x86 build hosts.
+
+.. 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.
+
+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 one at the time of this writing.
+
+.. code-block:: console
+
+   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
+
+Unzip and add into the PATH
+---------------------------
+
+.. code-block:: console
+
+   tar -xvf gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz
+   export PATH=$PATH:<cross_install_dir>/gcc-linaro-7.2.1-2017.11-x86_64
+   _aarch64-linux-gnu/bin
+
+.. note::
+
+   For the host requirements and other info, refer to the release note section:
+   https://releases.linaro.org/components/toolchain/binaries/latest/
+
+Getting the prerequisite library
+--------------------------------
+
+NUMA is required by most modern machines, not needed for non-NUMA architectures.
+
+.. note::
+
+   For compiling the NUMA lib, run libtool --version to ensure the libtool version >= 2.2,
+   otherwise the compilation will fail with errors.
+
+.. code-block:: console
+
+   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 prefix=<numa install dir>
+   make install
+
+The numa header files and lib file is generated in the include and lib folder respectively under <numa install dir>.
+
+.. _argment_the_cross_toolcain_with_numa_support:
+
+Augment the cross toolchain with NUMA support
+---------------------------------------------
+
+.. note::
+
+   This way is optional, an alternative is to use extra CFLAGS and LDFLAGS, depicted in :ref:`configure_and_cross_compile_dpdk_build` below.
+
+Copy the NUMA header files to the cross compiler's include directory:
+
+.. code-block:: console
+
+   cp <numa_install_dir>/include/numa*.h <cross_install_dir>/gcc-linaro-7.2.1-2017.11
+   -x86_64_aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/include/
+   cp <numa_install_dir>/lib/libnuma.a <cross_install_dir>/gcc-linaro-7.2.1-2017.11
+   -x86_64_aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/7.2.1/
+
+.. _configure_and_cross_compile_dpdk_build:
+
+Configure and cross compile DPDK Build
+--------------------------------------
+To configure a build, choose one of the target configurations, like arm64-dpaa2-linuxapp-gcc and arm64-thunderx-linuxapp-gcc.
+
+.. code-block:: console
+
+   make config T=arm64-armv8a-linuxapp-gcc
+
+To cross-compile, without compiling the kernel modules, use the following command:
+
+.. code-block:: console
+
+   make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n
+
+To cross-compile, including the kernel modules, the kernel source tree needs to be specified by setting
+RTE_KERNELDIR:
+
+.. code-block:: console
+
+   make -j CROSS=aarch64-linux-gnu- RTE_KERNELDIR=<kernel_src_rootdir>
+   CROSS_COMPILE=aarch64-linux-gnu-
+
+To compile for non-NUMA targets, without compiling the kernel modules, use the following command:
+
+.. code-block:: console
+
+   make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n
+   CONFIG_RTE_LIBRTE_VHOST_NUMA=n CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=n
+
+.. note::
+
+   1. EXTRA_CFLAGS and EXTRA_LDFLAGS should be added to include the NUMA headers and link the library respectively,
+   if the step :ref:`argment_the_cross_toolcain_with_numa_support` was skipped therefore the toolchain was not
+   argmented with NUMA support.
+
+   2. RTE_DEVEL_BUILD has to be disabled, otherwise the numa.h file gets
+   a lot of compiling errors of Werror=cast-qual, Werror=strict-prototypes and Werror=old-style-definition.
+   An example is given below:
+
+   .. code-block:: console
+
+      make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n
+      RTE_DEVEL_BUILD=n EXTRA_CFLAGS="-I<numa_install_dir>/include" EXTRA_LDFLAGS=
+      "-L<numa_install_dir>/lib -lnuma"
+
diff --git a/doc/guides/linux_gsg/index.rst b/doc/guides/linux_gsg/index.rst
index 2a7bdfe..077f930 100644
--- a/doc/guides/linux_gsg/index.rst
+++ b/doc/guides/linux_gsg/index.rst
@@ -13,6 +13,7 @@  Getting Started Guide for Linux
     intro
     sys_reqs
     build_dpdk
+    cross_build_dpdk_for_arm64
     linux_drivers
     build_sample_apps
     enable_func