On Mon, Feb 17, 2020 at 4:03 PM Dmitry Kozlyuk <dmitry.kozl...@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.kozl...@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