예제 #1
0
파일: cppgen.py 프로젝트: 8l/connectal
def generate_cpp(project_dir, noisyFlag, jsondata):
    global globalv_globalvars, verbose, bsvdefines
    def create_cpp_file(name):
        fname = os.path.join(project_dir, 'jni', name)
        f = util.createDirAndOpen(fname, 'w')
        if verbose:
            print "Writing file ",fname
        f.write('#include "GeneratedTypes.h"\n')
        return f

    verbose = noisyFlag
    bsvdefines = {}
    for binding in jsondata['bsvdefines']:
        if '=' in binding:
            print 'split', binding.split('=')
            var,val = binding.split('=')
            bsvdefines[var] = val
        else:
            bsvdefines[binding] = binding
    generatedCFiles = []
    globalv_globalvars = {}
    hname = os.path.join(project_dir, 'jni', 'GeneratedTypes.h')
    generated_hpp = util.createDirAndOpen(hname, 'w')
    generated_hpp.write('#ifndef __GENERATED_TYPES__\n')
    generated_hpp.write('#define __GENERATED_TYPES__\n')
    generated_hpp.write('#include "portal.h"\n')
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('extern "C" {\n')
    generated_hpp.write('#endif\n')
    # global type declarations used by interface mthods
    for v in jsondata['globaldecls']:
        if v['dtype'] == 'TypeDef':
            globalv_globalvars[v['tname']] = v
            if v.get('tparams'):
                print 'Skipping C++ declaration for parameterized type', v['tname']
                continue
            emitCD(v, generated_hpp, 0)
    generated_hpp.write('\n')
    cppname = 'GeneratedCppCallbacks.cpp'
    generated_cpp = create_cpp_file(cppname)
    generatedCFiles.append(cppname)
    generated_cpp.write('\n#ifndef NO_CPP_PORTAL_CODE\n')
    for item in jsondata['interfaces']:
        if verbose:
            print 'generateclass', item
        generate_class(item['cname'],     '', item['cdecls'], generatedCFiles, create_cpp_file, generated_hpp, generated_cpp)
        generate_class(item['cname'], 'Json', item['cdecls'], generatedCFiles, create_cpp_file, generated_hpp, generated_cpp)
    generated_cpp.write('#endif //NO_CPP_PORTAL_CODE\n')
    generated_cpp.close()
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('}\n')
    generated_hpp.write('#endif\n')
    generated_hpp.write('#endif //__GENERATED_TYPES__\n')
    generated_hpp.close()
    gen_makefile = util.createDirAndOpen(os.path.join(project_dir, 'jni', 'Makefile.generated_files'), 'w')
    gen_makefile.write('\nGENERATED_CPP=' + ' '.join(generatedCFiles)+'\n')
    gen_makefile.close()
    return generatedCFiles
예제 #2
0
def generate_bsv(project_dir, noisyFlag, aGenDef, jsondata):
    global generateInterfaceDefs, verbose
    verbose = noisyFlag
    generateInterfaceDefs = aGenDef
    generatedPackageNames = []
    if generateInterfaceDefs:
        fname = os.path.join(project_dir, 'generatedbsv', 'GeneratedTypes.bsv')
        if_file = util.createDirAndOpen(fname, 'w')
        for v in jsondata['globaldecls']:
            if v['dtype'] == 'TypeDef':
                if v.get('tparams'):
                    print('Skipping BSV declaration for parameterized type',
                          v['tname'])
                    continue
                emitBDef(v, if_file, 0)
        if_file.write('\n')
    for item in jsondata['interfaces']:
        if verbose:
            print('genbsv', item)
        pname = item['cname']
        if pname in generatedPackageNames:
            continue
        generatedPackageNames.append(pname)
        fname = os.path.join(project_dir, 'generatedbsv', '%s.bsv' % pname)
        bsv_file = util.createDirAndOpen(fname, 'w')
        bsv_file.write('package %s;\n' % pname)
        if generateInterfaceDefs:
            extraImports = ['HostInterface', 'GeneratedTypes']
        else:
            extraImports = [item['Package']]
            extraImports += [
                i for i in jsondata['globalimports']
                if not i in generatedPackageNames
            ]
        bsv_file.write(
            preambleTemplate % {
                'extraImports':
                ''.join(['import %s::*;\n' % pn for pn in extraImports])
            })
        if verbose:
            print('Writing file ', fname)
        if generateInterfaceDefs:
            if_file.write(interfaceDefTemplate % fixupSubsts(item, ''))

        bsv_file.write(exposedWrapperInterfaceTemplate %
                       fixupSubsts(item, 'Wrapper'))
        bsv_file.write(exposedProxyInterfaceTemplate %
                       fixupSubsts(item, 'Proxy'))
        bsv_file.write('endpackage: %s\n' % pname)
        bsv_file.close()
    if generateInterfaceDefs:
        if_file.close()
