[v3,6/7] doc: guide for Windows build using MinGW-w64
Checks
Commit Message
Instructions for different toolchains presented as options on the
corresponging steps of the guide, so that common parts may be reused.
Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
doc/guides/windows_gsg/build_dpdk.rst | 63 +++++++++++++++++++++++----
1 file changed, 54 insertions(+), 9 deletions(-)
Comments
On Mon, Feb 17, 2020 at 4:03 PM Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> wrote:
>
> Instructions for different toolchains presented as options on the
> corresponging steps of the guide, so that common parts may be reused.
>
> Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
> ---
> doc/guides/windows_gsg/build_dpdk.rst | 63 +++++++++++++++++++++++----
> 1 file changed, 54 insertions(+), 9 deletions(-)
>
> diff --git a/doc/guides/windows_gsg/build_dpdk.rst b/doc/guides/windows_gsg/build_dpdk.rst
> index 6711e07e2..c77384785 100644
> --- a/doc/guides/windows_gsg/build_dpdk.rst
> +++ b/doc/guides/windows_gsg/build_dpdk.rst
> @@ -7,15 +7,22 @@ Compiling the DPDK Target from Source
> System Requirements
> -------------------
>
> -The DPDK and its applications require the Clang-LLVM C compiler
> -and Microsoft MSVC linker.
> +Building the DPDK and its applications requires one of the following
> +environments:
> +
> +* The Clang-LLVM C compiler and Microsoft MSVC linker.
> +* The MinGW-w64 toolchain (either native or cross).
> +
> The Meson Build system is used to prepare the sources for compilation
> with the Ninja backend.
> The installation of these tools is covered in this section.
>
>
> +Option 1. Clang-LLVM C Compiler and Microsoft MSVC Linker
> +---------------------------------------------------------
> +
> Install the Compiler
> ---------------------
> +~~~~~~~~~~~~~~~~~~~~
>
> Download and install the clang compiler from
> `LLVM website <http://releases.llvm.org/download.html>`_.
> @@ -25,7 +32,7 @@ For example, Clang-LLVM direct download link::
>
>
> Install the Linker
> -------------------
> +~~~~~~~~~~~~~~~~~~
>
> Download and install the Build Tools for Visual Studio to link and build the
> files on windows,
> @@ -34,6 +41,15 @@ When installing build tools, select the "Visual C++ build tools" option
> and ensure the Windows SDK is selected.
>
>
> +Option 2. MinGW-w64 Toolchain
> +-----------------------------
> +
> +Obtain the latest version from
> +`MinGW-w64 website <http://mingw-w64.org/doku.php/download>`_.
> +On Windows, install to a folder without spaces in its name, like ``C:\MinGW``.
> +This path is assumed for the rest of this guide.
> +
> +
> Install the Build System
> ------------------------
>
> @@ -43,6 +59,12 @@ A good option to choose is the MSI installer for both meson and ninja together::
>
> http://mesonbuild.com/Getting-meson.html#installing-meson-and-ninja-with-the-msi-installer%22
>
> +.. warning::
> +
> + Meson 0.47.1 is recommended, Meson 0.52 is the latest version known
> + to build DPDK successfully. Meson 0.53 has fatal issues with Clang
> + that prevent both native and cross-compilation.
> +
> Install the Backend
> -------------------
>
> @@ -56,23 +78,41 @@ Build the code
> The build environment is setup to build the EAL and the helloworld example by
> default.
>
> -Using the ninja backend
> -~~~~~~~~~~~~~~~~~~~~~~~~
> +Option 1. Native Build on Windows
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> -Specifying the compiler might be required to complete the meson command.
> +When using Clang-LLVM, specifying the compiler might be required to complete
> +the meson command:
>
> .. code-block:: console
>
> set CC=clang
>
> +When using MinGW-w64, it is sufficient to have toolchain executables in PATH:
> +
> +.. code-block:: console
> +
> + set PATH=C:\MinGW\mingw64\bin;%PATH%
> +
> To compile the examples, the flag ``-Dexamples`` is required.
>
> .. code-block:: console
>
> cd C:\Users\me\dpdk
> meson -Dexamples=helloworld build
> - cd build
> - ninja
> + ninja -C build
> +
> +Option 2. Cross-Compile with MinGW-w64
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +
> +The cross-file option must be specified for Meson.
> +Depending on the distribution, paths in this file may need adjustments.
> +
> +.. code-block:: console
> +
> + meson --cross-file config/x86/meson_mingw.txt -Dexamples=helloworld build
> + ninja -C build
> +
>
> Run the helloworld example
> ==========================
> @@ -87,3 +127,8 @@ Navigate to the examples in the build directory and run `dpdk-helloworld.exe`.
> hello from core 3
> hello from core 0
> hello from core 2
> +
> +Note for MinGW-w64: applications are linked to ``libwinpthread-1.dll``
> +by default. To run the example, either add toolchain executables directory
> +to the PATH or copy the library to the working directory.
> +Alternatively, static linking may be used (mind the LGPLv2.1 license).
> --
btw, just share my experience.
Using mingw-w64 4.0.4 on ubuntu 1604 does not work due to
lib/librte_eal.a(librte_eal_common_eal_common_thread.c.obj):eal_common_thread.c:(.text+0x1f):
undefined reference to `EnterSynchronizationBarrier'
https://sourceforge.net/p/mingw-w64/bugs/562/
This is fixed in mingw-w64 5.0.3 ubuntu 1804.
William
@@ -7,15 +7,22 @@ Compiling the DPDK Target from Source
System Requirements
-------------------
-The DPDK and its applications require the Clang-LLVM C compiler
-and Microsoft MSVC linker.
+Building the DPDK and its applications requires one of the following
+environments:
+
+* The Clang-LLVM C compiler and Microsoft MSVC linker.
+* The MinGW-w64 toolchain (either native or cross).
+
The Meson Build system is used to prepare the sources for compilation
with the Ninja backend.
The installation of these tools is covered in this section.
+Option 1. Clang-LLVM C Compiler and Microsoft MSVC Linker
+---------------------------------------------------------
+
Install the Compiler
---------------------
+~~~~~~~~~~~~~~~~~~~~
Download and install the clang compiler from
`LLVM website <http://releases.llvm.org/download.html>`_.
@@ -25,7 +32,7 @@ For example, Clang-LLVM direct download link::
Install the Linker
-------------------
+~~~~~~~~~~~~~~~~~~
Download and install the Build Tools for Visual Studio to link and build the
files on windows,
@@ -34,6 +41,15 @@ When installing build tools, select the "Visual C++ build tools" option
and ensure the Windows SDK is selected.
+Option 2. MinGW-w64 Toolchain
+-----------------------------
+
+Obtain the latest version from
+`MinGW-w64 website <http://mingw-w64.org/doku.php/download>`_.
+On Windows, install to a folder without spaces in its name, like ``C:\MinGW``.
+This path is assumed for the rest of this guide.
+
+
Install the Build System
------------------------
@@ -43,6 +59,12 @@ A good option to choose is the MSI installer for both meson and ninja together::
http://mesonbuild.com/Getting-meson.html#installing-meson-and-ninja-with-the-msi-installer%22
+.. warning::
+
+ Meson 0.47.1 is recommended, Meson 0.52 is the latest version known
+ to build DPDK successfully. Meson 0.53 has fatal issues with Clang
+ that prevent both native and cross-compilation.
+
Install the Backend
-------------------
@@ -56,23 +78,41 @@ Build the code
The build environment is setup to build the EAL and the helloworld example by
default.
-Using the ninja backend
-~~~~~~~~~~~~~~~~~~~~~~~~
+Option 1. Native Build on Windows
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Specifying the compiler might be required to complete the meson command.
+When using Clang-LLVM, specifying the compiler might be required to complete
+the meson command:
.. code-block:: console
set CC=clang
+When using MinGW-w64, it is sufficient to have toolchain executables in PATH:
+
+.. code-block:: console
+
+ set PATH=C:\MinGW\mingw64\bin;%PATH%
+
To compile the examples, the flag ``-Dexamples`` is required.
.. code-block:: console
cd C:\Users\me\dpdk
meson -Dexamples=helloworld build
- cd build
- ninja
+ ninja -C build
+
+Option 2. Cross-Compile with MinGW-w64
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The cross-file option must be specified for Meson.
+Depending on the distribution, paths in this file may need adjustments.
+
+.. code-block:: console
+
+ meson --cross-file config/x86/meson_mingw.txt -Dexamples=helloworld build
+ ninja -C build
+
Run the helloworld example
==========================
@@ -87,3 +127,8 @@ Navigate to the examples in the build directory and run `dpdk-helloworld.exe`.
hello from core 3
hello from core 0
hello from core 2
+
+Note for MinGW-w64: applications are linked to ``libwinpthread-1.dll``
+by default. To run the example, either add toolchain executables directory
+to the PATH or copy the library to the working directory.
+Alternatively, static linking may be used (mind the LGPLv2.1 license).