[PATCH v2 2/2] dts: add build arguments to test run configuration
Koushik Bhargav Nimoji
knimoji at iol.unh.edu
Thu Jun 18 20:59:41 CEST 2026
Recheck-request: github-robot: build
On Tue, Jun 9, 2026 at 10:36 AM Koushik Bhargav Nimoji <knimoji at iol.unh.edu>
wrote:
> This patch adds the ability to specify build arguments when building DPDK
> through DTS. Doing so allows users to build DPDK with the desired build
> arguments, which allows for a more configurable DTS run.
>
> Signed-off-by: Koushik Bhargav Nimoji <knimoji at iol.unh.edu>
> ---
> dts/configurations/test_run.example.yaml | 13 +++++++++++++
> dts/framework/config/test_run.py | 2 ++
> dts/framework/remote_session/dpdk.py | 12 ++++++++----
> dts/framework/utils.py | 21 ++++++++++++++++++++-
> 4 files changed, 43 insertions(+), 5 deletions(-)
>
> diff --git a/dts/configurations/test_run.example.yaml
> b/dts/configurations/test_run.example.yaml
> index ee641f5dce..0bd5151801 100644
> --- a/dts/configurations/test_run.example.yaml
> +++ b/dts/configurations/test_run.example.yaml
> @@ -16,6 +16,8 @@
> # `precompiled_build_dir` or `build_options` can be defined, but
> not both.
> # `compiler_wrapper`:
> # Optional, adds a compiler wrapper if present.
> +# `build_args`:
> +# The additional build arguments to be used when building DPDK.
> # `func_traffic_generator` & `perf_traffic_generator`:
> # Define `func_traffic_generator` when `func` set to true.
> # Define `perf_traffic_generator` when `perf` set to true.
> @@ -40,6 +42,17 @@ dpdk:
> # the combination of the following two makes CC="ccache gcc"
> compiler: gcc
> compiler_wrapper: ccache # see `Optional Fields`
> + # arguments to be used when building DPDK
> + # build_args:
> + # c_args:
> + # - O3
> + # - g
> + # b_coverage:
> + # - "true"
> + # buildtype:
> + # - release
> + # flags:
> + # - strip
> func_traffic_generator:
> type: SCAPY
> # perf_traffic_generator:
> diff --git a/dts/framework/config/test_run.py
> b/dts/framework/config/test_run.py
> index 76e24d1785..eab12041fc 100644
> --- a/dts/framework/config/test_run.py
> +++ b/dts/framework/config/test_run.py
> @@ -191,6 +191,8 @@ class DPDKBuildOptionsConfiguration(FrozenModel):
> #: This string will be put in front of the compiler when executing
> the build. Useful for adding
> #: wrapper commands, such as ``ccache``.
> compiler_wrapper: str = ""
> + #: The build arguments to build dpdk with
> + build_args: dict[str, list[str]] = {}
>
>
> class DPDKUncompiledBuildConfiguration(BaseDPDKBuildConfiguration):
> diff --git a/dts/framework/remote_session/dpdk.py
> b/dts/framework/remote_session/dpdk.py
> index 865f97f6ca..4dc0ceeaaf 100644
> --- a/dts/framework/remote_session/dpdk.py
> +++ b/dts/framework/remote_session/dpdk.py
> @@ -100,8 +100,8 @@ def setup(self) -> None:
> match self.config:
> case
> DPDKPrecompiledBuildConfiguration(precompiled_build_dir=build_dir):
> self._set_remote_dpdk_build_dir(build_dir)
> - case
> DPDKUncompiledBuildConfiguration(build_options=build_options):
> - self._configure_dpdk_build(build_options)
> + case DPDKUncompiledBuildConfiguration():
> + self._configure_dpdk_build(self.config.build_options)
> self._build_dpdk()
>
> def teardown(self) -> None:
> @@ -277,16 +277,20 @@ def _build_dpdk(self) -> None:
> `remote_dpdk_tree_path` has already been set on the SUT node.
> """
> ctx = get_ctx()
> + build_options = getattr(self.config, "build_options")
> # If the SUT is an ice driver device, make sure to build with 16B
> descriptors.
> if (
> ctx.topology.sut_port_ingress
> and ctx.topology.sut_port_ingress.config.os_driver == "ice"
> ):
> meson_args = MesonArgs(
> - default_library="static", libdir="lib",
> c_args="-DRTE_NET_INTEL_USE_16BYTE_DESC"
> + build_options.build_args,
> + default_library="static",
> + libdir="lib",
> + c_args="-DRTE_NET_INTEL_USE_16BYTE_DESC",
> )
> else:
> - meson_args = MesonArgs(default_library="static", libdir="lib")
> + meson_args = MesonArgs(build_options.build_args,
> default_library="static", libdir="lib")
>
> if SETTINGS.code_coverage:
> meson_args._add_arg("-Db_coverage=true")
> diff --git a/dts/framework/utils.py b/dts/framework/utils.py
> index 38da88cd9c..e0ed35066c 100644
> --- a/dts/framework/utils.py
> +++ b/dts/framework/utils.py
> @@ -99,10 +99,16 @@ class MesonArgs:
>
> _default_library: str
>
> - def __init__(self, default_library: str | None = None, **dpdk_args:
> str | bool):
> + def __init__(
> + self,
> + dpdk_build_args: dict[str, list[str]],
> + default_library: str | None = None,
> + **dpdk_args: str | bool,
> + ):
> """Initialize the meson arguments.
>
> Args:
> + dpdk_build_args: The DPDK build arguments specified in the
> test run configuration file.
> default_library: The default library type, Meson supports
> ``shared``, ``static`` and
> ``both``. Defaults to :data:`None`, in which case the
> argument won't be used.
> dpdk_args: The arguments found in ``meson_options.txt`` in
> root DPDK directory.
> @@ -121,6 +127,19 @@ def __init__(self, default_library: str | None =
> None, **dpdk_args: str | bool):
> )
> )
>
> + arguments = []
> + for option, value in dpdk_build_args.items():
> + if option == "c_args":
> + values = " ".join(f"-{val}" for val in value)
> + arguments.append(f'-D{option}="{values}"')
> + elif option == "flags":
> + values = " ".join(f"--{val}" for val in value)
> + arguments.append(values)
> + else:
> + arguments.append(f" -D{option}={value[0]}")
> +
> + self._dpdk_args = " ".join(arguments)
> +
> def __str__(self) -> str:
> """The actual args."""
> return " ".join(f"{self._default_library}
> {self._dpdk_args}".split())
> --
> 2.54.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20260618/d8697c35/attachment.htm>
More information about the dev
mailing list