예제 #3
0
파일: cppgen.py 프로젝트: acw1251/connectal
 def create_cpp_file(name):
     fname = os.path.join(project_dir, generatedSubdirectory, name)
     f = util.createDirAndOpen(fname, 'w')
     if verbose:
         print "Writing file ",fname
     f.write('#include "GeneratedTypes.h"\n')
     return f
예제 #4
0
파일: cppgen.py 프로젝트: chamdoo/xbsv
 def create_cpp_file(name):
     fname = os.path.join(project_dir, 'jni', name)
     f = util.createDirAndOpen(fname, 'w')
     if noisyFlag:
         print "Writing file ",fname
     f.write('#include "GeneratedTypes.h"\n');
     return f
예제 #5
0
파일: cppgen.py 프로젝트: 8l/connectal
 def create_cpp_file(name):
     fname = os.path.join(project_dir, 'jni', name)
     f = util.createDirAndOpen(fname, 'w')
     if verbose:
         print "Writing file ",fname
     f.write('#include "GeneratedTypes.h"\n')
     return f
예제 #6
0
def generate_cpp(project_dir, noisyFlag, jsondata):
    global globalv_globalvars
    def create_cpp_file(name):
        fname = os.path.join(project_dir, 'jni', name)
        f = util.createDirAndOpen(fname, 'w')
        if noisyFlag:
            print "Writing file ",fname
        f.write('#include "GeneratedTypes.h"\n')
        return f

    generatedCFiles = []
    globalv_globalvars = jsondata['globalvars']
    hname = os.path.join(project_dir, 'jni', 'GeneratedTypes.h')
    generated_hpp = util.createDirAndOpen(hname, 'w')
    generated_hpp.write('#ifndef __GENERATED_TYPES__\n')
    generated_hpp.write('#define __GENERATED_TYPES__\n')
    generated_hpp.write('#include "portal.h"\n')
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('extern "C" {\n')
    generated_hpp.write('#endif\n')
    # global type declarations used by interface mthods
    for v in jsondata['globaldecls']:
        if v['type'] == 'TypeDef':
            if v['params']:
                print 'Skipping C++ declaration for parameterized type', v.name
                continue
            emitCD(v, generated_hpp, 0)
    generated_hpp.write('\n')
    cppname = 'GeneratedCppCallbacks.cpp'
    generated_cpp = create_cpp_file(cppname)
    generatedCFiles.append(cppname)
    generated_cpp.write('\n#ifndef NO_CPP_PORTAL_CODE\n')
    for item in jsondata['interfaces']:
        generate_class(item['name'], item['decls'], item['parentLportal'], item['parentPortal'], generatedCFiles, create_cpp_file, generated_hpp, generated_cpp)
    generated_cpp.write('#endif //NO_CPP_PORTAL_CODE\n')
    generated_cpp.close()
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('}\n')
    generated_hpp.write('#endif\n')
    generated_hpp.write('#endif //__GENERATED_TYPES__\n')
    generated_hpp.close()
    gen_makefile = util.createDirAndOpen(os.path.join(project_dir, 'jni', 'Makefile.generated_files'), 'w')
    gen_makefile.write('\nGENERATED_CPP=' + ' '.join(generatedCFiles)+'\n')
    gen_makefile.close()
    return generatedCFiles
