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

Message ID 1527490428-15540-2-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 28, 2018, 6:53 a.m. UTC
  This is guild for cross compiling for ARM64 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>
---
 doc/guides/howto/index.rst                         |  1 +
 .../linux_gsg/cross_build_dpdk_for_arm64.rst       | 70 ++++++++++++++++++++++
 doc/guides/linux_gsg/index.rst                     |  1 +
 3 files changed, 72 insertions(+)
 create mode 100644 doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
  

Comments

Bruce Richardson May 28, 2018, 1:25 p.m. UTC | #1
On Mon, May 28, 2018 at 02:53:48AM -0400, Gavin Hu wrote:
> This is guild for cross compiling for ARM64 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>
> ---
Can you also include details of cross-compiling using meson from the meson
build text file too?

/Bruce
  
Kovacevic, Marko May 28, 2018, 4:01 p.m. UTC | #2
> This is guild for cross compiling for ARM64 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>
> ---

Hi Gavin,

After reviewing your file in the .rst format it doesn't look good, the whole formatting is wrong and
unreadable. As you have the wrong headers and sections. You have code block and command line arguments 
added in everywhere making it not look good. Also you have added an index to a file in the howto that doesn't exist.

dpdk/doc/guides/howto/index.rst:7: WARNING: toctree contains reference to nonexisting document u'howto/    cross_compile_sdk_for_arm64'
dpdk/doc/guides/linux_gsg/index.rst:9: WARNING: toctree contains reference to nonexisting document u'linux_gsg/    cross_build_dpdk_for_arm64'
dpdk/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst: WARNING: document isn't included in any toctree

Id advise you go to this link and familiarize yourself with the proper way of writing in the rst format.
And also try and view the html version of your file before you send it out to make sure it looks ok.

If you adding command line arguments into text use this ``make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n``

http://dpdk.org/doc/guides/contributing/documentation.html

Marko K
  
Gavin Hu May 29, 2018, 1:24 a.m. UTC | #3
-----Original Message-----
From: Bruce Richardson <bruce.richardson@intel.com>
Sent: Monday, May 28, 2018 9:25 PM
To: Gavin Hu <Gavin.Hu@arm.com>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v2 2/2] doc: add a guide doc for cross compiling from x86

On Mon, May 28, 2018 at 02:53:48AM -0400, Gavin Hu wrote:
> This is guild for cross compiling for ARM64 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>
> ---
Can you also include details of cross-compiling using meson from the meson build text file too?
[Gavin Hu] My pleasure, I will work on it, it will be in a separate patch.

/Bruce
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/guides/howto/index.rst b/doc/guides/howto/index.rst
index e13a090..35ac151 100644
--- a/doc/guides/howto/index.rst
+++ b/doc/guides/howto/index.rst
@@ -8,6 +8,7 @@  HowTo Guides
     :maxdepth: 2
     :numbered:
 
+	cross_compile_sdk_for_arm64
     lm_bond_virtio_sriov
     lm_virtio_vhost_user
     flow_bifurcation
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..2abf2e8
--- /dev/null
+++ b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst
@@ -0,0 +1,70 @@ 
+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 other info, refer to the release note section:
+https://releases.linaro.org/components/toolchain/binaries/latest/
+
+3. Getting the prerequisite library
+-----------------------------------
+-- NUMA (Note: Required by most modern machines, not needed for non-NUMA ones)
+--Prerequisite: for compiling NUMA, 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 prefix=<numa install dir>
+$ make install
+You will get numa*.h files under <numa install dir>/include and libnuma.a under <numa install dor>/lib.
+
+4. Augument the cross gcc toolchain with the NUMA header and lib
+----------------------------------------------------------------
+Note: This way is optional, the alternative way is to use extra CFLAGS and LDFLAGS, depicted in Step 6)*
+Copy the NUMA header files to the cross compiler's include directory:
+$ cp <numa install dir>/include/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 <numa install dir>/lib/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 one of the target configurations,like
+arm64-dpaa2-linuxapp-gcc and arm64-thunderx-linuxapp-gcc for optimized build specific to target.
+
+$ 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-
+
+Note:
+1. If the target machine is non-NUMA, add the following to the command:
+CONFIG_RTE_LIBRTE_VHOST_NUMA=n CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=n
+2. If Step 4 is skipped and the toolchain was not augumented with the NUMA headers and library.
+Add EXTRA CFLAGS and LDFLAGS for the NUMA header and library. RTE_DEVEL_BUILD has to be disabled, otherwise
+the numa.h file will get a lot of Werror=cast-qual, Werror=strict-prototypes and Werror=old-style-definition
+compiling errors.
+EXTRA_CFLAGS="-I/opt/cccc/include" EXTRA_LDFLAGS="-L<numa install dir>/lib -lnuma" RTE_DEVEL_BUILD=n
diff --git a/doc/guides/linux_gsg/index.rst b/doc/guides/linux_gsg/index.rst
index 2a7bdfe..c5b1695 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