1 #!/bin/python 2 # usage: 3 # cat clAmdFft.h | $0 4 import sys, re; 5 6 from common import remove_comments, getTokens, getParameters, postProcessParameters 7 8 9 try: 10 if len(sys.argv) > 1: 11 f = open(sys.argv[1], "r") 12 else: 13 f = sys.stdin 14 except: 15 sys.exit("ERROR. Can't open input file") 16 17 fns = [] 18 19 while True: 20 line = f.readline() 21 if len(line) == 0: 22 break 23 assert isinstance(line, str) 24 line = line.strip() 25 if line.startswith('CLAMDFFTAPI'): 26 line = re.sub(r'\n', r'', line) 27 while True: 28 nl = f.readline() 29 nl = nl.strip() 30 nl = re.sub(r'\n', r'', nl) 31 if len(nl) == 0: 32 break; 33 line += ' ' + nl 34 35 line = remove_comments(line) 36 37 parts = getTokens(line) 38 39 fn = {} 40 modifiers = [] 41 ret = [] 42 calling = [] 43 44 i = 0 45 while True: 46 if parts[i] == "CLAMDFFTAPI": 47 modifiers.append(parts[i]) 48 else: 49 break 50 i += 1 51 while (i < len(parts)): 52 if not parts[i] == '(': 53 ret.append(parts[i]) 54 else: 55 del ret[-1] 56 i -= 1 57 break 58 i += 1 59 60 fn['modifiers'] = [] # modifiers 61 fn['ret'] = ret 62 fn['calling'] = calling 63 64 name = parts[i]; i += 1; 65 fn['name'] = name 66 print 'name=' + name 67 68 params = getParameters(i, parts) 69 70 if len(params) > 0 and params[0] == 'void': 71 del params[0] 72 73 fn['params'] = params 74 # print 'params="'+','.join(params)+'"' 75 76 fns.append(fn) 77 78 f.close() 79 80 print 'Found %d functions' % len(fns) 81 82 postProcessParameters(fns) 83 84 from pprint import pprint 85 pprint(fns) 86 87 from common import * 88 89 filterFileName='./filter/opencl_clamdfft_functions.list' 90 numEnabled = readFunctionFilter(fns, filterFileName) 91 92 functionsFilter = generateFilterNames(fns) 93 filter_file = open(filterFileName, 'wb') 94 filter_file.write(functionsFilter) 95 96 ctx = {} 97 ctx['CLAMDFFT_REMAP_ORIGIN'] = generateRemapOrigin(fns) 98 ctx['CLAMDFFT_REMAP_DYNAMIC'] = generateRemapDynamic(fns) 99 ctx['CLAMDFFT_FN_DECLARATIONS'] = generateFnDeclaration(fns) 100 101 sys.stdout = open('../../../../include/opencv2/core/opencl/runtime/autogenerated/opencl_clamdfft.hpp', 'wb') 102 ProcessTemplate('template/opencl_clamdfft.hpp.in', ctx) 103 104 ctx['CL_FN_ENUMS'] = generateEnums(fns, 'OPENCLAMDFFT_FN') 105 ctx['CL_FN_SWITCH'] = generateTemplates(23, 'openclamdfft_fn', 'openclamdfft_check_fn', '') 106 ctx['CL_FN_ENTRY_DEFINITIONS'] = generateStructDefinitions(fns, 'openclamdfft_fn', 'OPENCLAMDFFT_FN') 107 ctx['CL_FN_ENTRY_LIST'] = generateListOfDefinitions(fns, 'openclamdfft_fn') 108 ctx['CL_NUMBER_OF_ENABLED_FUNCTIONS'] = '// number of enabled functions: %d' % (numEnabled) 109 110 sys.stdout = open('../autogenerated/opencl_clamdfft_impl.hpp', 'wb') 111 ProcessTemplate('template/opencl_clamdfft_impl.hpp.in', ctx) 112