예제 #7
0
def generate_bsv(project_dir, noisyFlag, aGenDef, jsondata):
    global generateInterfaceDefs,verbose
    verbose = noisyFlag
    generateInterfaceDefs = aGenDef
    generatedPackageNames = []
    if generateInterfaceDefs:
        fname = os.path.join(project_dir, 'generatedbsv', 'GeneratedTypes.bsv')
        if_file = util.createDirAndOpen(fname, 'w')
        for v in jsondata['globaldecls']:
            if v['dtype'] == 'TypeDef':
                if v.get('tparams'):
                    print 'Skipping BSV declaration for parameterized type', v['tname']
                    continue
                emitBDef(v, if_file, 0)
        if_file.write('\n')
    for item in jsondata['interfaces']:
        if verbose:
            print 'genbsv', item
        pname = item['cname']
        if pname in generatedPackageNames:
            continue
        generatedPackageNames.append(pname)
        fname = os.path.join(project_dir, 'generatedbsv', '%s.bsv' % pname)
        bsv_file = util.createDirAndOpen(fname, 'w')
        bsv_file.write('package %s;\n' % pname)
        if generateInterfaceDefs:
            extraImports = ['HostInterface', 'GeneratedTypes']
        else:
            extraImports = [item['Package']]
            extraImports += [i for i in jsondata['globalimports'] if not i in generatedPackageNames]
        bsv_file.write(preambleTemplate % {'extraImports' : ''.join(['import %s::*;\n' % pn for pn in extraImports])})
        if verbose:
            print 'Writing file ', fname
        if generateInterfaceDefs:
            if_file.write(interfaceDefTemplate % fixupSubsts(item, ''))
        
        bsv_file.write(exposedWrapperInterfaceTemplate % fixupSubsts(item, 'Wrapper'))
        bsv_file.write(exposedProxyInterfaceTemplate % fixupSubsts(item, 'Proxy'))
        bsv_file.write('endpackage: %s\n' % pname)
        bsv_file.close()
    if generateInterfaceDefs:
        if_file.close()
예제 #8
0
파일: bsvgen.py 프로젝트: KimYoungBin/xbsv
 def create_bsv_package(pname, data, files):
     fname = os.path.join(project_dir, 'sources', dutname.lower(), '%s.bsv' % pname)
     bsv_file = util.createDirAndOpen(fname, 'w')
     bsv_file.write('package %s;\n' % pname)
     extraImports = (['import %s::*;\n' % os.path.splitext(os.path.basename(fn))[0] for fn in files]
                + ['import %s::*;\n' % i for i in globalimports ])
     bsv_file.write(preambleTemplate % {'extraImports' : ''.join(extraImports)})
     if noisyFlag:
         print 'Writing file ', fname
     bsv_file.write(data)
     bsv_file.write('endpackage: %s\n' % pname)
     bsv_file.close()
예제 #9
0
 def create_bsv_package(pname, data, files):
     fname = os.path.join(project_dir, 'sources', dutname.lower(),
                          '%s.bsv' % pname)
     bsv_file = util.createDirAndOpen(fname, 'w')
     bsv_file.write('package %s;\n' % pname)
     extraImports = ([
         'import %s::*;\n' % os.path.splitext(os.path.basename(fn))[0]
         for fn in files
     ] + ['import %s::*;\n' % i for i in globalimports])
     bsv_file.write(preambleTemplate %
                    {'extraImports': ''.join(extraImports)})
     if noisyFlag:
         print 'Writing file ', fname
     bsv_file.write(data)
     bsv_file.write('endpackage: %s\n' % pname)
     bsv_file.close()
예제 #10
0
def generate_bsv(project_dir, noisyFlag, jsondata):
    generatedPackageNames = []
    for item in jsondata['interfaces']:
        pname = item['name']
        if pname in generatedPackageNames:
            continue
        generatedPackageNames.append(pname)
        fname = os.path.join(project_dir, 'sources', jsondata['dutname'].lower(), '%s.bsv' % pname)
        bsv_file = util.createDirAndOpen(fname, 'w')
        bsv_file.write('package %s;\n' % pname)
        extraImports = (['import %s::*;\n' % os.path.splitext(os.path.basename(fn))[0] for fn in [item['package']] ]
                   + ['import %s::*;\n' % i for i in jsondata['globalimports'] if not i in generatedPackageNames])
        bsv_file.write(preambleTemplate % {'extraImports' : ''.join(extraImports)})
        if noisyFlag:
            print 'Writing file ', fname
        
        bsv_file.write(exposedWrapperInterfaceTemplate % fixupSubsts(item, 'Wrapper'))
        bsv_file.write(exposedProxyInterfaceTemplate % fixupSubsts(item, 'Proxy'))
        bsv_file.write('endpackage: %s\n' % pname)
        bsv_file.close()
