1 .. SPDX-License-Identifier: BSD-3-Clause
2 Copyright(c) 2018 ARM Corporation.
4 Cross compile DPDK for ARM64
5 ============================
6 This chapter describes how to cross compile DPDK for ARM64 from x86 build hosts.
10 Whilst it is recommended to natively build DPDK on ARM64 (just
11 like with x86), it is also possible to cross-build DPDK for ARM64. An
12 ARM64 cross compile GNU toolchain is used for this.
14 Obtain the cross tool chain
15 ---------------------------
16 The latest cross compile tool chain can be downloaded from:
17 https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads.
19 It is always recommended to check and get the latest compiler tool from the page and use
20 it to generate better code. As of this writing 8.3-2019.03 is the newest, the following
21 description is an example of this version.
23 .. code-block:: console
25 wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
27 Unzip and add into the PATH
28 ---------------------------
30 .. code-block:: console
32 tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
33 export PATH=$PATH:<cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
37 For the host requirements and other info, refer to the release note section: https://releases.linaro.org/components/toolchain/binaries/
39 .. _arm_cross_build_getting_the_prerequisite_library:
41 Getting the prerequisite library
42 --------------------------------
44 NUMA is required by most modern machines, not needed for non-NUMA architectures.
48 For compiling the NUMA lib, run libtool --version to ensure the libtool version >= 2.2,
49 otherwise the compilation will fail with errors.
51 .. code-block:: console
53 git clone https://github.com/numactl/numactl.git
55 git checkout v2.0.13 -b v2.0.13
58 ./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc --prefix=<numa install dir>
61 The numa header files and lib file is generated in the include and lib folder respectively under <numa install dir>.
63 .. _augment_the_cross_toolchain_with_numa_support:
65 Augment the cross toolchain with NUMA support
66 ---------------------------------------------
70 This way is optional, an alternative is to use extra CFLAGS and LDFLAGS.
72 Copy the NUMA header files and lib to the cross compiler's directories:
74 .. code-block:: console
76 cp <numa_install_dir>/include/numa*.h <cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include/
77 cp <numa_install_dir>/lib/libnuma.a <cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.3.0/
78 cp <numa_install_dir>/lib/libnuma.so <cross_install_dir>/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.3.0/
80 .. _configure_and_cross_compile_dpdk_build:
85 Meson depends on pkgconfig to find the dependencies.
86 The package ``pkg-config-aarch64-linux-gnu`` is required for aarch64.
87 To install it in Ubuntu::
89 sudo apt-get install pkg-config-aarch64-linux-gnu
91 To cross-compile DPDK on a desired target machine we can use the following
94 meson cross-build --cross-file <target_machine_configuration>
97 For example if the target machine is arm64 we can use the following
100 meson arm64-build --cross-file config/arm/arm64_armv8_linux_gcc
103 Supported cross-compilation targets
104 -----------------------------------
106 If you wish to build for a target which is not among the current cross-files,
107 you may use various combinations of implementer/part number::
109 Supported implementers:
110 'generic': Generic armv8
113 '0x50': Ampere Computing
114 '0x56': Marvell ARMADA
117 Supported part_numbers for generic:
118 'generic': valid for all armv8-a architectures (unoptimized portable build)
120 Supported part_numbers for 0x41, 0x56, dpaa:
128 Supported part_numbers for 0x43:
135 Supported part_numbers for 0x50: