3. Compiling the DPDK Target from Source
3.1. System Requirements
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.
3.3. Option 2. MinGW-w64 Toolchain
Obtain the latest version from
On Windows, install to a folder without spaces in its name, like
This path is assumed for the rest of this guide.
Version 4.0.4 for Ubuntu 16.04 cannot be used due to a MinGW-w64 bug.
3.4. Install the Build System
Download and install the build system from Meson website. A good option to choose is the MSI installer for both meson and ninja together:
Recommended version is either Meson 0.47.1 (baseline) or the latest release.
3.5. Install the Backend
If using Ninja, download and install the backend from Ninja website or install along with the meson build system.
3.6. Build the code
The build environment is setup to build the EAL and the helloworld example by default.
3.6.1. Option 1. Native Build on Windows
When using Clang-LLVM, specifying the compiler might be required to complete the meson command:
When using MinGW-w64, it is sufficient to have toolchain executables in PATH:
To compile the examples, the flag
-Dexamples is required.
cd C:\Users\me\dpdk meson -Dexamples=helloworld build ninja -C build
3.6.2. 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.
meson --cross-file config/x86/meson_mingw.txt -Dexamples=helloworld build ninja -C build
4. Run the helloworld example
Navigate to the examples in the build directory and run dpdk-helloworld.exe.
cd C:\Users\me\dpdk\build\examples dpdk-helloworld.exe hello from core 1 hello from core 3 hello from core 0 hello from core 2
Note for MinGW-w64: applications are linked to
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).