예제 #11
0
        #android
	'project_dir': project_dir,
        #ubuntu
        'sourceincludes': ' '.join(['-I%s' % os.path.dirname(os.path.abspath(sf)) for sf in options.source]) if options.source else '',
        #common
        'source': ' '.join([os.path.abspath(sf) for sf in options.source]) if options.source else '',
        'source2': ' '.join([os.path.abspath(sf) for sf in options.source2]) if options.source2 else '',
        'connectaldir': connectaldir,
	'clibs': ' '.join(['-l%s' % l for l in options.clib]),
	'clibfiles': ' '.join(['%s' % l for l in options.clibfiles]),
	'clibdirs': ' '.join([ '-L%s' % os.path.abspath(l) for l in options.clibdir ]),
	'cdefines': ' '.join([ '-D%s' % d for d in bsvdefines ]),
        'cdefines2': ' '.join([ '-D%s' % d for d in options.bsvdefine2 ]),
	'cincludes': ' '.join([ '-I%s' % os.path.abspath(i) for i in options.cinclude ])
    }
    f = util.createDirAndOpen(androidmkname, 'w')
    f.write(androidmk_template % substs)
    f.close()
    f = util.createDirAndOpen(linuxmkname, 'w')
    f.write(linuxmakefile_template % substs)
    f.close()
    if options.stl:
	    f = util.createDirAndOpen(os.path.join(project_dir, 'jni', 'Application.mk'), 'w')
	    f.write('APP_STL                 := %s\n' % options.stl)
	    f.close()

    tclsubsts = {'dut': dutname.lower(),
                 'Dut': dutname,
                 'rewire_clock': rewireclockstring,
                 'project_dir': project_dir,
                 'partname': partname,
예제 #12
0
                 'exportedInterfaces' : '\n'.join(interfaceList),
                 'exportedNames' : '\n'.join(exportedNames),
                 'portalReaders' : appendVectors(options.memread + ['nullReaders']),
                 'portalWriters' : appendVectors(options.memwrite + ['nullWriters']),
                 'portalMaster' : 'lMemServer.masters' if memory_flag else 'nil',
#Use e.g., --interface pins:Ddr3Test.ddr3
                 'pinsInterface' : '    interface pins = l%(usermod)s.pins;\n' % pmap if False else '',
                 'pinsInterfaceDecl' : pinsInterfaceDecl,
                 'moduleParam' : 'ConnectalTop#(%s)' % pintype if not options.cnoc \
                     else 'CnocTop#(NumberOfRequests,NumberOfIndications,PhysAddrWidth,DataBusWidth,%s,NumberOfMasters)' % pintype,
                 'portalclock': options.portalclock,
                 'topname': options.topname
                 }
    topFilename = project_dir + '/' + options.filename
    print('Writing:', topFilename)
    top = util.createDirAndOpen(topFilename, 'w')
    if options.cnoc:
        top.write(topNocTemplate % topsubsts)
    else:
        top.write(topTemplate % topsubsts)
    top.close()
    topFilename = project_dir + '/' + options.ifcnames + '.bsv'
    print('Writing:', topFilename)
    top = util.createDirAndOpen(topFilename, 'w')
    top.write(ifcnamesTemplate % topsubsts)
    top.close()
    topFilename = project_dir + '/../jni/topEnum.h'
    print('Writing:', topFilename)
    top = util.createDirAndOpen(topFilename, 'w')
    top.write(topEnumTemplate % topsubsts)
    top.close()
