1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright(c) 2010-2014 Intel Corporation 3# Copyright(c) 2022-2023 PANTHEON.tech s.r.o. 4# Copyright(c) 2022-2023 University of New Hampshire 5 6import sys 7 8 9def check_dts_python_version() -> None: 10 if sys.version_info.major < 3 or ( 11 sys.version_info.major == 3 and sys.version_info.minor < 10 12 ): 13 print( 14 RED( 15 ( 16 "WARNING: DTS execution node's python version is lower than" 17 "python 3.10, is deprecated and will not work in future releases." 18 ) 19 ), 20 file=sys.stderr, 21 ) 22 print(RED("Please use Python >= 3.10 instead"), file=sys.stderr) 23 24 25def expand_range(range_str: str) -> list[int]: 26 """ 27 Process range string into a list of integers. There are two possible formats: 28 n - a single integer 29 n-m - a range of integers 30 31 The returned range includes both n and m. Empty string returns an empty list. 32 """ 33 expanded_range: list[int] = [] 34 if range_str: 35 range_boundaries = range_str.split("-") 36 # will throw an exception when items in range_boundaries can't be converted, 37 # serving as type check 38 expanded_range.extend( 39 range(int(range_boundaries[0]), int(range_boundaries[-1]) + 1) 40 ) 41 42 return expanded_range 43 44 45def GREEN(text: str) -> str: 46 return f"\u001B[32;1m{str(text)}\u001B[0m" 47 48 49def RED(text: str) -> str: 50 return f"\u001B[31;1m{str(text)}\u001B[0m" 51 52 53class EnvVarsDict(dict): 54 def __str__(self) -> str: 55 return " ".join(["=".join(item) for item in self.items()]) 56 57 58class MesonArgs(object): 59 """ 60 Aggregate the arguments needed to build DPDK: 61 default_library: Default library type, Meson allows "shared", "static" and "both". 62 Defaults to None, in which case the argument won't be used. 63 Keyword arguments: The arguments found in meson_options.txt in root DPDK directory. 64 Do not use -D with them, for example: 65 meson_args = MesonArgs(enable_kmods=True). 66 """ 67 68 _default_library: str 69 70 def __init__(self, default_library: str | None = None, **dpdk_args: str | bool): 71 self._default_library = ( 72 f"--default-library={default_library}" if default_library else "" 73 ) 74 self._dpdk_args = " ".join( 75 ( 76 f"-D{dpdk_arg_name}={dpdk_arg_value}" 77 for dpdk_arg_name, dpdk_arg_value in dpdk_args.items() 78 ) 79 ) 80 81 def __str__(self) -> str: 82 return " ".join(f"{self._default_library} {self._dpdk_args}".split()) 83