Home | History | Annotate | Download | only in generator
      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