예제 #13
0
파일: cppgen.py 프로젝트: chamdoo/xbsv
def generate_cpp(globaldecls, project_dir, noisyFlag, swProxies, swWrappers):
    def create_cpp_file(name):
        fname = os.path.join(project_dir, 'jni', name)
        f = util.createDirAndOpen(fname, 'w')
        if noisyFlag:
            print "Writing file ",fname
        f.write('#include "GeneratedTypes.h"\n');
        return f

    generatedCFiles = []
    hname = os.path.join(project_dir, 'jni', 'GeneratedTypes.h')
    generated_hpp = util.createDirAndOpen(hname, 'w')
    generated_hpp.write('#ifndef __GENERATED_TYPES__\n');
    generated_hpp.write('#define __GENERATED_TYPES__\n');
    generated_hpp.write('#include "portal.h"\n')
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('extern "C" {\n')
    generated_hpp.write('#endif\n')
    # global type declarations used by interface mthods
    for v in globaldecls:
        if (v.type == 'TypeDef'):
            v.emitCDeclaration(generated_hpp, 0, '')
    generated_hpp.write('\n');
    cppname = 'GeneratedCppCallbacks.cpp'
    generated_cpp = create_cpp_file(cppname)
    generatedCFiles.append(cppname)
    generated_cpp.write('\n#ifndef NO_CPP_PORTAL_CODE\n\n')

    for i in swProxies:
        cppname = '%sProxy.c' % i.name
        hppname = '%sProxy.h' % i.name
        hpp = create_cpp_file(hppname)
        cpp = create_cpp_file(cppname)
        hpp.write('#ifndef _%(name)s_H_\n#define _%(name)s_H_\n' % {'name': i.name.upper()})
        hpp.write('#include "%s.h"' % i.parentClass("portal"))
        i.emitCProxyDeclaration(hpp, generated_hpp, "Proxy")
        i.ind.emitCWrapperImplementation(cpp, generated_hpp, "Proxy", '', False)
        i.emitCProxyImplementation(cpp, generated_hpp, "Proxy", "", False)
        hpp.write('#endif // _%(name)s_H_\n' % {'name': i.name.upper()})
        hpp.close();
        cpp.close();
        generatedCFiles.append(cppname)

    for i in swWrappers:
        cppname = '%sWrapper.c' % i.name
        hppname = '%sWrapper.h' % i.name
        hpp = create_cpp_file(hppname)
        cpp = create_cpp_file(cppname)
        hpp.write('#ifndef _%(name)s_H_\n#define _%(name)s_H_\n' % {'name': i.name.upper()})
        i.ind.emitCProxyImplementation(cpp, generated_hpp, "WrapperStatus", "", False)
        i.emitCWrapperImplementation(cpp, generated_hpp, "Wrapper", '', False)
        generated_cpp.write('\n\n/************** Start of %sWrapper CPP ***********/\n' % i.name)
        generated_cpp.write('#include "%s"' % hppname)
        i.emitCWrapperDeclaration(hpp, generated_hpp, generated_cpp, "Wrapper")
        i.emitCWrapperImplementation(generated_cpp, generated_hpp, "Wrapper", '', True)
        hpp.write('#endif // _%(name)s_H_\n' % {'name': i.name.upper()})
        hpp.close();
        cpp.close();
        generatedCFiles.append(cppname)
    
    generated_cpp.write('\n#endif //NO_CPP_PORTAL_CODE\n')
    generated_cpp.close();
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('}\n')
    generated_hpp.write('#endif\n')
    generated_hpp.write('#endif //__GENERATED_TYPES__\n');
    generated_hpp.close();
    gen_makefile = util.createDirAndOpen(os.path.join(project_dir, 'jni', 'Makefile.generated_files'), 'w')
    gen_makefile.write('\nGENERATED_CPP=' + ' '.join(generatedCFiles)+'\n');
    gen_makefile.close();
    return generatedCFiles
