opencv/modules/ocl/src/cl_runtime/generator/parser_clamdblas.py
Alexander Alekhin 212ad97100 ocl: dynamic load of OpenCL libraries
Support functions from OpenCL 1.1 / OpenCL 1.2
2013-10-02 18:32:33 +04:00

108 lines
2.8 KiB
Python

#!/bin/python
# usage:
# cat clAmdBlas.h | $0
import sys, re;
from common import remove_comments, getTokens, getParameters, postProcessParameters
try:
if len(sys.argv) > 1:
f = open(sys.argv[1], "r")
else:
f = sys.stdin
except:
sys.exit("ERROR. Can't open input file")
fns = []
while True:
line = f.readline()
if len(line) == 0:
break
assert isinstance(line, str)
line = line.strip()
parts = line.split();
if (line.startswith('clAmd') or line.startswith('cl_') or line == 'void') and len(line.split()) == 1 and line.find('(') == -1:
fn = {}
modifiers = []
ret = []
calling = []
i = 0
while (i < len(parts)):
if parts[i].startswith('CL_'):
modifiers.append(parts[i])
else:
break
i += 1
while (i < len(parts)):
if not parts[i].startswith('CL_'):
ret.append(parts[i])
else:
break
i += 1
while (i < len(parts)):
calling.append(parts[i])
i += 1
fn['modifiers'] = [] # modifiers
fn['ret'] = ret
fn['calling'] = calling
# print 'modifiers='+' '.join(modifiers)
# print 'ret='+' '.join(type)
# print 'calling='+' '.join(calling)
# read block of lines
line = f.readline()
while True:
nl = f.readline()
nl = nl.strip()
nl = re.sub(r'\n', r'', nl)
if len(nl) == 0:
break;
line += ' ' + nl
line = remove_comments(line)
parts = getTokens(line)
i = 0;
name = parts[i]; i += 1;
fn['name'] = name
print 'name=' + name
params = getParameters(i, parts)
fn['params'] = params
# print 'params="'+','.join(params)+'"'
fns.append(fn)
f.close()
print 'Found %d functions' % len(fns)
postProcessParameters(fns)
from pprint import pprint
pprint(fns)
from common import *
ctx = {}
ctx['CLAMDBLAS_REMAP_ORIGIN'] = generateRemapOrigin(fns)
ctx['CLAMDBLAS_REMAP_DYNAMIC'] = generateRemapDynamic(fns)
ctx['CLAMDBLAS_FN_DECLARATIONS'] = generateFnDeclaration(fns)
sys.stdout = open('../../../include/opencv2/ocl/cl_runtime/clamdblas_runtime.hpp', 'w')
ProcessTemplate('template/clamdblas_runtime.hpp.in', ctx)
ctx['CL_FN_ENUMS'] = generateEnums(fns, 'OPENCLAMDBLAS_FN')
ctx['CL_FN_NAMES'] = generateNames(fns, 'openclamdblas_fn')
ctx['CL_FN_DEFINITIONS'] = generateFnDefinition(fns, 'openclamdblas_fn', 'OPENCLAMDBLAS_FN')
ctx['CL_FN_PTRS'] = generatePtrs(fns, 'openclamdblas_fn')
ctx['CL_FN_SWITCH'] = generateTemplates(23, 'openclamdblas_fn', 'openclamdblas_check_fn', '')
sys.stdout = open('../clamdblas_runtime.cpp', 'w')
ProcessTemplate('template/clamdblas_runtime.cpp.in', ctx)