[dpdk-dev] [PATCH] doc: add instructions on build using meson

Shreyansh Jain shreyansh.jain at nxp.com
Fri Dec 22 06:16:34 CET 2017


Hi Bruce,

some trivial comments inline...

On Thursday 21 December 2017 09:42 PM, Bruce Richardson wrote:
> Add a document describing how to configure, build and install DPDK using
> meson and ninja. Document includes references to official installation docs
> using make, and points out the experimental nature of the build.
> 
> Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
> ---
>   INSTALL.meson | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Just out of curiosity, why not make it a rst file, as part of standard 
DPDK documentation? Or, maybe until meson is experimental this readme 
can suffice - but, we should have rst eventually - isn't it.

>   1 file changed, 177 insertions(+)
>   create mode 100644 INSTALL.meson
> 
> diff --git a/INSTALL.meson b/INSTALL.meson
> new file mode 100644
> index 000000000..f5ded1f7e
> --- /dev/null
> +++ b/INSTALL.meson
> @@ -0,0 +1,177 @@
> +INSTALLING DPDK USING THE MESON BUILD SYSTEM
> +---------------------------------------------
> +
> +NOTE: Compiling and installing DPDK using ``meson`` and ``ninja``, rather
> +than using ``make`` (GNU make) is EXPERIMENTAL. Official builds of DPDK
> +should always be done using ``make``, as described in the ``Getting Started
> +Guide`` documentation, and at "http://dpdk.org/doc/quick-start".
> +
> +Summary
> +--------
> +For many platforms, compiling and installing DPDK should work using the
> +following set of commands:
> +
> +	meson build
> +	cd build
> +	ninja
> +	ninja install
> +
> +This will compile DPDK in the ``build`` subdirectory, and then install the
> +resulting libraries, drivers and header files onto the system - generally
> +in /usr/local. A package-config file, ``libdpdk.pc``,  for DPDK will also
> +be install to allow ease of compiling and linking with applications.
   ^^^^^^^^^^
'be installed'

> +
> +After installation, to use DPDK, the necessary CFLAG and LDFLAG variables
> +can be got from pkg-config.
> +	pkg-config --cflags libdpdk
> +	pkg-config --libs libdpdk
> +
> +More detail on each of these steps can be got from the following sections.
> +
> +
> +Getting the Tools
> +------------------
> +
> +The ``meson`` tool is used to configure a DPDK build. On most Linux
> +distributions this can be got using the local package management system,
> +e.g. ``dnf install meson`` or ``apt-get install meson``. If meson is not
> +available as a suitable package, it can also be installed using the Python
> +3 ``pip`` tool, e.g. ``pip3 install meson``. Version 0.42 of meson is
> +recommended - if the version packaged is too old, the latest version is
> +generally available from "pip".
> +
> +The other dependency for building is the ``ninja`` tool, which acts similar
> +to make and performs the actual build using information provided by meson.
> +Installing meson will in many cases also install ninja, but, if not already
                       ^^^^^^^^^^^^^^^^^^
                     will, in many cases, also install ninja ...

> +installed, it too is generally packaged by most Linux distributions. If not
> +available as a package, it can be downloaded as source or binary from
> +https://ninja-build.org/
> +
> +
> +Configuring the Build
> +----------------------
> +
> +To configure a build, run the meson tool, passing the path to the directory
> +to be used for the build e.g. ``meson build``, as shown above. If calling
> +meson not from with the root directory of the DPDK project the path to the
         ^^^^^^^^^^^^^^^^^^^^^^^^
         needs correction/rephrase

> +root directory should be passed as the first parameter, and the build path
> +as the second. For example, to build DPDK in /tmp/dpdk-build:
> +
> +	user at host:/tmp$ meson ~user/dpdk dpdk-build
> +
> +Meson will then configure the build based on settings in the project's
> +meson.build files, and by checking the build environment for e.g. compiler
> +properties or the presence of dependencies, such as libpcap, or openssl
> +libcrypto libraries. Once done, meson writes a ``build.ninja`` file in the
> +build directory to be used to do the build itself when ninja is called
'.' is missing above.

