From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6CE31A0C41; Thu, 18 Nov 2021 11:01:02 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E6EC340687; Thu, 18 Nov 2021 11:01:01 +0100 (CET) Received: from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20]) by mails.dpdk.org (Postfix) with ESMTP id 8671D40395 for ; Thu, 18 Nov 2021 11:01:00 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by lb.pantheon.sk (Postfix) with ESMTP id 6AEFB10DD9B; Thu, 18 Nov 2021 11:00:59 +0100 (CET) X-Virus-Scanned: amavisd-new at siecit.sk Received: from lb.pantheon.sk ([127.0.0.1]) by localhost (lb.pantheon.sk [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id usp0jTuvp9oS; Thu, 18 Nov 2021 11:00:57 +0100 (CET) Received: from service-node1.lab.pantheon.local (unknown [46.229.239.141]) by lb.pantheon.sk (Postfix) with ESMTP id 5740710DD97; Thu, 18 Nov 2021 11:00:57 +0100 (CET) From: =?UTF-8?q?Juraj=20Linke=C5=A1?= To: thomas@monjalon.net, david.marchand@redhat.com, bruce.richardson@intel.com, Honnappa.Nagarahalli@arm.com, Ruifeng.Wang@arm.com, ferruh.yigit@intel.com Cc: dev@dpdk.org, =?UTF-8?q?Juraj=20Linke=C5=A1?= Subject: [PATCH v1] doc: arm64 cross docs improvements/fixes Date: Thu, 18 Nov 2021 11:00:56 +0100 Message-Id: <1637229656-21612-1-git-send-email-juraj.linkes@pantheon.tech> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Numactl cross compilation doesn't work with clang, remove it and fix the gcc cross compiler executable name. Remove CFLAGS and LDFLAGS since Meson doesn't support them well enough. Add alternatives. The names of the downloaded gcc binaries differ from those in cross files, so point this out in docs. Fixes: eb0e12c0c299 ("doc: add clang to aarch64 cross build guide") Signed-off-by: Juraj Linkeš --- Let me know if I should split the patch. --- .../linux_gsg/cross_build_dpdk_for_arm64.rst | 69 ++++++++++++++++--- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst index d59af58235..71f3f6c878 100644 --- a/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst +++ b/doc/guides/linux_gsg/cross_build_dpdk_for_arm64.rst @@ -35,13 +35,14 @@ NUMA is required by most modern machines, not needed for non-NUMA architectures. git checkout v2.0.13 -b v2.0.13 ./autogen.sh autoconf -i - ./configure --host=aarch64-linux-gnu CC= --prefix= + ./configure --host=aarch64-linux-gnu CC=aarch64-none-linux-gnu-gcc--prefix= make install .. note:: - The compiler above can be either aarch64-linux-gnu-gcc or clang. - See below for information on how to get specific compilers. + The compiler is aarch64-none-linux-gnu-gcc if you download gcc using the + below guide. If you're using a different compiler, make sure you're using + the proper executable name. The numa header files and lib file is generated in the include and lib folder respectively under ````. @@ -98,10 +99,6 @@ For aarch32:: Augment the GNU toolchain with NUMA support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. note:: - - This way is optional, an alternative is to use extra CFLAGS and LDFLAGS. - Copy the NUMA header files and lib to the cross compiler's directories: .. code-block:: console @@ -110,9 +107,62 @@ Copy the NUMA header files and lib to the cross compiler's directories: cp /lib/libnuma.a /gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/9.2.1/ cp /lib/libnuma.so /gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/lib/gcc/aarch64-none-linux-gnu/9.2.1/ +.. note:: + + Using LDFLAGS and CFLAGS is not a viable alternative to copying the files. + The Meson docs say it is not recommended, as there are many caveats to their + use with Meson, especially when rebuilding the project. A viable alternative + would be to use the ``c_args`` and ``c_link_args`` options with Meson 0.51.0 + and higher: + +.. code-block:: console + + -Dc_args=-I/include -Dc_link_args=-L/lib + + For Meson versions lower than 0.51.0, the ``c_args`` and ``c_link_args`` + options don't apply to cross compilation. However, the compiler/linker flags + may be added to cross files under [properties]: + +.. code-block:: console + + c_args = ['-I/include'] + c_link_args = ['-L/lib'] + Cross Compiling DPDK with GNU toolchain using Meson ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. note:: + + The names of gcc binaries in cross files differ from the downloaded + ones, which have an extra "-none-" in their name. Please modify the cross + file binaries accordingly when using the downloaded cross compilers. + + A example cross file with modified names and added numa paths would look + like this: + +.. code-block:: console + + [binaries] + c = 'aarch64-none-linux-gnu-gcc' + cpp = 'aarch64-none-linux-gnu-cpp' + ar = 'aarch64-none-linux-gnu-gcc-ar' + strip = 'aarch64-none-linux-gnu-strip' + pkgconfig = 'aarch64-linux-gnu-pkg-config' # the downloaded binaries + # don't contain a pkgconfig binary, so it's not modified + pcap-config = '' + + [host_machine] + system = 'linux' + cpu_family = 'aarch64' + cpu = 'armv8-a' + endian = 'little' + + [properties] + # Generate binaries that are portable across all Armv8 machines + platform = 'generic' + c_args = ['-I/include'] # replace + c_link_args = ['-L/lib'] # with your path + To cross-compile DPDK on a desired target machine we can use the following command:: @@ -120,12 +170,13 @@ command:: ninja -C cross-build For example if the target machine is aarch64 we can use the following -command:: +command, provided the cross file has been modified accordingly:: meson aarch64-build-gcc --cross-file config/arm/arm64_armv8_linux_gcc ninja -C aarch64-build-gcc -If the target machine is aarch32 we can use the following command:: +If the target machine is aarch32 we can use the following command, provided +the cross file has been modified accordingly:: meson aarch32-build --cross-file config/arm/arm32_armv8_linux_gcc ninja -C aarch32-build -- 2.20.1