예제 #14
0
파일: topgen.py 프로젝트: 8l/connectal
     "exportedInterfaces": "\n".join(interfaceList),
     "exportedNames": "\n".join(exportedNames),
     "portalReaders": ("append(" if len(options.memread) > 0 else "(")
     + ", ".join(options.memread + ["nullReaders"])
     + ")",
     "portalWriters": ("append(" if len(options.memwrite) > 0 else "(")
     + ", ".join(options.memwrite + ["nullWriters"])
     + ")",
     "portalMaster": "lMemServer.masters" if memory_flag else "nil",
     "moduleParam": "ConnectalTop"
     if not options.cnoc
     else "CnocTop#(NumberOfRequests,NumberOfIndications,PhysAddrWidth,DataBusWidth,`PinType,NumberOfMasters)",
 }
 topFilename = project_dir + "/Top.bsv"
 print "Writing:", topFilename
 top = util.createDirAndOpen(topFilename, "w")
 if options.cnoc:
     top.write(topNocTemplate % topsubsts)
 else:
     top.write(topTemplate % topsubsts)
 top.close()
 topFilename = project_dir + "/IfcNames.bsv"
 print "Writing:", topFilename
 top = util.createDirAndOpen(topFilename, "w")
 top.write(ifcnamesTemplate % topsubsts)
 top.close()
 topFilename = project_dir + "/../jni/topEnum.h"
 print "Writing:", topFilename
 top = util.createDirAndOpen(topFilename, "w")
 top.write(topEnumTemplate % topsubsts)
 top.close()
예제 #15
0
파일: xpsgen.py 프로젝트: suhaspai/xbsv
def writeProgramTcl(base, programtclname):
        f = util.createDirAndOpen(programtclname, 'w')
        f.write(programTclTemplate % { 'base': base.lower(), 'Base': base })
        f.close()
예제 #16
0
파일: xpsgen.py 프로젝트: suhaspai/xbsv
def writeReprogramTcl(base, programtclname):
        f = util.createDirAndOpen(programtclname, 'w')
        f.write(programTclTemplate % { 'Base': 'mkPcieTop_pblock_top_portalTop_partial.bit' })
        f.close()
예제 #17
0
파일: xpsgen.py 프로젝트: suhaspai/xbsv
def writeImpactCmd(base, impactcmdname):
        f = util.createDirAndOpen(impactcmdname, 'w')
        f.write(impactCmdTemplate % { 'base': base.lower(), 'Base': base })
        f.close()
예제 #18
0
def generate_cpp(globaldecls, project_dir, noisyFlag, swProxies, swWrappers):
    def create_cpp_file(name):
        fname = os.path.join(project_dir, 'jni', name)
        f = util.createDirAndOpen(fname, 'w')
        if noisyFlag:
            print "Writing file ", fname
        f.write('#include "GeneratedTypes.h"\n')
        return f

    generatedCFiles = []
    hname = os.path.join(project_dir, 'jni', 'GeneratedTypes.h')
    generated_hpp = util.createDirAndOpen(hname, 'w')
    generated_hpp.write('#ifndef __GENERATED_TYPES__\n')
    generated_hpp.write('#define __GENERATED_TYPES__\n')
    generated_hpp.write('#include "portal.h"\n')
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('extern "C" {\n')
    generated_hpp.write('#endif\n')
    # global type declarations used by interface mthods
    for v in globaldecls:
        if (v.type == 'TypeDef'):
            v.emitCDeclaration(generated_hpp, 0, '')
    generated_hpp.write('\n')
    cppname = 'GeneratedCppCallbacks.cpp'
    generated_cpp = create_cpp_file(cppname)
    generatedCFiles.append(cppname)
    generated_cpp.write('\n#ifndef NO_CPP_PORTAL_CODE\n\n')

    for i in swProxies:
        cppname = '%sProxy.c' % i.name
        hppname = '%sProxy.h' % i.name
        hpp = create_cpp_file(hppname)
        cpp = create_cpp_file(cppname)
        hpp.write('#ifndef _%(name)s_H_\n#define _%(name)s_H_\n' %
                  {'name': i.name.upper()})
        hpp.write('#include "%s.h"' % i.parentClass("portal"))
        i.emitCProxyDeclaration(hpp, generated_hpp, "Proxy")
        i.ind.emitCWrapperImplementation(cpp, generated_hpp, "Proxy", '',
                                         False)
        i.emitCProxyImplementation(cpp, generated_hpp, "Proxy", "", False)
        hpp.write('#endif // _%(name)s_H_\n' % {'name': i.name.upper()})
        hpp.close()
        cpp.close()
        generatedCFiles.append(cppname)

    for i in swWrappers:
        cppname = '%sWrapper.c' % i.name
        hppname = '%sWrapper.h' % i.name
        hpp = create_cpp_file(hppname)
        cpp = create_cpp_file(cppname)
        hpp.write('#ifndef _%(name)s_H_\n#define _%(name)s_H_\n' %
                  {'name': i.name.upper()})
        i.ind.emitCProxyImplementation(cpp, generated_hpp, "WrapperStatus", "",
                                       False)
        i.emitCWrapperImplementation(cpp, generated_hpp, "Wrapper", '', False)
        generated_cpp.write(
            '\n\n/************** Start of %sWrapper CPP ***********/\n' %
            i.name)
        generated_cpp.write('#include "%s"' % hppname)
        i.emitCWrapperDeclaration(hpp, generated_hpp, generated_cpp, "Wrapper")
        i.emitCWrapperImplementation(generated_cpp, generated_hpp, "Wrapper",
                                     '', True)
        hpp.write('#endif // _%(name)s_H_\n' % {'name': i.name.upper()})
        hpp.close()
        cpp.close()
        generatedCFiles.append(cppname)

    generated_cpp.write('\n#endif //NO_CPP_PORTAL_CODE\n')
    generated_cpp.close()
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('}\n')
    generated_hpp.write('#endif\n')
    generated_hpp.write('#endif //__GENERATED_TYPES__\n')
    generated_hpp.close()
    gen_makefile = util.createDirAndOpen(
        os.path.join(project_dir, 'jni', 'Makefile.generated_files'), 'w')
    gen_makefile.write('\nGENERATED_CPP=' + ' '.join(generatedCFiles) + '\n')
    gen_makefile.close()
    return generatedCFiles
