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
|
import os,sys,shutil,time
import argparse
def find_files(top, extensions=('.c', '.cpp', '.h'), exclude=('ult', 'googletest', 'classtrace', '.git')):
res = []
for root, dirs, files in os.walk(top):
dirs[:] = [d for d in dirs if d not in exclude]
#hard code to exclude mos_ file and _utils
files = [os.path.join(root, file) for file in files if os.path.splitext(file)[1] in extensions and not file.startswith('mos_') and not file.startswith('mhw_') and not file.startswith('media_') and not file.endswith('_utils.h')]
res.extend(files)
return res
def chk_ADD_TRACE(file_path, class_info):
with open(file_path, 'r', errors="ignore") as fh:
#print(file_path)
lines = fh.readlines()
for line in lines:
if line.find('MEDIA_CLASS_DEFINE_END') > -1:
class_name = line.split('MEDIA_CLASS_DEFINE_END')[1][1:-2]
if class_name not in class_info:
class_info[class_name] = [file_path]
else:
class_info[class_name].append(file_path)
def genHeaderFile(top, offset_head_file):
with open(offset_head_file, 'r') as fh:
lines = fh.readlines()
#the head file is not the origin/empty file, already has the offset info and do not need re-generate.
if str(lines).count('#define OFFSET_') > 0:
return
files = find_files(top, ('.h'))
files.sort()
class_info = {}
for file_name in files:
chk_ADD_TRACE(file_name, class_info)
class_list = list(class_info.keys())
class_list.sort()
with open(offset_head_file, 'w') as fh:
fh.write('#ifndef __TRACE_OFFSET_H__\n')
fh.write('#define __TRACE_OFFSET_H__\n')
fh.write('enum {\n')
for idx, class_name in enumerate(class_list):
org_files = list(set(class_info[class_name]))
org_files.sort()
#for org_file in org_files:
# fh.write(" //%s\n"%org_file)
fh.write(" OFFSET_%s,\n"%(class_name))
fh.write('};\n')
fh.write('#endif //__TRACE_OFFSET_H__\n')
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Command line inputs for checking script',argument_default=argparse.SUPPRESS)
parser.add_argument('-w', '--workspace', help='workspace of driver, ', required=True)
parser.add_argument('-f', '--headfile', help='the abs path of media_trace_offset.h', required=True)
args = parser.parse_args()
time_start = time.time()
genHeaderFile(args.workspace, args.headfile)
print("generate offset spend %0.4f s"%(time.time() - time_start))
|