xref: /dpdk/dts/framework/utils.py (revision 680d8a240f1687d455fd62f1376e80d0278c9bc6)
1812c4071SJuraj Linkeš# SPDX-License-Identifier: BSD-3-Clause
2812c4071SJuraj Linkeš# Copyright(c) 2010-2014 Intel Corporation
3*680d8a24SJuraj Linkeš# Copyright(c) 2022-2023 PANTHEON.tech s.r.o.
4*680d8a24SJuraj Linkeš# Copyright(c) 2022-2023 University of New Hampshire
5812c4071SJuraj Linkeš
657c58bf8SJuraj Linkešimport sys
757c58bf8SJuraj Linkeš
857c58bf8SJuraj Linkeš
957c58bf8SJuraj Linkešdef check_dts_python_version() -> None:
1057c58bf8SJuraj Linkeš    if sys.version_info.major < 3 or (
1157c58bf8SJuraj Linkeš        sys.version_info.major == 3 and sys.version_info.minor < 10
1257c58bf8SJuraj Linkeš    ):
1357c58bf8SJuraj Linkeš        print(
1457c58bf8SJuraj Linkeš            RED(
1557c58bf8SJuraj Linkeš                (
1657c58bf8SJuraj Linkeš                    "WARNING: DTS execution node's python version is lower than"
1757c58bf8SJuraj Linkeš                    "python 3.10, is deprecated and will not work in future releases."
1857c58bf8SJuraj Linkeš                )
1957c58bf8SJuraj Linkeš            ),
2057c58bf8SJuraj Linkeš            file=sys.stderr,
2157c58bf8SJuraj Linkeš        )
2257c58bf8SJuraj Linkeš        print(RED("Please use Python >= 3.10 instead"), file=sys.stderr)
2357c58bf8SJuraj Linkeš
24812c4071SJuraj Linkeš
25812c4071SJuraj Linkešdef GREEN(text: str) -> str:
26812c4071SJuraj Linkeš    return f"\u001B[32;1m{str(text)}\u001B[0m"
27812c4071SJuraj Linkeš
28812c4071SJuraj Linkeš
29812c4071SJuraj Linkešdef RED(text: str) -> str:
30812c4071SJuraj Linkeš    return f"\u001B[31;1m{str(text)}\u001B[0m"
31*680d8a24SJuraj Linkeš
32*680d8a24SJuraj Linkeš
33*680d8a24SJuraj Linkešclass EnvVarsDict(dict):
34*680d8a24SJuraj Linkeš    def __str__(self) -> str:
35*680d8a24SJuraj Linkeš        return " ".join(["=".join(item) for item in self.items()])
36*680d8a24SJuraj Linkeš
37*680d8a24SJuraj Linkeš
38*680d8a24SJuraj Linkešclass MesonArgs(object):
39*680d8a24SJuraj Linkeš    """
40*680d8a24SJuraj Linkeš    Aggregate the arguments needed to build DPDK:
41*680d8a24SJuraj Linkeš    default_library: Default library type, Meson allows "shared", "static" and "both".
42*680d8a24SJuraj Linkeš               Defaults to None, in which case the argument won't be used.
43*680d8a24SJuraj Linkeš    Keyword arguments: The arguments found in meson_options.txt in root DPDK directory.
44*680d8a24SJuraj Linkeš               Do not use -D with them, for example:
45*680d8a24SJuraj Linkeš               meson_args = MesonArgs(enable_kmods=True).
46*680d8a24SJuraj Linkeš    """
47*680d8a24SJuraj Linkeš
48*680d8a24SJuraj Linkeš    _default_library: str
49*680d8a24SJuraj Linkeš
50*680d8a24SJuraj Linkeš    def __init__(self, default_library: str | None = None, **dpdk_args: str | bool):
51*680d8a24SJuraj Linkeš        self._default_library = (
52*680d8a24SJuraj Linkeš            f"--default-library={default_library}" if default_library else ""
53*680d8a24SJuraj Linkeš        )
54*680d8a24SJuraj Linkeš        self._dpdk_args = " ".join(
55*680d8a24SJuraj Linkeš            (
56*680d8a24SJuraj Linkeš                f"-D{dpdk_arg_name}={dpdk_arg_value}"
57*680d8a24SJuraj Linkeš                for dpdk_arg_name, dpdk_arg_value in dpdk_args.items()
58*680d8a24SJuraj Linkeš            )
59*680d8a24SJuraj Linkeš        )
60*680d8a24SJuraj Linkeš
61*680d8a24SJuraj Linkeš    def __str__(self) -> str:
62*680d8a24SJuraj Linkeš        return " ".join(f"{self._default_library} {self._dpdk_args}".split())
63