예제 #19
0
                   '-I$(CONNECTALDIR)/cpp', '-I$(CONNECTALDIR)/lib/cpp', \
                   #'%(sourceincludes)s',

                   '%(cincludes)s']
    substs['toolchain'] = option_info[
        'toolchain'] if 'toolchain' in option_info else ''
    substs['cflags'] = util.escapequotes(
        '%s %s' % ((' '.join(includelist) % substs), ' '.join(options.cflags)))
    substs['cxxflags'] = util.escapequotes(
        '%s %s' %
        ((' '.join(includelist) % substs), ' '.join(options.cxxflags)))
    substs[
        'android_build_type'] = 'BUILD_SHARED_LIBRARY' if options.shared else 'BUILD_EXECUTABLE'
    substs[
        'android_local_module'] = 'connectal' if options.shared else 'android.exe'
    f = util.createDirAndOpen(androidmkname, 'w')
    f.write(androidmk_template % substs)
    if options.source2:
        f.write(androidmk2_template % substs)
    f.close()
    f = util.createDirAndOpen(linuxmkname, 'w')
    f.write(linuxmakefile_template % substs)
    f.close()
    if options.stl or options.android_platform or options.android_toolchain:
        f = util.createDirAndOpen(
            os.path.join(project_dir, 'jni', 'Application.mk'), 'w')
        if options.stl:
            f.write('APP_STL                 := %s\n' % options.stl)
        if options.android_platform:
            f.write('APP_PLATFORM             := android-%s\n' %
                    options.android_platform)
예제 #20
0
              'portalInstantiate' : '\n'.join(portalInstantiate),
              'portalList': '\n'.join(portalList),
              'portalCount': portalCount,
              'requestList': toVectorLiteral(requestList),
              'indicationList': toVectorLiteral(indicationList),
              'exportedInterfaces' : '\n'.join(interfaceList),
              'exportedNames' : '\n'.join(exportedNames),
              'portalReaders' : ('append(' if len(options.memread) > 0 else '(') + ', '.join(options.memread + ['nullReaders']) + ')',
              'portalWriters' : ('append(' if len(options.memwrite) > 0 else '(') + ', '.join(options.memwrite + ['nullWriters']) + ')',
              'portalMaster' : 'lMemServer.masters' if memory_flag else 'nil',
              'moduleParam' : 'ConnectalTop#(PhysAddrWidth,DataBusWidth,`PinType,`NumberOfMasters)' if not options.cnoc \
                  else 'CnocTop#(NumberOfRequests,NumberOfIndications,PhysAddrWidth,DataBusWidth,NumberOfMasters)'
              }
 topFilename = project_dir + '/Top.bsv'
 print 'Writing:', topFilename
 top = util.createDirAndOpen(topFilename, 'w')
 if options.cnoc:
     top.write(topNocTemplate % topsubsts)
 else:
     top.write(topTemplate % topsubsts)
 top.close()
 topFilename = project_dir + '/IfcNames.bsv'
 print 'Writing:', topFilename
 top = util.createDirAndOpen(topFilename, 'w')
 top.write(ifcnamesTemplate % topsubsts)
 top.close()
 topFilename = project_dir + '/../jni/topEnum.h'
 print 'Writing:', topFilename
 top = util.createDirAndOpen(topFilename, 'w')
 top.write(topEnumTemplate % topsubsts)
 top.close()
