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