> +
> +Tuning of the build is possible, both as part of the original meson call,
> +or subsequently using ``meson configure`` command (``mesonconf`` in some
> +older versions). Some options, such as ``buildtype``, or ``werror`` are
> +built into meson, while others, such as ``max_lcores``, or the list of
> +examples to build, are DPDK-specific. To have a list of all options
> +available run ``meson configure`` in the build directory.
> +
> +Examples of adjusting the defaults when doing initial meson configuration.
> +Project-specific options are passed used -Doption=value.
> +
> +	meson --werror werrorbuild  # build with warnings as errors
> +
> +	meson --buildtype=debug debugbuild  # build for debugging
> +
> +	meson -Dexamples=l3fwd,l2fwd fwdbuild  # build some examples as
> +					# part of the normal DPDK build
> +
> +	meson -Dmax_lcores=8 smallbuild  # scale build for smaller systems
> +
> +Examples of setting the same options using meson configure
> +
> +	meson configure -Dwerror=true
> +
> +	meson configure -Dbuildtype=debug
> +
> +	meson configure -Dexamples=l3fwd,l2fwd
> +
> +	meson configure -Dmax_lcores=8
> +
> +NOTE: once meson has been run to configure a build in a directory, it
> +cannot be run again on the same directory. Instead ``meson configure``
> +should be used to change the build settings within the directory, and when
> +``ninja`` is called to do the build itself, it will trigger the necessary
> +re-scan from meson.
> +
> +As well as those settings taken from ``meson configure``, other options
> +such as the compiler to use can be passed via environment variables. For
> +example:
> +
> +	CC=clang meson clang-build
> +
> +NOTE: for more comprehensive overriding of compilers or other environment
> +settings, the tools for cross-compilation may be considered. However, for
> +basic overriding of the compiler etc., the above form works as expected.
> +
> +
> +Performing the Build
> +---------------------
> +
> +Use ``ninja`` to perform the actual build inside the build folder
> +previously configured. In most cases no arguments are necessary.
> +
> +Ninja accepts a number of flags which are similar to make. For example, to
> +call ninja from outside the build folder, you can use ``ninja -C build``.
> +Ninja also runs parallel builds by default, but you can limit this using
> +the ``-j`` flag, e.g. ``ninja -j1 -v`` to do the build one step at a time,
> +printing each command on a new line as it runs.
> +
> +
> +Installing the Compiled Files
> +------------------------------
> +
> +Use ``ninja install`` to install the required DPDK files onto the system.
> +The install prefix defaults to ``/usr/local`` but can be used as with other
> +options above. The environment variable ``DEST_DIR`` can be used to adjust
> +the root directory for the install, for example when packaging.
> +
> +With the base install directory, the individual directories for libraries
> +and headers are configurable. By default, the following will be the
> +installed layout:
> +
> +	headers -> /usr/local/include
> +	libraries -> /usr/local/lib64
> +	drivers -> /usr/local/lib64/dpdk/drivers
> +	libdpdk.pc -> /usr/local/lib64/pkgconfig
> +
> +For the drivers, these will also be symbolically linked into the library
> +install directory also, so that ld.so can find them in cases where one
                     ^^^^^^
                multiple 'also'

> +driver may depend on another, e.g. a NIC PMD depending upon the PCI bus
> +driver. Within the EAL, the default search path for drivers will be set to
> +the configured driver install path, so dynamically-linked applications can
> +be run without having to pass in ``-d /path/to/driver`` options for
> +standard drivers.
> +
> +
> +Using the DPDK within an Application
> +-------------------------------------
> +
> +To compile and link against DPDK within an application, pkg-config should
> +be used to query the correct parameters. Examples of this are given in the
> +makefiles for the example applications included with DPDK. They demonstrate
> +how to link either against the DPDK shared libraries, or against the static
> +versions of the same.
> +
> +From examples/helloworld/Makefile:
> +
> +	PC_FILE := $(shell pkg-config --path libdpdk)
> +	CFLAGS += -O3 $(shell pkg-config --cflags libdpdk)
> +	LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk)
> +	LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk)
> +
> +	build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
> +		$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
> +
> +	build/$(APP)-static: $(SRCS-y) Makefile $(PC_FILE) | build
> +		$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_STATIC)
> +
> +	build:
> +		@mkdir -p $@
> +
> 

I will give this a try in a couple of days and post if I find any issues.
Thanks.


More information about the dev mailing list