예제 #21
0
def generate_cpp(project_dir, noisyFlag, jsondata):
    global globalv_globalvars, verbose, bsvdefines

    def create_cpp_file(name):
        fname = os.path.join(project_dir, generatedSubdirectory, name)
        f = util.createDirAndOpen(fname, 'w')
        if verbose:
            print("Writing file ", fname)
        f.write('#include "GeneratedTypes.h"\n')
        return f

    verbose = noisyFlag
    bsvdefines = {}
    for binding in jsondata['bsvdefines']:
        if '=' in binding:
            print('split', binding.split('='))
            var, val = binding.split('=')
            bsvdefines[var] = val
        else:
            bsvdefines[binding] = binding
    generatedCFiles = []
    globalv_globalvars = {}
    hname = os.path.join(project_dir, generatedSubdirectory,
                         'GeneratedTypes.h')
    generated_hpp = util.createDirAndOpen(hname, 'w')
    generated_hpp.write('#ifndef __GENERATED_TYPES__\n')
    generated_hpp.write('#define __GENERATED_TYPES__\n')
    generated_hpp.write('#include "portal.h"\n')
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('extern "C" {\n')
    generated_hpp.write('#endif\n')
    # global type declarations used by interface mthods
    for v in jsondata['globaldecls']:
        if v['dtype'] == 'TypeDef':
            globalv_globalvars[v['tname']] = v
            if v.get('tparams'):
                print('Skipping C++ declaration for parameterized type',
                      v['tname'])
                continue
            emitCD(v, generated_hpp, 0)
    generated_hpp.write('\n')
    cppname = 'GeneratedCppCallbacks.cpp'
    generated_cpp = create_cpp_file(cppname)
    generatedCFiles.append(cppname)
    generated_cpp.write('\n#ifndef NO_CPP_PORTAL_CODE\n')
    for decl in jsondata['globaldecls']:
        if decl['tname'] == 'IfcNames':
            ifcnames = decl['tdtype']['elements']
            for (ifcname, ifcvalue) in ifcnames:
                generated_cpp.write('extern const uint32_t %s = %s;\n' %
                                    (util.decapitalize(ifcname), ifcname))
    for item in jsondata['interfaces']:
        if verbose:
            print('generateclass', item)
        generate_class(item['cname'], '', item['cdecls'], generatedCFiles,
                       create_cpp_file, generated_hpp, generated_cpp,
                       item.get('direction'))
        if generateJson:
            generate_class(item['cname'], 'Json', item['cdecls'],
                           generatedCFiles, create_cpp_file, generated_hpp,
                           generated_cpp, item.get('direction'))
    generated_cpp.write('#endif //NO_CPP_PORTAL_CODE\n')
    generated_cpp.close()
    generated_hpp.write('#ifdef __cplusplus\n')
    generated_hpp.write('}\n')
    generated_hpp.write('#endif\n')
    generated_hpp.write('#endif //__GENERATED_TYPES__\n')
    generated_hpp.close()
    if not suppressGeneratedMakefile:
        gen_makefile = util.createDirAndOpen(
            os.path.join(project_dir, generatedSubdirectory,
                         'Makefile.generated_files'), 'w')
        gen_makefile.write('\nGENERATED_CPP=' + ' '.join(generatedCFiles) +
                           '\n')
        gen_makefile.close()
    return generatedCFiles