1*ba62d9d3SAndroid Build Coastguard Workerimport os,sys,shutil,time 2*ba62d9d3SAndroid Build Coastguard Workerimport argparse 3*ba62d9d3SAndroid Build Coastguard Worker 4*ba62d9d3SAndroid Build Coastguard Workerdef find_files(top, extensions=('.c', '.cpp', '.h'), exclude=('ult', 'googletest', 'classtrace', '.git')): 5*ba62d9d3SAndroid Build Coastguard Worker res = [] 6*ba62d9d3SAndroid Build Coastguard Worker for root, dirs, files in os.walk(top): 7*ba62d9d3SAndroid Build Coastguard Worker dirs[:] = [d for d in dirs if d not in exclude] 8*ba62d9d3SAndroid Build Coastguard Worker #hard code to exclude mos_ file and _utils 9*ba62d9d3SAndroid Build Coastguard Worker 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')] 10*ba62d9d3SAndroid Build Coastguard Worker res.extend(files) 11*ba62d9d3SAndroid Build Coastguard Worker return res 12*ba62d9d3SAndroid Build Coastguard Worker 13*ba62d9d3SAndroid Build Coastguard Workerdef chk_ADD_TRACE(file_path, class_info): 14*ba62d9d3SAndroid Build Coastguard Worker with open(file_path, 'r', errors="ignore") as fh: 15*ba62d9d3SAndroid Build Coastguard Worker #print(file_path) 16*ba62d9d3SAndroid Build Coastguard Worker lines = fh.readlines() 17*ba62d9d3SAndroid Build Coastguard Worker for line in lines: 18*ba62d9d3SAndroid Build Coastguard Worker if line.find('MEDIA_CLASS_DEFINE_END') > -1: 19*ba62d9d3SAndroid Build Coastguard Worker class_name = line.split('MEDIA_CLASS_DEFINE_END')[1][1:-2] 20*ba62d9d3SAndroid Build Coastguard Worker if class_name not in class_info: 21*ba62d9d3SAndroid Build Coastguard Worker class_info[class_name] = [file_path] 22*ba62d9d3SAndroid Build Coastguard Worker else: 23*ba62d9d3SAndroid Build Coastguard Worker class_info[class_name].append(file_path) 24*ba62d9d3SAndroid Build Coastguard Worker 25*ba62d9d3SAndroid Build Coastguard Workerdef genHeaderFile(top, offset_head_file): 26*ba62d9d3SAndroid Build Coastguard Worker with open(offset_head_file, 'r') as fh: 27*ba62d9d3SAndroid Build Coastguard Worker lines = fh.readlines() 28*ba62d9d3SAndroid Build Coastguard Worker #the head file is not the origin/empty file, already has the offset info and do not need re-generate. 29*ba62d9d3SAndroid Build Coastguard Worker if str(lines).count('#define OFFSET_') > 0: 30*ba62d9d3SAndroid Build Coastguard Worker return 31*ba62d9d3SAndroid Build Coastguard Worker 32*ba62d9d3SAndroid Build Coastguard Worker files = find_files(top, ('.h')) 33*ba62d9d3SAndroid Build Coastguard Worker files.sort() 34*ba62d9d3SAndroid Build Coastguard Worker 35*ba62d9d3SAndroid Build Coastguard Worker class_info = {} 36*ba62d9d3SAndroid Build Coastguard Worker for file_name in files: 37*ba62d9d3SAndroid Build Coastguard Worker chk_ADD_TRACE(file_name, class_info) 38*ba62d9d3SAndroid Build Coastguard Worker 39*ba62d9d3SAndroid Build Coastguard Worker class_list = list(class_info.keys()) 40*ba62d9d3SAndroid Build Coastguard Worker class_list.sort() 41*ba62d9d3SAndroid Build Coastguard Worker 42*ba62d9d3SAndroid Build Coastguard Worker with open(offset_head_file, 'w') as fh: 43*ba62d9d3SAndroid Build Coastguard Worker fh.write('#ifndef __TRACE_OFFSET_H__\n') 44*ba62d9d3SAndroid Build Coastguard Worker fh.write('#define __TRACE_OFFSET_H__\n') 45*ba62d9d3SAndroid Build Coastguard Worker fh.write('enum {\n') 46*ba62d9d3SAndroid Build Coastguard Worker for idx, class_name in enumerate(class_list): 47*ba62d9d3SAndroid Build Coastguard Worker org_files = list(set(class_info[class_name])) 48*ba62d9d3SAndroid Build Coastguard Worker org_files.sort() 49*ba62d9d3SAndroid Build Coastguard Worker #for org_file in org_files: 50*ba62d9d3SAndroid Build Coastguard Worker # fh.write(" //%s\n"%org_file) 51*ba62d9d3SAndroid Build Coastguard Worker fh.write(" OFFSET_%s,\n"%(class_name)) 52*ba62d9d3SAndroid Build Coastguard Worker fh.write('};\n') 53*ba62d9d3SAndroid Build Coastguard Worker fh.write('#endif //__TRACE_OFFSET_H__\n') 54*ba62d9d3SAndroid Build Coastguard Worker 55*ba62d9d3SAndroid Build Coastguard Worker 56*ba62d9d3SAndroid Build Coastguard Workerif __name__ == "__main__": 57*ba62d9d3SAndroid Build Coastguard Worker parser = argparse.ArgumentParser(description='Command line inputs for checking script',argument_default=argparse.SUPPRESS) 58*ba62d9d3SAndroid Build Coastguard Worker parser.add_argument('-w', '--workspace', help='workspace of driver, ', required=True) 59*ba62d9d3SAndroid Build Coastguard Worker parser.add_argument('-f', '--headfile', help='the abs path of media_trace_offset.h', required=True) 60*ba62d9d3SAndroid Build Coastguard Worker args = parser.parse_args() 61*ba62d9d3SAndroid Build Coastguard Worker time_start = time.time() 62*ba62d9d3SAndroid Build Coastguard Worker genHeaderFile(args.workspace, args.headfile) 63*ba62d9d3SAndroid Build Coastguard Worker print("generate offset spend %0.4f s"%(time.time() - time_start)) 64