08949cb884
* Run pre-commit's whitespace related hooks on projects/amdsmi In order for pre-commit to be useful, everything needs to meet a common baseline. * Add whitespace back to Changelog for formatting --------- Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org> Signed-off-by: Maisam Arif <Maisam.Arif@amd.com>
100 sor
3.2 KiB
Python
100 sor
3.2 KiB
Python
import re
|
|
import argparse
|
|
|
|
def get_platforms(file_name):
|
|
# removing the new line characters
|
|
with open(file_name) as f:
|
|
lines = [line.rstrip() for line in f]
|
|
|
|
platform_map = {}
|
|
platform_lines = ""
|
|
function_line = ""
|
|
for line in lines:
|
|
if "@platform" in line:
|
|
platform_lines += line.replace("*","").lstrip()
|
|
if platform_lines =="":
|
|
continue
|
|
l = line.lstrip()
|
|
if len(l) == 0:
|
|
continue
|
|
if l[0] == '*' or l[0]== '#' or (len(l)>1 and l[0] == '/' and l[1] == '*'):
|
|
if function_line != "":
|
|
func = ' '.join(function_line.split())
|
|
platforms = re.findall(r"\{(.*?)\}", platform_lines)
|
|
for p in platforms:
|
|
if p not in platform_map:
|
|
platform_map[p]=[func]
|
|
else:
|
|
platform_map[p].append(func)
|
|
platform_lines = ""
|
|
function_line = ""
|
|
continue
|
|
function_line += line + " "
|
|
return platform_map
|
|
|
|
# string in list1 but not in list2
|
|
def diff(list1, list2):
|
|
result = []
|
|
for l1 in list1:
|
|
if l1 not in list2:
|
|
result.append(l1)
|
|
return result
|
|
|
|
def common(list1, list2):
|
|
result = []
|
|
for l1 in list1:
|
|
if l1 in list2:
|
|
result.append(l1)
|
|
return result
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description='amdsmi platform classifier')
|
|
parser.add_argument('--platforms', default=False, action='store_true', help='list supported platforms')
|
|
parser.add_argument('--list', default="", metavar="platform" , help='List function in a platform')
|
|
parser.add_argument('--diff' , default=None, metavar="platform", nargs=2, help='Find the APIs in platform1 but not in platform2')
|
|
parser.add_argument('--common' , default=None, metavar="platform", nargs=2, help='Find the common APIs of two platforms')
|
|
|
|
file_name="../include/amd_smi/amdsmi.h"
|
|
args = parser.parse_args()
|
|
platform_map=get_platforms(file_name)
|
|
if args.platforms:
|
|
for p in platform_map:
|
|
print (p)
|
|
exit(0)
|
|
|
|
if args.list:
|
|
if args.list not in platform_map:
|
|
print("Unknown platform ", args.list)
|
|
exit(1)
|
|
for f in platform_map[args.list]:
|
|
print (f)
|
|
exit(0)
|
|
|
|
if args.diff != None:
|
|
if args.diff[0] not in platform_map or args.diff[1] not in platform_map:
|
|
print("Unknown platforms ", args.diff)
|
|
exit(1)
|
|
platforms0 = platform_map[args.diff[0]]
|
|
platforms1 = platform_map[args.diff[1]]
|
|
result = diff(platforms0, platforms1)
|
|
print("APIs in", args.diff[0], "but not in", args.diff[1])
|
|
for f in result:
|
|
print(f)
|
|
exit(0)
|
|
|
|
|
|
if args.common != None:
|
|
if args.common[0] not in platform_map or args.common[1] not in platform_map:
|
|
print("Unknown platforms ", args.common)
|
|
exit(1)
|
|
platforms0 = platform_map[args.common[0]]
|
|
platforms1 = platform_map[args.common[1]]
|
|
result = common(platforms0, platforms1)
|
|
print("APIs in both ", args.common[0], "and", args.common[1])
|
|
for f in result:
|
|
print(f)
|
|
exit(0)
|
|
|
|
parser.print_help()
|
|
|