1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
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()
|