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
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()
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
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
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
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
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()
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()
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()
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()
#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,
'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()
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
"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()
def writeProgramTcl(base, programtclname): f = util.createDirAndOpen(programtclname, 'w') f.write(programTclTemplate % { 'base': base.lower(), 'Base': base }) f.close()
def writeReprogramTcl(base, programtclname): f = util.createDirAndOpen(programtclname, 'w') f.write(programTclTemplate % { 'Base': 'mkPcieTop_pblock_top_portalTop_partial.bit' }) f.close()
def writeImpactCmd(base, impactcmdname): f = util.createDirAndOpen(impactcmdname, 'w') f.write(impactCmdTemplate % { 'base': base.lower(), 'Base': base }) f.close()
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
'-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)
'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()
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