def gen_wkspace(self, ksdkProj): """ Generate the uvmpw files for Keil project :param ksdkProj: Instance of a KSDK project """ # Get relative path mdkPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/mdk' relPath = '' if self.isLinked: tempStr = ksdkProj.sdkPath + '/' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../' self.projRelPath = relPath # tree = ET.ElementTree(ET.fromstring(mF.mdk_formatted_uvmpw)) # root = tree.getroot() prettyRoot = kT.pretty_xml(root, "UTF-8") # Write data to file if not os.path.isdir(mdkPath): os.makedirs(mdkPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(mdkPath + '/' + self.name + '.uvmpw', "UTF-8") return
def gen_eww(self, ksdkProj): """ Generate the eww files for IAR project :param ksdkProj: Instance of a KSDK project """ # Get relative path iarPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/iar' if self.isLinked: self.wsRelPath = '$WS_DIR$/' + kT.get_rel_path(iarPath, ksdkProj.sdkPath) + '/' else: self.wsRelPath = '$WS_DIR$/../' # Populate dictionaries with ksdkProj info ## All self.wsBatchAll['member'][0]['project'] = self.name self.wsBatchAll['member'][1]['project'] = self.name ## Release self.wsBatchRls['member'][0]['project'] = self.name ## Debug self.wsBatchDbg['member'][0]['project'] = self.name # Create tree tree = ET.ElementTree() # Set root root = ET.Element('workspace') # Create subelements for batch builds batch = ET.SubElement(root, 'batchBuild') ## All batchDefAll = ET.SubElement(batch, 'batchDefinition') batchName = ET.SubElement(batchDefAll, 'name') batchName.text = self.wsBatchAll['name'] for m in self.wsBatchAll['member']: batchMember = ET.SubElement(batchDefAll, 'member') batchProj = ET.SubElement(batchMember, 'project') batchProj.text = m['project'] batchConfig = ET.SubElement(batchMember, 'configuration') batchConfig.text = m['configuration'] ## Release batchDefRls = ET.SubElement(batch, 'batchDefinition') batchName = ET.SubElement(batchDefRls, 'name') batchName.text = self.wsBatchRls['name'] for m in self.wsBatchRls['member']: batchMember = ET.SubElement(batchDefRls, 'member') batchProj = ET.SubElement(batchMember, 'project') batchProj.text = m['project'] batchConfig = ET.SubElement(batchMember, 'configuration') batchConfig.text = m['configuration'] ## Debug batchDefDbg = ET.SubElement(batch, 'batchDefinition') batchName = ET.SubElement(batchDefDbg, 'name') batchName.text = self.wsBatchDbg['name'] for m in self.wsBatchDbg['member']: batchMember = ET.SubElement(batchDefDbg, 'member') batchProj = ET.SubElement(batchMember, 'project') batchProj.text = m['project'] batchConfig = ET.SubElement(batchMember, 'configuration') batchConfig.text = m['configuration'] # Edit dictionary to add ksdkProj info self.projPaths['path'].append('$WS_DIR$/' + self.name + '.ewp') # Populate project paths for p in self.projPaths['path']: proj = ET.SubElement(root, 'project') projPath = ET.SubElement(proj, 'path') projPath.text = p # Format data to make it more readable prettyRoot = kT.pretty_xml(root, "iso-8859-1") # Write data to file if not os.path.isdir(iarPath): os.mkdir(iarPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(iarPath + '/' + self.name + '.eww', "iso-8859-1") return
def gen_ewp(self, ksdkProj): """ Generate the ewp files for IAR project :param ksdkProj: Instance of a KSDK project """ iarPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/iar' if self.isLinked: self.projRelPath = '$PROJ_DIR$/' + kT.get_rel_path(iarPath, ksdkProj.sdkPath) + '/' else: self.projRelPath = '$PROJ_DIR$/../' # Populate ksdkProj specifics to dictionaries ## Set name of out file self.linkOut['state'] = self.name + '.out' ## Configure linker option self.linkIcf['state'] = self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getLinkerPath(ksdkProj.device, 'iar', False) ## Set a define for the device self.cDefines['state'].append('CPU_' + ksdkProj.device[2]) if ksdkProj.rtos != 'bm': param = self.parentProject.parent.getSmartcardParam(ksdkProj.device[1]) if param is not None: self.cDefines['state'].append(param) if ksdkProj.rtos == 'freertos': self.cDefines['state'].append('FSL_RTOS_FREE_RTOS') elif ksdkProj.rtos == 'ucosii': self.cDefines['state'].append('FSL_RTOS_UCOSII') elif ksdkProj.rtos == 'ucosiii': self.cDefines['state'].append('FSL_RTOS_UCOSIII') ## Add C include paths necessary for project self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getCMSISIncludeDirectory(False)) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory()) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1]) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1] + os.sep + Constants.UTILITIES_FOLDER) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1] + os.sep + Constants.DRIVERS_FOLDER) self.cIncludes['state'].append("$PROJ_DIR$/../../..") # in project root, there are application files in case of rtos, so it has to be added to cIncludes self.cIncludes['state'].append("$PROJ_DIR$/../") # Add rtos paths if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cIncludes['state'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getFreertosDirectoriesPaths(self.archType, ToolchainType.IARname, self.parentProject.board[1])) #FIXME Radka find out why self.asmIncludes['state'].append('$PROJ_DIR$/..') elif ksdkProj.rtos == 'ucosii': self.cIncludes['state'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getuCOSIIDirectoriesPaths(self.archType, ToolchainType.IARname, self.parentProject.board[1])) elif ksdkProj.rtos == 'ucosiii': self.cIncludes['state'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getuCOSIIIDirectoriesPaths(self.archType, ToolchainType.IARname, self.parentProject.board[1])) # Add relative paths to files index = 0 while index < len(self.ewpStartup['file']): self.ewpStartup['file'][index] = kT.string_replace(self.ewpStartup['file'][index], ksdkKdsNew.DEVICE_NAME_CONSTANT, ksdkProj.device[1]) self.ewpStartup['file'][index] = self.projRelPath + self.ewpStartup['file'][index] index += 1 for d in [self.projCMSISFiles, self.drivers, self.utilities]: d[FILE_KEY_IN_DICT] = [self.projRelPath + f for f in d[FILE_KEY_IN_DICT]] #add relative path to linker file self.linkerFile = self.projRelPath + self.linkerFile if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': index = 0 while index < len(self.ewpRtos['file']): self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'xxx',\ ksdkProj.device[1][1:]) self.ewpRtos['file'][index] = self.projRelPath + self.ewpRtos['file'][index] index += 1 elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.ewpRtos['file']): self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'ccc',\ archType) self.ewpRtos['file'][index] = self.projRelPath + self.ewpRtos['file'][index] index += 1 elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.ewpRtos['file']): self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'ccc',\ archType) self.ewpRtos['file'][index] = self.projRelPath + self.ewpRtos['file'][index] index += 1 kT.debug_log(self.ewpStartup['file']) # Configure linker stack and heap if self.projType == 'usb': if ksdkProj.rtos == 'bm': if 'kl' in ksdkProj.board[1]: self.linkDefines['state'][1] = '__stack_size__=0x400' else: self.linkDefines['state'][1] = '__stack_size__=0x1000' else: if 'kl' in ksdkProj.board[1]: self.linkDefines['state'][1] = '__stack_size__=0x400' else: self.linkDefines['state'][1] = '__stack_size__=0x1000' if ksdkProj.rtos == 'freertos': self.linkDefines['state'][0] = '__stack_size__=0x1000' self.linkDefines['state'][1] = '__heap_size__=0x1000' self.linkDefines['state'].append('__ram_vector_table__=1') elif ksdkProj.rtos == 'ucosii': self.linkDefines['state'][0] = '__stack_size__=0x1000' self.linkDefines['state'][1] = '__heap_size__=0x1000' self.linkDefines['state'].append('__ram_vector_table__=1') elif ksdkProj.rtos == 'ucosiii': self.linkDefines['state'][0] = '__stack_size__=0x1000' self.linkDefines['state'][1] = '__heap_size__=0x1000' self.linkDefines['state'].append('__ram_vector_table__=1') tree = ET.ElementTree(ET.fromstring(iF.iar_formatted_ewp)) for elem in tree.iter(tag='option'): for child in elem.findall('name'): if child.text == 'OGChipSelectEditMenu': projDev = ET.Element('state') projDev.text = ksdkProj.device[0] + '\tFreescale ' + ksdkProj.device[0] elem.append(projDev) if child.text == 'FPU': projFPU = ET.Element('state') projFPU.text = '5' if self.device[3] else '0' elem.append(projFPU) if child.text == 'GFPUCoreSlave': projFPU = ET.Element('state') projFPU.text = '39' if self.device[3] else '35' elem.append(projFPU) if child.text == 'GBECoreSlave': projBE = ET.Element('state') projBE.text = '39' if self.device[3] else '35' elem.append(projBE) if child.text == 'CCDefines': for d in self.cDefines['state']: projCDef = ET.Element('state') projCDef.text = d elem.append(projCDef) if child.text == 'IlinkConfigDefines': if ksdkProj.rtos != 'bm': for d in self.linkDefines['state']: projLDef = ET.Element('state') projLDef.text = d elem.append(projLDef) if child.text == 'IlinkOverrideProgramEntryLabel': if ksdkProj.rtos == 'mqx': for s in elem.findall('state'): s.text = '1' #print s.text if child.text == 'IlinkOutputFile': projOut = ET.Element('state') projOut.text = self.linkOut['state'] elem.append(projOut) if child.text == 'IlinkIcfFile': projIcf = ET.Element('state') projIcf.text = self.linkIcf['state'] elem.append(projIcf) if child.text == 'CCIncludePath2': for i in self.cIncludes['state']: projInc = ET.Element('state') projInc.text = i elem.append(projInc) if child.text == 'AUserIncludes': #print "ASM Inlcudes" if ksdkProj.rtos == 'freertos': asmInc = ET.Element('state') asmInc.text = self.asmIncludes['state'][0] elem.append(asmInc) # Add file groups to ewp file root = tree.getroot() #add linker file to the root of project linkerFile = ET.SubElement(root, 'file') linkerFileName = ET.SubElement(linkerFile, 'name') linkerFileName.text = self.linkerFile for d in [self.ewpStartup, self.projCMSISFiles, self.templates, self.drivers, self.utilities, self.ewpSources]: group = ET.SubElement(root, 'group') groupName = ET.SubElement(group, 'name') groupName.text = d[NAME_KEY_IN_DICT] for f in d[FILE_KEY_IN_DICT]: file = ET.SubElement(group, 'file') fileFName = ET.SubElement(file, 'name') fileFName.text = f #exclude some drivers and utilities if (d == self.drivers) or (d == self.utilities): if f.endswith('.c'): dictToFindExcluded = self.drivers if d == self.drivers else self.utilities if dictToFindExcluded[EXCLUDED_LIST][d[FILE_KEY_IN_DICT].index(f)]: exc = ET.SubElement(file, 'excluded') conf = ET.SubElement(exc, 'configuration') conf.text = 'Debug' if ksdkProj.rtos != 'bm': rtosGrp = ET.SubElement(root, 'group') rtosName = ET.SubElement(rtosGrp, 'name') rtosName.text = self.ewpRtos['name'] for f in self.ewpRtos['file']: rtosFile = ET.SubElement(rtosGrp, 'file') rtosFName = ET.SubElement(rtosFile, 'name') rtosFName.text = f prettyRoot = kT.pretty_xml(root, "iso-8859-1") # Write data to file if not os.path.isdir(iarPath): os.makedirs(iarPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(iarPath + '/' + self.name + '.ewp', "iso-8859-1") # Gen ewd while we are here tree = ET.ElementTree(ET.fromstring(iF.iar_formatted_ewd)) for elem in tree.iter(tag='option'): for child in elem.findall('name'): if child.text == 'OCDynDriverList': for state in elem.findall('state'): state.text = 'CMSISDAP_ID' if (self.device[4] == 'cm4') else 'PEMICRO_ID' if child.text == 'CMSISDAPResetList': for state in elem.findall('state'): state.text = '5' if (self.device[4] == 'cm4') else '10' if child.text == 'CMSISDAPInterfaceRadio': for state in elem.findall('state'): state.text = '1' if (self.device[4] == 'cm4') else '0' if child.text == 'CMSISDAPSelectedCPUBehaviour': for state in elem.findall('state'): state.text = '' if (self.device[4] == 'cm4') else '0' tree.write(iarPath + '/' + self.name + '.ewd', "iso-8859-1") return
def gen_project(self, ksdkProj): """ Generate the eww files for KDS project :param ksdkProj: Instance of a KSDK project """ # Get relative path atlPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/atl' relPath = '' if self.isLinked: tempStr = kT.get_rel_path(atlPath, ksdkProj.sdkPath) + '/' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../' tree = ET.ElementTree(ET.fromstring(aF.formatted_project)) root = tree.getroot() for child in root: if child.tag == 'name': child.text = str(self.name + '_' + ksdkProj.device[2]) if child.tag == 'linkedResources': #Add linked resources if ksdkProj.useBSP == True: #Add board file links for b in self.projBoard: link = ET.Element('link') child.append(link) linkName = ET.Element('name') linkName.text = b['name'] link.append(linkName) linkType = ET.Element('type') linkType.text = b['type'] link.append(linkType) linkURI = ET.Element('locationURI') linkURI.text = b['locationURI'] link.append(linkURI) if ksdkProj.libList[0] != 'hal': #Add utilities folder link for u in self.projUtilities: link = ET.Element('link') child.append(link) linkName = ET.Element('name') linkName.text = u['name'] link.append(linkName) linkType = ET.Element('type') linkType.text = u['type'] link.append(linkType) linkURI = ET.Element('locationURI') if ksdkProj.isLinked: linkURI.text = u['locationURI'] else: tempURI = kT.string_replace(u['locationURI'], 'PROJECT_KSDK', 'PARENT-1-PROJECT_LOC') linkURI.text = tempURI link.append(linkURI) if ksdkProj.rtos != 'mqx': for s in self.projStartup: link = ET.Element('link') child.append(link) linkName = ET.Element('name') tempName = kT.string_replace(s['name'], 'xxx', ksdkProj.device[1]) linkName.text = tempName link.append(linkName) linkType = ET.Element('type') linkType.text = s['type'] link.append(linkType) linkURI = ET.Element('locationURI') tempURI = kT.string_replace(s['locationURI'], 'xxx', ksdkProj.device[1]) if ksdkProj.isLinked == False: tempURI = kT.string_replace(tempURI, 'PROJECT_KSDK', 'PARENT-1-PROJECT_LOC') #print tempURI linkURI.text = tempURI link.append(linkURI) if ksdkProj.rtos != 'bm': for r in self.projRtos: link = ET.Element('link') child.append(link) linkName = ET.Element('name') linkName.text = r['name'] link.append(linkName) linkType = ET.Element('type') linkType.text = r['type'] link.append(linkType) linkURI = ET.Element('locationURI') if ksdkProj.rtos == 'freertos': tempURI = kT.string_replace(r['locationURI'], 'xxx', ksdkProj.device[1][1:]) elif ksdkProj.rtos == 'mqx': tempURI = kT.string_replace(r['locationURI'], 'xxx', ksdkProj.device[1]) tempURI = kT.string_replace(r['locationURI'], 'bbb', ksdkProj.board[1]) elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' tempURI = kT.string_replace(r['locationURI'], 'ccc', archType) elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' tempURI = kT.string_replace(r['locationURI'], 'ccc', archType) if ksdkProj.isLinked == False: tempURI = kT.string_replace(tempURI, 'PROJECT_KSDK', 'PARENT-1-PROJECT_LOC') #print tempURI linkURI.text = tempURI link.append(linkURI) for c in self.projSources: link = ET.Element('link') child.append(link) linkName = ET.Element('name') linkName.text = c['name'] link.append(linkName) linkType = ET.Element('type') linkType.text = c['type'] link.append(linkType) linkURI = ET.Element('locationURI') linkURI.text = c['locationURI'] link.append(linkURI) # Add variable to project for KSDK path if ksdkProj.isLinked: projVarList = ET.SubElement(root, 'variableList') root.append(projVarList) projVar = ET.Element('variable') projVarList.append(projVar) varName = ET.Element('name') varName.text = "PROJECT_KSDK" projVar.append(varName) varVal = ET.Element('value') if ksdkProj.osType == 'Windows': varVal.text = "file:/" + kT.string_replace(ksdkProj.sdkPath, '\\', '/') else: varVal.text = "file:" + ksdkProj.sdkPath projVar.append(varVal) # Format data to make it more readable prettyRoot = kT.pretty_xml(root, "UTF-8") #print prettyRoot # Write data to file if not os.path.isdir(atlPath): os.mkdir(atlPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(atlPath + '/.project', "UTF-8") return
def gen_cproject(self, ksdkProj): """ Generate the cproject file for KDS project :param ksdkProj: Instance of a KSDK project """ kdsPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/atl' relPath = '' if self.isLinked: tempStr = kT.get_rel_path(kdsPath, ksdkProj.sdkPath) + '/../' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../../' self.projRelPath = relPath # Populate ksdkProj specifics to dictionaries ## Configure linker option self.linkLd['listOptionValue'].append(self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/linker/gcc/' +\ ksdkProj.device[0] + '_flash.ld') ## Set a define for the device self.cDefines['listOptionValue'].append('CPU_' + ksdkProj.device[2]) ## Added to fix K80 application build issues ## #if (ksdkProj.device[1] == 'MK80F25615') or (ksdkProj.device[1] == 'MK82F25615'): # self.cDefines['listOptionValue'].append('USING_DIRECT_INTERFACE=1') ## Added to fix UART smartcard application build issues ## if ksdkProj.libList[0] != 'hal': for d in ksdkProj.drvList: if d[0] == 'smartcard': if kT.get_smartcard_type(ksdkProj.sdkPath, ksdkProj.device[1]) == (1 << 8): self.cDefines['listOptionValue'].append('USING_DIRECT_INTERFACE=1') elif kT.get_smartcard_type(ksdkProj.sdkPath, ksdkProj.device[1]) == 1: self.cDefines['listOptionValue'].append('USING_NCN8025_INTERFACE=1') ################################################################################ if ksdkProj.useBSP: boardType = ksdkProj.board[0][:ksdkProj.board[0].find('_')] self.cDefines['listOptionValue'].append(ksdkProj.board[0]) if boardType == 'FRDM': self.cDefines['listOptionValue'].append('FREEDOM') elif boardType == 'TWR': self.cDefines['listOptionValue'].append('TOWER') elif boardType == 'USB': self.cDefines['listOptionValue'].append('BOARD_USE_VIRTUALCOM') self.cDefines['listOptionValue'].append('DONGLE') elif boardType == 'MRB': self.cDefines['listOptionValue'].append('MRB_KW01') if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cDefines['listOptionValue'].append('FSL_RTOS_FREE_RTOS') elif ksdkProj.rtos == 'mqx': self.cDefines['listOptionValue'].append('FSL_RTOS_MQX') elif ksdkProj.rtos == 'ucosii': self.cDefines['listOptionValue'].append('FSL_RTOS_UCOSII') elif ksdkProj.rtos == 'ucosiii': self.cDefines['listOptionValue'].append('FSL_RTOS_UCOSIII') ## Add C include paths necessary for project if ksdkProj.libList[0] != 'hal': self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/osa/inc') self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/utilities/inc') self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/CMSIS/Include') self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/devices') self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/include') self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/startup') self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/hal/inc') if ksdkProj.libList[0] != 'hal': self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/drivers/inc') self.cIncludes['listOptionValue'].append(self.projRelPath + 'platform/system/inc') self.cIncludes['listOptionValue'].append("../../") if ksdkProj.useBSP: self.cIncludes['listOptionValue'].append("../../board") ## Add device specific driver include paths if ksdkProj.libList[0] != 'hal': for d in ksdkProj.drvList: for p in d[1]: if not self.projRelPath + p in self.cIncludes['listOptionValue']: self.cIncludes['listOptionValue'].append(self.projRelPath + p) else: for d in ksdkProj.halList: for p in d[1]: if not self.projRelPath + p in self.cIncludes['listOptionValue']: self.cIncludes['listOptionValue'].append(self.projRelPath + p) # Add rtos paths if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/FreeRTOS/config/' + self.device[1][1:] + '/gcc') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/FreeRTOS/port/gcc') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/FreeRTOS/include') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/FreeRTOS/src') self.asmIncludes['listOptionValue'].append(self.projRelPath + 'rtos/FreeRTOS/config/' + self.device[1][1:] + '/gcc') #print self.asmIncludes #print self.asmIncludes['listOptionValue'] #print self.asmIncludes['listOptionValue'][0] elif ksdkProj.rtos == 'mqx': archType = 'M4' if (self.device[4] == 'cm4') else 'M0' self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.atl/debug') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.atl/debug/config') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.atl/debug/mqx') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.atl/debug/mqx_stdlib') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/config/mcu/' + self.device[1]) self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/config/board/' + ksdkProj.board[1]) self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/bsp') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/compiler/gcc_arm') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/core/' + archType) self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/cpu') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/include') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/config/common') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_dummy') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_mem') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_null') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_pipe') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_serial') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_tfs') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_tty') elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSII/src/uCOS-II/Ports/' + archType + '/Generic/GNU') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSII/src/uC-CPU/' + archType + '/GNU') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSII/src/config') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSII/src/uCOS-II/Source') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSII/src/uC-CPU') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSII/src/uC-LIB') elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSIII/src/uCOS-III/Ports/' + archType + '/Generic/GNU') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-CPU/' + archType + '/GNU') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSIII/src/config') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSIII/src/uCOS-III/Source') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-CPU') self.cIncludes['listOptionValue'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-LIB') if ksdkProj.rtos == 'bm': self.linkLibs['libName'][0] = kT.string_replace(self.linkLibs['libName'][0],\ 'xxx', ksdkProj.libList[0]) else: self.linkLibs['libName'][0] = 'ksdk_platform_' + ksdkProj.libList[0] self.linkLibs['libName'].append('m') self.linkLibs['libPath'][0] = self.projRelPath + self.linkLibs['libPath'][0] self.linkLibs['libPath'][0] = kT.string_replace(self.linkLibs['libPath'][0],\ 'xxx', ksdkProj.libList[0]) if ksdkProj.rtos != 'bm': self.linkLibs['libPath'][0] = kT.string_replace(self.linkLibs['libPath'][0], \ 'libksdk_' + ksdkProj.libList[0] + '.a', \ 'libksdk_platform_' + ksdkProj.libList[0] + '.a') self.linkLibs['libPath'][0] = kT.string_replace(self.linkLibs['libPath'][0], \ 'ddd', ksdkProj.device[1][1:]) if ksdkProj.rtos == 'mqx': mqxLib = '_mqx' self.linkLibs['libName'].append(mqxLib) mqxPath = self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.atl/debug/mqx' self.linkLibs['libPath'].append(mqxPath) mqxStdLib = '_mqx_stdlib' self.linkLibs['libName'].append(mqxStdLib) mqxStdPath = self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.atl/debug/mqx_stdlib' self.linkLibs['libPath'].append(mqxStdPath) # l = kT.string_replace(l, 'zzz', ksdkProj.rtos) # kT.debug_log(l) # if self.projType == 'usb': # l = kT.string_replace(l, 'yyy', ksdkProj.board[1]) # b = l kT.debug_log(self.linkLibs['libName']) kT.debug_log(self.linkLibs['libPath']) # Configure linker stack and heap if self.projType == 'usb': if ksdkProj.rtos == 'bm': if 'kl' in ksdkProj.board[1]: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x400' else: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x1000' else: if 'kl' in ksdkProj.board[1]: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x400' else: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x1000' tree = ET.ElementTree(ET.fromstring(aF.formatted_cproject)) root = tree.getroot() for child in root.findall('storageModule'): for config in child.findall('cconfiguration'): for module in config.findall('storageModule'): if module.get('moduleId') == "cdtBuildSystem": for configure in module.findall('configuration'): buildVer = configure.get('name') for folder in configure.findall('folderInfo'): for toolC in folder.findall('toolChain'): #for option in toolC.findall('option'): # if option.get('superClass') == "com.atollic.truestudio.as.general.otherflags": # option.set('value', " -mcpu=cortex-" + ksdkProj.device[4][1:]) # if option.get('superClass') == "com.atollic.truestudio.gcc.misc.otherflags": # option.set('value', " -mcpu=cortex-" + ksdkProj.device[4][1:]) # if option.get('superClass') == "com.atollic.truestudio.common_options.target.fpu": # optionVal = "hard" if ksdkProj.device[3] else "soft" # print optionVal # option.set('value', "com.atollic.truestudio.common_options.target.fpu." + optionVal) for tool in toolC.findall('tool'): #Add assembler options if tool.get('name') == "Assembler": for label in tool.findall('option'): if label.get('superClass') == "com.atollic.truestudio.common_options.target.fpu": optionVal = "hard" if ksdkProj.device[3] else "soft" #print optionVal label.set('value', "com.atollic.truestudio.common_options.target.fpu." + optionVal) if label.get('superClass') == "com.atollic.truestudio.as.general.otherflags": label.set('value', " -mcpu=cortex-" + ksdkProj.device[4][1:]) if label.get('superClass') == "com.atollic.truestudio.as.general.incpath": if ksdkProj.rtos == 'freertos': for a in self.asmIncludes['listOptionValue']: path = ET.Element('listOptionValue', {'builtIn': 'false', 'value': a}) label.append(path) #Add compiler options if tool.get('name') == "C Compiler": for label in tool.findall('option'): #Add include paths if label.get('superClass') == "com.atollic.truestudio.gcc.directories.select": #Add New Include paths for i in self.cIncludes['listOptionValue']: path = ET.Element('listOptionValue', {'builtIn': 'false', 'value': i}) label.append(path) #Add compiler defines if label.get('superClass') == "com.atollic.truestudio.gcc.symbols.defined": # Add new project defines for d in self.cDefines['listOptionValue']: define = ET.Element('listOptionValue', {'builtIn': 'false', 'value': d}) label.append(define) if label.get('superClass') == "com.atollic.truestudio.common_options.target.fpu": optionVal = "hard" if ksdkProj.device[3] else "soft" #print optionVal label.set('value', "com.atollic.truestudio.common_options.target.fpu." + optionVal) if label.get('superClass') == "com.atollic.truestudio.gcc.misc.otherflags": label.set('value', " -mcpu=cortex-" + ksdkProj.device[4][1:]) #Add linker options if tool.get('name') == "C Linker": for label in tool.findall('option'): #Add linker script if label.get('superClass') == "com.atollic.truestudio.ld.general.scriptfile": for l in self.linkLd['listOptionValue']: label.set('value', l) #Add other objects (.a files such as libksdk_platform.a) if label.get('superClass') == "com.atollic.truestudio.ld.libraries.list": for l in self.linkLibs['libName']: lib = ET.Element('listOptionValue', {'builtIn': 'false', 'value': l}) label.append(lib) if label.get('superClass') == "com.atollic.truestudio.ld.libraries.searchpath": #Add necessary linker objects if buildVer == 'debug': for l in self.linkLibs['libPath']: lib = ET.Element('listOptionValue', {'builtIn': 'false', 'value': l}) label.append(lib) else: for l in self.linkLibs['libPath']: temp = kT.string_replace(l, 'debug', 'release') lib = ET.Element('listOptionValue', {'builtIn': 'false', 'value': temp}) label.append(lib) if label.get('superClass') == "com.atollic.truestudio.ld.misc.linkerflags": temp = label.get('value') if ksdkProj.device[4][1:] != 'm4': temp = kT.string_replace(temp, 'm4', ksdkProj.device[4][1:]) if ksdkProj.rtos != 'bm': temp += ' -Xlinker --defsym=__ram_vector_table__=1' if ksdkProj.rtos == 'mqx': temp += ' -Xlinker --undefined=__isr_vector' label.set('value', temp) prettyRoot = kT.pretty_xml(root, "UTF-8") # Write data to file if not os.path.isdir(kdsPath): os.makedirs(kdsPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(kdsPath + '/.cproject', "UTF-8") kT.cdt_fix_post_xml(kdsPath) return
def gen_eww(self, ksdkProj): """ Generate the eww files for IAR project :param ksdkProj: Instance of a KSDK project """ # Get relative path iarPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/iar' if self.isLinked: self.wsRelPath = '$WS_DIR$/' + kT.get_rel_path(iarPath, ksdkProj.sdkPath) + '/' else: self.wsRelPath = '$WS_DIR$/../' # Get project library names ## hal or platform library if ksdkProj.rtos == 'bm': sdkLibName = 'ksdk_' + ksdkProj.libList[0] + '_lib' sdkLibPath = 'lib/ksdk_' + ksdkProj.libList[0] + '_lib/iar/' + ksdkProj.device[1][1:] + '/ksdk_' + ksdkProj.libList[0] + '_lib' else: sdkLibName = 'ksdk_' + ksdkProj.rtos + '_lib' sdkLibPath = 'lib/ksdk_' + ksdkProj.rtos + '_lib/iar/' + ksdkProj.device[1][1:] + '/ksdk_' + ksdkProj.rtos + '_lib' if ksdkProj.rtos == 'mqx': mqxLibName = 'mqx_' + ksdkProj.board[1] mqxLibPath = 'rtos/mqx/mqx/build/iar/' + mqxLibName + '/' + mqxLibName + '.ewp' mqxStdLibName = 'mqx_stdlib_' + ksdkProj.board[1] mqxStdLibPath = 'rtos/mqx/mqx_stdlib/build/iar/' + mqxStdLibName + '/' + mqxStdLibName + '.ewp' # Populate dictionaries with ksdkProj info ## All self.wsBatchAll['member'][0]['project'] = self.name self.wsBatchAll['member'][1]['project'] = self.name self.wsBatchAll['member'].append({'project': sdkLibName, \ 'configuration': 'Release'}) self.wsBatchAll['member'].append({'project': sdkLibName, \ 'configuration': 'Debug'}) ## Release self.wsBatchRls['member'][0]['project'] = self.name self.wsBatchRls['member'].append({'project': sdkLibName, \ 'configuration': 'Release'}) ## Debug self.wsBatchDbg['member'][0]['project'] = self.name self.wsBatchDbg['member'].append({'project': sdkLibName, \ 'configuration': 'Debug'}) if ksdkProj.rtos == 'mqx': self.wsBatchAll['member'].append({'project': mqxLibName, \ 'configuration': 'Debug'}) self.wsBatchAll['member'].append({'project': mqxLibName, \ 'configuration': 'Release'}) self.wsBatchDbg['member'].append({'project': mqxLibName, \ 'configuration': 'Debug'}) self.wsBatchRls['member'].append({'project': mqxLibName, \ 'configuration': 'Release'}) self.wsBatchAll['member'].append({'project': mqxStdLibName, \ 'configuration': 'Debug'}) self.wsBatchAll['member'].append({'project': mqxStdLibName, \ 'configuration': 'Release'}) self.wsBatchDbg['member'].append({'project': mqxStdLibName, \ 'configuration': 'Debug'}) self.wsBatchRls['member'].append({'project': mqxStdLibName, \ 'configuration': 'Release'}) # Create tree tree = ET.ElementTree() # Set root root = ET.Element('workspace') # Create subelements for batch builds batch = ET.SubElement(root, 'batchBuild') ## All batchDefAll = ET.SubElement(batch, 'batchDefinition') batchName = ET.SubElement(batchDefAll, 'name') batchName.text = self.wsBatchAll['name'] for m in self.wsBatchAll['member']: batchMember = ET.SubElement(batchDefAll, 'member') batchProj = ET.SubElement(batchMember, 'project') batchProj.text = m['project'] batchConfig = ET.SubElement(batchMember, 'configuration') batchConfig.text = m['configuration'] ## Release batchDefRls = ET.SubElement(batch, 'batchDefinition') batchName = ET.SubElement(batchDefRls, 'name') batchName.text = self.wsBatchRls['name'] for m in self.wsBatchRls['member']: batchMember = ET.SubElement(batchDefRls, 'member') batchProj = ET.SubElement(batchMember, 'project') batchProj.text = m['project'] batchConfig = ET.SubElement(batchMember, 'configuration') batchConfig.text = m['configuration'] ## Debug batchDefDbg = ET.SubElement(batch, 'batchDefinition') batchName = ET.SubElement(batchDefDbg, 'name') batchName.text = self.wsBatchDbg['name'] for m in self.wsBatchDbg['member']: batchMember = ET.SubElement(batchDefDbg, 'member') batchProj = ET.SubElement(batchMember, 'project') batchProj.text = m['project'] batchConfig = ET.SubElement(batchMember, 'configuration') batchConfig.text = m['configuration'] # Edit dictionary to add ksdkProj info self.projPaths['path'].append('$WS_DIR$/' + self.name + '.ewp') self.projPaths['path'].append(self.wsRelPath + sdkLibPath + '.ewp') if ksdkProj.rtos == 'mqx': self.projPaths['path'].append(self.wsRelPath + mqxLibPath) self.projPaths['path'].append(self.wsRelPath + mqxStdLibPath) # Populate project paths for p in self.projPaths['path']: proj = ET.SubElement(root, 'project') projPath = ET.SubElement(proj, 'path') projPath.text = p # Format data to make it more readable prettyRoot = kT.pretty_xml(root, "iso-8859-1") #print prettyRoot # Write data to file if not os.path.isdir(iarPath): os.mkdir(iarPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(iarPath + '/' + self.name + '.eww', "iso-8859-1") return
def gen_ewp(self, ksdkProj): """ Generate the ewp files for IAR project :param ksdkProj: Instance of a KSDK project """ iarPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/iar' if self.isLinked: self.projRelPath = '$PROJ_DIR$/' + kT.get_rel_path(iarPath, ksdkProj.sdkPath) + '/' else: self.projRelPath = '$PROJ_DIR$/../' # Populate ksdkProj specifics to dictionaries ## Set name of out file self.linkOut['state'] = self.name + '.out' ## Configure linker option self.linkIcf['state'] = self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/linker/iar/' +\ ksdkProj.device[0] + '_flash.icf' ## Set a define for the device self.cDefines['state'].append('CPU_' + ksdkProj.device[2]) ## Added to fix K80 application build issues ## #if (ksdkProj.device[1] == 'MK80F25615') or (ksdkProj.device[1] == 'MK82F25615'): # self.cDefines['state'].append('USING_DIRECT_INTERFACE=1') ## Added to fix UART smartcard application build issues ## if ksdkProj.libList[0] != 'hal': for d in ksdkProj.drvList: if d[0] == 'smartcard': if kT.get_smartcard_type(ksdkProj.sdkPath, ksdkProj.device[1]) == (1 << 8): self.cDefines['state'].append('USING_DIRECT_INTERFACE=1') elif kT.get_smartcard_type(ksdkProj.sdkPath, ksdkProj.device[1]) == 1: self.cDefines['state'].append('USING_NCN8025_INTERFACE=1') ################################################################################ if ksdkProj.useBSP: boardType = ksdkProj.board[0][:ksdkProj.board[0].find('_')] self.cDefines['state'].append(ksdkProj.board[0]) if boardType == 'FRDM': self.cDefines['state'].append('FREEDOM') elif boardType == 'TWR': self.cDefines['state'].append('TOWER') elif boardType == 'USB': self.cDefines['state'].append('BOARD_USE_VIRTUALCOM') self.cDefines['state'].append('DONGLE') elif boardType == 'MRB': self.cDefines['state'].append('MRB_KW01') if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cDefines['state'].append('FSL_RTOS_FREE_RTOS') elif ksdkProj.rtos == 'mqx': self.cDefines['state'].append('FSL_RTOS_MQX') elif ksdkProj.rtos == 'ucosii': self.cDefines['state'].append('FSL_RTOS_UCOSII') elif ksdkProj.rtos == 'ucosiii': self.cDefines['state'].append('FSL_RTOS_UCOSIII') ## Add C include paths necessary for project if ksdkProj.libList[0] != 'hal': self.cIncludes['state'].append(self.projRelPath + 'platform/osa/inc') self.cIncludes['state'].append(self.projRelPath + 'platform/utilities/inc') self.cIncludes['state'].append(self.projRelPath + 'platform/CMSIS/Include') self.cIncludes['state'].append(self.projRelPath + 'platform/devices') self.cIncludes['state'].append(self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/include') self.cIncludes['state'].append(self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/startup') self.cIncludes['state'].append(self.projRelPath + 'platform/hal/inc') if ksdkProj.libList[0] != 'hal': self.cIncludes['state'].append(self.projRelPath + 'platform/drivers/inc') self.cIncludes['state'].append(self.projRelPath + 'platform/system/inc') self.cIncludes['state'].append("$PROJ_DIR$/../../..") if ksdkProj.useBSP: self.cIncludes['state'].append("$PROJ_DIR$/../board") ## Add device specific driver include paths if ksdkProj.libList[0] != 'hal': for d in ksdkProj.drvList: for p in d[1]: if not self.projRelPath + p in self.cIncludes['state']: self.cIncludes['state'].append(self.projRelPath + p) else: for d in ksdkProj.halList: for p in d[1]: if not self.projRelPath + p in self.cIncludes['state']: self.cIncludes['state'].append(self.projRelPath + p) # Add rtos paths if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/config/' + self.device[1][1:] + '/iar') self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/port/iar') self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/include') self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/src') self.asmIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/config/' + self.device[1][1:] + '/iar') #print self.asmIncludes #print self.asmIncludes['state'] #print self.asmIncludes['state'][0] elif ksdkProj.rtos == 'mqx': archType = 'M4' if (self.device[4] == 'cm4') else 'M0' self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.iar/debug') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.iar/debug/config') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.iar/debug/mqx') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.iar/debug/mqx_stdlib') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/config/mcu/' + self.device[1]) self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/config/board/' + ksdkProj.board[1]) self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/bsp') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/compiler/iar') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/core/' + archType) self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/cpu') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/include') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/config/common') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_dummy') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_mem') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_null') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_pipe') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_serial') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_tfs') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_tty') elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uCOS-II/Ports/' + archType + '/Generic/IAR') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uC-CPU/' + archType + '/IAR') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/config') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uCOS-II/Source') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uC-CPU') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uC-LIB') elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uCOS-III/Ports/' + archType + '/Generic/IAR') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-CPU/' + archType + '/IAR') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/config') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uCOS-III/Source') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-CPU') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-LIB') # Add relative paths to files index = 0 while index < len(self.ewpStartup['file']): self.ewpStartup['file'][index] = kT.string_replace(self.ewpStartup['file'][index],\ 'xxx', \ ksdkProj.device[1]) self.ewpStartup['file'][index] = self.projRelPath + self.ewpStartup['file'][index] index += 1 if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': index = 0 while index < len(self.ewpRtos['file']): self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'xxx',\ ksdkProj.device[1][1:]) self.ewpRtos['file'][index] = self.projRelPath + self.ewpRtos['file'][index] index += 1 elif ksdkProj.rtos == 'mqx': index = 0 while index < len(self.ewpRtos['file']): self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'xxx',\ ksdkProj.device[1]) self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'bbb',\ ksdkProj.board[1]) self.ewpRtos['file'][index] = self.projRelPath + self.ewpRtos['file'][index] index += 1 elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.ewpRtos['file']): self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'ccc',\ archType) self.ewpRtos['file'][index] = self.projRelPath + self.ewpRtos['file'][index] index += 1 elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.ewpRtos['file']): self.ewpRtos['file'][index] = kT.string_replace(self.ewpRtos['file'][index],\ 'ccc',\ archType) self.ewpRtos['file'][index] = self.projRelPath + self.ewpRtos['file'][index] index += 1 kT.debug_log(self.ewpStartup['file']) if ksdkProj.libList[0] != 'hal': index = 0 while index < len(self.ewpUtilities['file']): self.ewpUtilities['file'][index] = self.projRelPath + self.ewpUtilities['file'][index] index += 1 self.linkLibs['state'][0] = self.projRelPath + self.linkLibs['state'][0] self.linkLibs['state'][0] = kT.string_replace(self.linkLibs['state'][0], 'xxx', ksdkProj.libList[0]) if ksdkProj.rtos != 'bm': self.linkLibs['state'][0] = kT.string_replace(self.linkLibs['state'][0], \ 'libksdk_' + ksdkProj.libList[0] + '.a', \ 'libksdk_platform_' + ksdkProj.libList[0] + '.a') self.linkLibs['state'][0] = kT.string_replace(self.linkLibs['state'][0], 'ddd', ksdkProj.device[1][1:]) if ksdkProj.rtos == 'mqx': mqxLib = self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.iar/debug/mqx/lib_mqx.a' self.linkLibs['state'].append(mqxLib) mqxStdLib = self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.iar/debug/mqx_stdlib/lib_mqx_stdlib.a' self.linkLibs['state'].append(mqxStdLib) # l = kT.string_replace(l, 'zzz', ksdkProj.rtos) # kT.debug_log(l) # if self.projType == 'usb': # l = kT.string_replace(l, 'yyy', ksdkProj.board[1]) # b = l kT.debug_log(self.linkLibs['state']) # Configure linker stack and heap if self.projType == 'usb': if ksdkProj.rtos == 'bm': if 'kl' in ksdkProj.board[1]: self.linkDefines['state'][1] = '__stack_size__=0x400' else: self.linkDefines['state'][1] = '__stack_size__=0x1000' else: if 'kl' in ksdkProj.board[1]: self.linkDefines['state'][1] = '__stack_size__=0x400' else: self.linkDefines['state'][1] = '__stack_size__=0x1000' if ksdkProj.rtos == 'mqx': self.linkDefines['state'][0] = '__stack_size__=0x400' self.linkDefines['state'][1] = '__heap_size__=0x400' self.linkDefines['state'].append('__ram_vector_table__=1') elif ksdkProj.rtos == 'freertos': self.linkDefines['state'][0] = '__stack_size__=0x1000' self.linkDefines['state'][1] = '__heap_size__=0x1000' self.linkDefines['state'].append('__ram_vector_table__=1') elif ksdkProj.rtos == 'ucosii': self.linkDefines['state'][0] = '__stack_size__=0x1000' self.linkDefines['state'][1] = '__heap_size__=0x1000' self.linkDefines['state'].append('__ram_vector_table__=1') elif ksdkProj.rtos == 'ucosiii': self.linkDefines['state'][0] = '__stack_size__=0x1000' self.linkDefines['state'][1] = '__heap_size__=0x1000' self.linkDefines['state'].append('__ram_vector_table__=1') tree = ET.ElementTree(ET.fromstring(iF.iar_formatted_ewp)) for elem in tree.iter(tag='option'): for child in elem.findall('name'): if child.text == 'OGChipSelectEditMenu': projDev = ET.Element('state') projDev.text = ksdkProj.device[0] + '\tFreescale ' + ksdkProj.device[0] elem.append(projDev) if child.text == 'FPU': projFPU = ET.Element('state') projFPU.text = '5' if self.device[3] else '0' elem.append(projFPU) if child.text == 'GFPUCoreSlave': projFPU = ET.Element('state') projFPU.text = '39' if self.device[3] else '35' elem.append(projFPU) if child.text == 'GBECoreSlave': projBE = ET.Element('state') projBE.text = '39' if self.device[3] else '35' elem.append(projBE) if child.text == 'CCDefines': for d in self.cDefines['state']: projCDef = ET.Element('state') projCDef.text = d elem.append(projCDef) if child.text == 'IlinkConfigDefines': if ksdkProj.rtos != 'bm': for d in self.linkDefines['state']: projLDef = ET.Element('state') projLDef.text = d elem.append(projLDef) if child.text == 'IlinkOverrideProgramEntryLabel': if ksdkProj.rtos == 'mqx': for s in elem.findall('state'): s.text = '1' #print s.text if child.text == 'IlinkProgramEntryLabel': if ksdkProj.rtos == 'mqx': for s in elem.findall('state'): s.text = 'Reset_Handler' #print s.text if child.text == 'IlinkOutputFile': projOut = ET.Element('state') projOut.text = self.linkOut['state'] elem.append(projOut) if child.text == 'IlinkIcfFile': projIcf = ET.Element('state') projIcf.text = self.linkIcf['state'] elem.append(projIcf) if child.text == 'IlinkAdditionalLibs': for l in self.linkLibs['state']: projLib = ET.Element('state') projLib.text = l elem.append(projLib) if child.text == 'CCIncludePath2': for i in self.cIncludes['state']: projInc = ET.Element('state') projInc.text = i elem.append(projInc) if child.text == 'AUserIncludes': #print "ASM Inlcudes" if ksdkProj.rtos == 'freertos': asmInc = ET.Element('state') asmInc.text = self.asmIncludes['state'][0] elem.append(asmInc) # Add file groups to ewp file root = tree.getroot() if ksdkProj.rtos != 'mqx': startGrp = ET.SubElement(root, 'group') startName = ET.SubElement(startGrp, 'name') startName.text = self.ewpStartup['name'] for f in self.ewpStartup['file']: startFile = ET.SubElement(startGrp, 'file') startFName = ET.SubElement(startFile, 'name') startFName.text = f sourceGrp = ET.SubElement(root, 'group') sourceName = ET.SubElement(sourceGrp, 'name') sourceName.text = self.ewpSources['name'] for f in self.ewpSources['file']: sourceFile = ET.SubElement(sourceGrp, 'file') sourceFName = ET.SubElement(sourceFile, 'name') sourceFName.text = f if ksdkProj.useBSP: boardGrp = ET.SubElement(root, 'group') boardName = ET.SubElement(boardGrp, 'name') boardName.text = self.ewpBoard['name'] for f in self.ewpBoard['file']: boardFile = ET.SubElement(boardGrp, 'file') boardFName = ET.SubElement(boardFile, 'name') boardFName.text = f if ksdkProj.libList[0] != 'hal': utilsGrp = ET.SubElement(root, 'group') utilsName = ET.SubElement(utilsGrp, 'name') utilsName.text = self.ewpUtilities['name'] for f in self.ewpUtilities['file']: utilsFile = ET.SubElement(utilsGrp, 'file') utilsFName = ET.SubElement(utilsFile, 'name') utilsFName.text = f if ksdkProj.rtos != 'bm': rtosGrp = ET.SubElement(root, 'group') rtosName = ET.SubElement(rtosGrp, 'name') rtosName.text = self.ewpRtos['name'] for f in self.ewpRtos['file']: rtosFile = ET.SubElement(rtosGrp, 'file') rtosFName = ET.SubElement(rtosFile, 'name') rtosFName.text = f prettyRoot = kT.pretty_xml(root, "iso-8859-1") # Write data to file if not os.path.isdir(iarPath): os.makedirs(iarPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(iarPath + '/' + self.name + '.ewp', "iso-8859-1") # Gen ewd while we are here tree = ET.ElementTree(ET.fromstring(iF.iar_formatted_ewd)) for elem in tree.iter(tag='option'): for child in elem.findall('name'): if child.text == 'OCDynDriverList': for state in elem.findall('state'): state.text = 'CMSISDAP_ID' if (self.device[4] == 'cm4') else 'PEMICRO_ID' if child.text == 'CMSISDAPResetList': for state in elem.findall('state'): state.text = '5' if (self.device[4] == 'cm4') else '10' if child.text == 'CMSISDAPInterfaceRadio': for state in elem.findall('state'): state.text = '1' if (self.device[4] == 'cm4') else '0' if child.text == 'CMSISDAPSelectedCPUBehaviour': for state in elem.findall('state'): state.text = '' if (self.device[4] == 'cm4') else '0' tree.write(iarPath + '/' + self.name + '.ewd', "iso-8859-1") return
def gen_project(self, ksdkProj): """ Generate the eww files for KDS project :param ksdkProj: Instance of a KSDK project """ # Get relative path atlPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/atl' relPath = '' if self.isLinked: tempStr = kT.get_rel_path(atlPath, ksdkProj.sdkPath) + '/' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../' tree = ET.ElementTree(ET.fromstring(aF.formatted_project)) root = tree.getroot() for child in root: if child.tag == 'name': child.text = str(self.name + '_' + ksdkProj.device[2]) if child.tag == 'linkedResources': #Add linked resources if ksdkProj.useBSP == True: #Add board file links for b in self.projBoard: link = ET.Element('link') child.append(link) linkName = ET.Element('name') linkName.text = b['name'] link.append(linkName) linkType = ET.Element('type') linkType.text = b['type'] link.append(linkType) linkURI = ET.Element('locationURI') linkURI.text = b['locationURI'] link.append(linkURI) for s in self.projStartup: link = ET.Element('link') child.append(link) linkName = ET.Element('name') tempName = kT.string_replace(s['name'], ksdkKdsNew.DEVICE_NAME_CONSTANT, ksdkProj.device[1]) tempName = kT.string_replace(tempName, ksdkKdsNew.LINKER_NAME_CONSTANT, ksdkProj.device[0] + "_flash.ld") linkName.text = tempName link.append(linkName) linkType = ET.Element('type') linkType.text = s['type'] link.append(linkType) linkURI = ET.Element('locationURI') tempURI = kT.string_replace(s['locationURI'], ksdkKdsNew.DEVICE_NAME_CONSTANT, ksdkProj.device[1]) tempURI = kT.string_replace(tempURI, ksdkKdsNew.LINKER_NAME_CONSTANT, ksdkProj.device[0] + "_flash.ld") if ksdkProj.isLinked == False: tempURI = kT.string_replace(tempURI, 'PROJECT_KSDK', 'PARENT-1-PROJECT_LOC') #print tempURI linkURI.text = tempURI link.append(linkURI) if ksdkProj.rtos != 'bm': for r in self.projRtos: link = ET.Element('link') child.append(link) linkName = ET.Element('name') linkName.text = r['name'] link.append(linkName) linkType = ET.Element('type') linkType.text = r['type'] link.append(linkType) linkURI = ET.Element('locationURI') tempURI = r[ksdkObj.LOCATION_URI_KEY] if ksdkProj.isLinked == False: tempURI = kT.string_replace(r[ksdkObj.LOCATION_URI_KEY], 'PROJECT_KSDK', 'PARENT-1-PROJECT_LOC') #print tempURI linkURI.text = tempURI link.append(linkURI) for c in self.projSources + self.projTemplates: link = ET.Element('link') child.append(link) linkName = ET.Element('name') linkName.text = c['name'] link.append(linkName) linkType = ET.Element('type') linkType.text = c['type'] link.append(linkType) linkURI = ET.Element('locationURI') linkURI.text = c['locationURI'] link.append(linkURI) # Add variable to project for KSDK path if ksdkProj.isLinked: projVarList = ET.SubElement(root, 'variableList') root.append(projVarList) projVar = ET.Element('variable') projVarList.append(projVar) varName = ET.Element('name') varName.text = "PROJECT_KSDK" projVar.append(varName) varVal = ET.Element('value') if ksdkProj.osType == 'Windows': varVal.text = "file:/" + kT.string_replace(ksdkProj.sdkPath, '\\', '/') else: varVal.text = "file:" + ksdkProj.sdkPath projVar.append(varVal) # Format data to make it more readable prettyRoot = kT.pretty_xml(root, "UTF-8") #print prettyRoot # Write data to file if not os.path.isdir(atlPath): os.mkdir(atlPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(atlPath + '/.project', "UTF-8") return
def gen_cproject(self, ksdkProj): """ Generate the cproject file for KDS project :param ksdkProj: Instance of a KSDK project """ kdsPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/atl' relPath = '' if self.isLinked: tempStr = kT.get_rel_path(kdsPath, ksdkProj.sdkPath) + '/../' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../../' self.projRelPath = relPath # Populate ksdkProj specifics to dictionaries ## Configure linker option ## Configure linker option self.linkLd['listOptionValue'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getLinkerPath(ksdkProj.device, 'gcc', False)) ## Set a define for the device self.cDefines['listOptionValue'].append('CPU_' + ksdkProj.device[2]) if ksdkProj.rtos != 'bm': param = self.parentProject.parent.getSmartcardParam(ksdkProj.device[1]) if param is not None: self.cDefines['listOptionValue'].append(param) if ksdkProj.rtos == 'freertos': self.cDefines['listOptionValue'].append('FSL_RTOS_FREE_RTOS') elif ksdkProj.rtos == 'ucosii': self.cDefines['listOptionValue'].append('FSL_RTOS_UCOSII') elif ksdkProj.rtos == 'ucosiii': self.cDefines['listOptionValue'].append('FSL_RTOS_UCOSIII') ## Add C include paths necessary for project self.cIncludes['listOptionValue'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getCMSISIncludeDirectory(False)) self.cIncludes['listOptionValue'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory()) self.cIncludes['listOptionValue'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1]) self.cIncludes['listOptionValue'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1] + os.sep + Constants.DRIVERS_FOLDER) self.cIncludes['listOptionValue'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1] + os.sep + Constants.UTILITIES_FOLDER) self.cIncludes['listOptionValue'].append("../../") # Add rtos paths if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cIncludes['listOptionValue'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getFreertosDirectoriesPaths(self.archType, ToolchainType.KinetisDesignStudio, self.parentProject.board[1])) elif ksdkProj.rtos == 'ucosii': self.cIncludes['listOptionValue'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getuCOSIIDirectoriesPaths(self.archType, ToolchainType.KinetisDesignStudio, self.parentProject.board[1])) elif ksdkProj.rtos == 'ucosiii': self.cIncludes['listOptionValue'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getuCOSIIIDirectoriesPaths(self.archType, ToolchainType.KinetisDesignStudio, self.parentProject.board[1])) # l = kT.string_replace(l, 'zzz', ksdkProj.rtos) # kT.debug_log(l) # if self.projType == 'usb': # l = kT.string_replace(l, 'yyy', ksdkProj.board[1]) # b = l # Configure linker stack and heap if self.projType == 'usb': if ksdkProj.rtos == 'bm': if 'kl' in ksdkProj.board[1]: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x400' else: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x1000' else: if 'kl' in ksdkProj.board[1]: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x400' else: self.linkDefines['listOptionValue'][1] = '__stack_size__=0x1000' tree = ET.ElementTree(ET.fromstring(aF.formatted_cproject)) root = tree.getroot() #exclude drivers from build excludedDriversText = '' driverPaths = [(Constants.DRIVERS_FOLDER if d[ksdkObj.LOCATION_URI_KEY].find(Constants.DRIVERS_FOLDER) != -1 else Constants.UTILITIES_FOLDER) + '/' + d[ksdkObj.NAME_KEY] for d in self.parentProject.parent.getDriversExcludedFromBuild(ksdkProj.device[1])] for f in driverPaths: if f.endswith('.c'): excludedDriversText += f if not driverPaths.index(f) == len(driverPaths): excludedDriversText += '|' for excludeEntry in root.findall('.//sourceEntries'): elem = ET.Element('entry', {'excluding': excludedDriversText, 'flags':'VALUE_WORKSPACE_PATH', 'kind':'sourcePath', 'name':''}) excludeEntry.insert(0, elem) for child in root.findall('storageModule'): for config in child.findall('cconfiguration'): for module in config.findall('storageModule'): if module.get('moduleId') == "cdtBuildSystem": for configure in module.findall('configuration'): buildVer = configure.get('name') for folder in configure.findall('folderInfo'): for toolC in folder.findall('toolChain'): for tool in toolC.findall('tool'): #Add assembler options if tool.get('name') == "Assembler": for label in tool.findall('option'): if label.get('superClass') == "com.atollic.truestudio.common_options.target.fpu": optionVal = "hard" if ksdkProj.device[3] else "soft" #print optionVal label.set('value', "com.atollic.truestudio.common_options.target.fpu." + optionVal) if label.get('superClass') == "com.atollic.truestudio.as.general.otherflags": label.set('value', " -mcpu=cortex-" + ksdkProj.device[4][1:]) if label.get('superClass') == "com.atollic.truestudio.as.general.incpath": if ksdkProj.rtos == 'freertos': for a in self.asmIncludes['listOptionValue']: path = ET.Element('listOptionValue', {'builtIn': 'false', 'value': a}) label.append(path) #Add compiler options if tool.get('name') == "C Compiler": for label in tool.findall('option'): #Add include paths if label.get('superClass') == "com.atollic.truestudio.gcc.directories.select": #Add New Include paths for i in self.cIncludes['listOptionValue']: path = ET.Element('listOptionValue', {'builtIn': 'false', 'value': i}) label.append(path) #Add compiler defines if label.get('superClass') == "com.atollic.truestudio.gcc.symbols.defined": # Add new project defines for d in self.cDefines['listOptionValue']: define = ET.Element('listOptionValue', {'builtIn': 'false', 'value': d}) label.append(define) if label.get('superClass') == "com.atollic.truestudio.common_options.target.fpu": optionVal = "hard" if ksdkProj.device[3] else "soft" #print optionVal label.set('value', "com.atollic.truestudio.common_options.target.fpu." + optionVal) if label.get('superClass') == "com.atollic.truestudio.gcc.misc.otherflags": label.set('value', " -mcpu=cortex-" + ksdkProj.device[4][1:]) #Add linker options if tool.get('name') == "C Linker": for label in tool.findall('option'): #Add linker script if label.get('superClass') == "com.atollic.truestudio.ld.general.scriptfile": for l in self.linkLd['listOptionValue']: label.set('value', l) if label.get('superClass') == "com.atollic.truestudio.ld.misc.linkerflags": temp = label.get('value') if ksdkProj.device[4][1:] != 'm4': temp = kT.string_replace(temp, 'm4', ksdkProj.device[4][1:]) if ksdkProj.rtos != 'bm': temp += ' -Xlinker --defsym=__ram_vector_table__=1' if ksdkProj.rtos == 'mqx': temp += ' -Xlinker --undefined=__isr_vector' label.set('value', temp) prettyRoot = kT.pretty_xml(root, "UTF-8") # Write data to file if not os.path.isdir(kdsPath): os.makedirs(kdsPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(kdsPath + '/.cproject', "UTF-8") kT.cdt_fix_post_xml(kdsPath) return
def gen_proj(self, ksdkProj): """ Generate the uvprojx files for Keil project :param ksdkProj: Instance of a KSDK project """ # Get relative path mdkPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/mdk' relPath = '' if self.isLinked: tempStr = kT.get_rel_path(mdkPath, ksdkProj.sdkPath) + '/' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../' self.projRelPath = relPath ## Configure linker option self.linkScf['state'] = self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getLinkerPath(ksdkProj.device, 'arm', False) ## Set a define for the device self.cDefines['state'].append('CPU_' + ksdkProj.device[2]) if ksdkProj.rtos != 'bm': param = self.parentProject.parent.getSmartcardParam(ksdkProj.device[1]) if param is not None: self.cDefines['state'].append(param) if ksdkProj.rtos == 'freertos': self.cDefines['state'].append('FSL_RTOS_FREE_RTOS') elif ksdkProj.rtos == 'ucosii': self.cDefines['state'].append('FSL_RTOS_UCOSII') elif ksdkProj.rtos == 'ucosiii': self.cDefines['state'].append('FSL_RTOS_UCOSIII') ## Add C include paths necessary for project self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getCMSISIncludeDirectory(False)) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory()) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1]) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1] + os.sep + Constants.DRIVERS_FOLDER) self.cIncludes['state'].append(self.projRelPath + self.parentProject.parent.getDirectoryStructureHelper().getDevicesDirectory() + os.sep + ksdkProj.device[1] + os.sep + Constants.UTILITIES_FOLDER) self.cIncludes['state'].append("../../") # in project root, there are application files in case of rtos, so it has to be added to cIncludes self.cIncludes['state'].append("../") # Add rtos paths if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cIncludes['state'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getFreertosDirectoriesPaths(self.archType, ToolchainType.KeilMDK, self.parentProject.board[1])) #FIXME Radka find out why self.asmIncludes['state'].append('..') elif ksdkProj.rtos == 'ucosii': self.cIncludes['state'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getuCOSIIDirectoriesPaths(self.archType, ToolchainType.KeilMDK, self.parentProject.board[1])) elif ksdkProj.rtos == 'ucosiii': self.cIncludes['state'].extend(self.projRelPath + directoryPath for directoryPath in self.parentProject.parent.getuCOSIIIDirectoriesPaths(self.archType, ToolchainType.KeilMDK, self.parentProject.board[1])) # Add relative paths to files prePend = self.projRelPath + '{0}' self.projStartup['FileName'] = [f.replace('xxx', ksdkProj.device[1]) for f in self.projStartup['FileName']] self.projStartup['FilePath'] = [f.replace('xxx', ksdkProj.device[1]) for f in self.projStartup['FilePath']] self.projStartup['FileName'] = [f.replace(ksdkKdsNew.LINKER_NAME_CONSTANT, ksdkProj.device[0] + '_flash.scf') for f in self.projStartup['FileName']] self.projStartup['FilePath'] = [f.replace(ksdkKdsNew.LINKER_NAME_CONSTANT, ksdkProj.device[0] + '_flash.scf') for f in self.projStartup['FilePath']] for d in [self.projCMSISFiles, self.projStartup, self.drivers, self.utilities]: d[FILEPATH] = [prePend.format(f) for f in d[FILEPATH]] if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': index = 0 while index < len(self.projRtos['FilePath']): self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'xxx',\ ksdkProj.device[1][1:]) self.projRtos['FilePath'][index] = self.projRelPath + self.projRtos['FilePath'][index] index += 1 elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.projRtos['FilePath']): self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'ccc',\ archType) self.projRtos['FilePath'][index] = self.projRelPath + self.projRtos['FilePath'][index] index += 1 elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.projRtos['FilePath']): self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'ccc',\ archType) self.projRtos['FilePath'][index] = self.projRelPath + self.projRtos['FilePath'][index] index += 1 kT.debug_log(self.projStartup['FileName']) kT.debug_log(self.projStartup['FilePath']) projMem = self.get_memory_loc(ksdkProj) #print 'Memory loc/size: ' + str(projMem) peDebug = "PEMicro\\Pemicro_ArmCortexInterface.dll" cmDebug = "BIN\\CMSIS_AGDI.dll" tree = ET.ElementTree(ET.fromstring(mF.mdk_formatted_uvprojx)) for elem in tree.iter(tag='TargetName'): if 'Debug' in elem.text: elem.text = self.name + ' Debug' else: elem.text = self.name + ' Release' for elem in tree.iter(tag='Device'): elem.text = self.device[0] for elem in tree.iter(tag='OutputName'): elem.text = self.name + '.out' for elem in tree.iter(tag='Driver'): elem.text = cmDebug if (self.device[4] == 'cm4') else peDebug for elem in tree.iter(tag='AdsCpuType'): elem.text = "\"Cortex-M4\"" if (self.device[4] == 'cm4') else "\"Cortex-M0+\"" for elem in tree.iter(tag='RvdsVP'): elem.text = '2' if self.device[3] else '1' for elem in tree.iter(tag='Ir1Chk'): elem.text = '1' for elem in tree.iter(tag='Im1Chk'): elem.text = '1' for elem in tree.iter(tag='Im2Chk'): elem.text = '0' if (projMem[4] == '') else '1' for elem in tree.iter(tag='IRAM'): for child in elem.findall('StartAddress'): child.text = projMem[2] for child in elem.findall('Size'): child.text = projMem[3] for elem in tree.iter(tag='IROM'): for child in elem.findall('StartAddress'): child.text = projMem[0] for child in elem.findall('Size'): child.text = projMem[1] for elem in tree.iter(tag='OCR_RVCT4'): for child in elem.findall('StartAddress'): child.text = projMem[0] for child in elem.findall('Size'): child.text = projMem[1] for elem in tree.iter(tag='OCR_RVCT9'): for child in elem.findall('StartAddress'): child.text = projMem[2] for child in elem.findall('Size'): child.text = projMem[3] for elem in tree.iter(tag='OCR_RVCT10'): for child in elem.findall('StartAddress'): child.text = '0x0' if (projMem[4] == '') else projMem[4] for child in elem.findall('Size'): child.text = '0x0' if (projMem[5] == '') else projMem[5] for elem in tree.iter(tag='Cads'): for child in elem.findall('VariousControls'): for defs in child.findall('Define'): temp = defs.text for d in self.cDefines['state']: temp += ', ' + d defs.text = temp for incl in child.findall('IncludePath'): temp = incl.text for i in self.cIncludes['state']: temp += '; ' + i incl.text = temp for elem in tree.iter(tag='Aads'): if ksdkProj.rtos == 'freertos': for child in elem.findall('VariousControls'): for incl in child.findall('IncludePath'): incl.text = self.asmIncludes['state'][0] for elem in tree.iter(tag='ScatterFile'): elem.text = self.linkScf['state'] for elem in tree.iter(tag='Groups'): listOfDicts = [self.projStartup, self.projCMSISFiles, self.drivers, self.utilities, self.templates, self.projSources] if ksdkProj.rtos != 'bm': listOfDicts.append(self.projRtos) for d in listOfDicts: group = ET.SubElement(elem, 'Group') name = ET.SubElement(group, 'GroupName') name.text = d['GroupName'] files = ET.SubElement(group, 'Files') index = 0 while index < len(d['FileName']): newFile = ET.SubElement(files, 'File') fileName = ET.SubElement(newFile, 'FileName') fileType = ET.SubElement(newFile, 'FileType') filePath = ET.SubElement(newFile, 'FilePath') fileNameText = d['FileName'][index] fileName.text = fileNameText fileType.text = d['FileType'][index] filePath.text = d['FilePath'][index] #add flag to drivers which should be excluded if (d == self.drivers) or (d == self.utilities): if fileNameText.endswith('.c'): dictToFindExcludedDrivers = self.drivers if d == self.drivers else self.utilities if fileNameText in dictToFindExcludedDrivers[ksdkIarNew.EXCLUDED_LIST]: fileOption = ET.SubElement(newFile, 'FileOption') commonProperty = ET.SubElement(fileOption, 'CommonProperty') includeInBuild = ET.SubElement(commonProperty, 'IncludeInBuild') alwaysBuild = ET.SubElement(commonProperty, 'AlwaysBuild') includeInBuild.text = 0 alwaysBuild.text =0 index += 1 root = tree.getroot() prettyRoot = kT.pretty_xml(root, "UTF-8") # Write data to file if not os.path.isdir(mdkPath): os.makedirs(mdkPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(mdkPath + '/' + self.name + '.uvprojx', "UTF-8") if 'MKL' in self.device[0]: setPath = mdkPath + '/pemicro_connection_settings.ini' setContent = mF.pemicro_connection_settings_ini setContent = kT.string_replace(setContent, 'dev_name', self.device[0][1:].replace('xxx', 'M')) with open(setPath, 'wb+') as f: f.write(setContent) f.close() return
def gen_wkspace(self, ksdkProj): """ Generate the uvmpw files for Keil project :param ksdkProj: Instance of a KSDK project """ # Get relative path mdkPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/mdk' relPath = '' if self.isLinked: tempStr = ksdkProj.sdkPath + '/' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../' self.projRelPath = relPath self.wsProjects['PathAndName'][0] = self.projRelPath + self.wsProjects['PathAndName'][0] self.wsProjects['PathAndName'][0] = kT.string_replace(self.wsProjects['PathAndName'][0], \ 'xxx', ksdkProj.libList[0]) if ksdkProj.rtos != 'bm': self.wsProjects['PathAndName'][0] = kT.string_replace(self.wsProjects['PathAndName'][0], \ 'libksdk_' + ksdkProj.libList[0] + '.lib', \ 'libksdk_platform_' + ksdkProj.libList[0] + '.lib') self.wsProjects['PathAndName'][0] = kT.string_replace(self.wsProjects['PathAndName'][0], \ 'ddd', ksdkProj.device[1][1:]) self.wsProjects['PathAndName'][1] = self.name + '.uvprojx' if ksdkProj.rtos == 'mqx': mqxLib = self.projRelPath + 'rtos/mqx/mqx/build/mdk/mqx_' + ksdkProj.board[1] + '/mqx_' + ksdkProj.board[1] + '.uvprojx' self.wsProjects['PathAndName'].insert(1, mqxLib) self.wsProjects['NodeIsActive'].insert(1, '0') mqxStdLib = self.projRelPath + 'rtos/mqx/mqx_stdlib/build/mdk/mqx_stdlib_' + ksdkProj.board[1] + '/mqx_stdlib_' + ksdkProj.board[1] + '.uvprojx' self.wsProjects['PathAndName'].insert(2, mqxStdLib) self.wsProjects['NodeIsActive'].insert(2, '0') tree = ET.ElementTree(ET.fromstring(mF.mdk_formatted_uvmpw)) root = tree.getroot() index = 0 while index < len(self.wsProjects['PathAndName']): project = ET.Element('project') root.append(project) pathName = ET.SubElement(project, 'PathAndName') pathName.text = self.wsProjects['PathAndName'][index] isActive = ET.SubElement(project, 'NodeIsActive') isActive.text = self.wsProjects['NodeIsActive'][index] index += 1 #print 'Project count: ' + str(index) prettyRoot = kT.pretty_xml(root, "UTF-8") # Write data to file if not os.path.isdir(mdkPath): os.makedirs(mdkPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(mdkPath + '/' + self.name + '.uvmpw', "UTF-8") return
def gen_proj(self, ksdkProj): """ Generate the uvprojx files for Keil project :param ksdkProj: Instance of a KSDK project """ # Get relative path mdkPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/mdk' relPath = '' if self.isLinked: tempStr = kT.get_rel_path(mdkPath, ksdkProj.sdkPath) + '/' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../' self.projRelPath = relPath ## Configure linker option self.linkScf['state'] = self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/linker/arm/' +\ ksdkProj.device[0] + '_flash.scf' ## Set a define for the device self.cDefines['state'].append('CPU_' + ksdkProj.device[2]) ## Added to fix K80 application build issues ## #if (ksdkProj.device[1] == 'MK80F25615') or (ksdkProj.device[1] == 'MK82F25615'): # self.cDefines['state'].append('USING_DIRECT_INTERFACE=1') ## Added to fix UART smartcard application build issues ## if ksdkProj.libList[0] != 'hal': for d in ksdkProj.drvList: if d[0] == 'smartcard': if kT.get_smartcard_type(ksdkProj.sdkPath, ksdkProj.device[1]) == (1 << 8): self.cDefines['state'].append('USING_DIRECT_INTERFACE=1') elif kT.get_smartcard_type(ksdkProj.sdkPath, ksdkProj.device[1]) == 1: self.cDefines['state'].append('USING_NCN8025_INTERFACE=1') ################################################################################ if ksdkProj.useBSP: boardType = ksdkProj.board[0][:ksdkProj.board[0].find('_')] self.cDefines['state'].append(ksdkProj.board[0]) if boardType == 'FRDM': self.cDefines['state'].append('FREEDOM') elif boardType == 'TWR': self.cDefines['state'].append('TOWER') elif boardType == 'USB': self.cDefines['state'].append('BOARD_USE_VIRTUALCOM') self.cDefines['state'].append('DONGLE') elif boardType == 'MRB': self.cDefines['state'].append('MRB_KW01') if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cDefines['state'].append('FSL_RTOS_FREE_RTOS') elif ksdkProj.rtos == 'mqx': self.cDefines['state'].append('FSL_RTOS_MQX') elif ksdkProj.rtos == 'ucosii': self.cDefines['state'].append('FSL_RTOS_UCOSII') elif ksdkProj.rtos == 'ucosiii': self.cDefines['state'].append('FSL_RTOS_UCOSIII') ## Add C include paths necessary for project if ksdkProj.libList[0] != 'hal': self.cIncludes['state'].append(self.projRelPath + 'platform/osa/inc') self.cIncludes['state'].append(self.projRelPath + 'platform/utilities/inc') self.cIncludes['state'].append(self.projRelPath + 'platform/CMSIS/Include') self.cIncludes['state'].append(self.projRelPath + 'platform/devices') self.cIncludes['state'].append(self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/include') self.cIncludes['state'].append(self.projRelPath + 'platform/devices/' +\ ksdkProj.device[1] + '/startup') self.cIncludes['state'].append(self.projRelPath + 'platform/hal/inc') if ksdkProj.libList[0] != 'hal': self.cIncludes['state'].append(self.projRelPath + 'platform/drivers/inc') self.cIncludes['state'].append(self.projRelPath + 'platform/system/inc') self.cIncludes['state'].append("../../") if ksdkProj.useBSP: self.cIncludes['state'].append("../board") ## Add device specific driver include paths if ksdkProj.libList[0] != 'hal': for d in ksdkProj.drvList: for p in d[1]: if not self.projRelPath + p in self.cIncludes['state']: self.cIncludes['state'].append(self.projRelPath + p) else: for d in ksdkProj.halList: for p in d[1]: if not self.projRelPath + p in self.cIncludes['state']: self.cIncludes['state'].append(self.projRelPath + p) # Add rtos paths if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/config/' + self.device[1][1:] + '/mdk') self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/port/mdk') self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/include') self.cIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/src') self.asmIncludes['state'].append(self.projRelPath + 'rtos/FreeRTOS/config/' + self.device[1][1:] + '/mdk') #print self.asmIncludes #print self.asmIncludes['state'] #print self.asmIncludes['state'][0] elif ksdkProj.rtos == 'mqx': archType = 'M4' if (self.device[4] == 'cm4') else 'M0' self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.mdk/debug') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.mdk/debug/config') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.mdk/debug/mqx') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.mdk/debug/mqx_stdlib') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/config/mcu/' + self.device[1]) self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/config/board/' + ksdkProj.board[1]) self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/bsp') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/compiler/rv_mdk') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/core/' + archType) self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/psp/cortex_m/cpu') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/include') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/config/common') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_dummy') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_mem') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_null') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_pipe') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_serial') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_tfs') self.cIncludes['state'].append(self.projRelPath + 'rtos/mqx/mqx/source/nio/drivers/nio_tty') elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uCOS-II/Ports/' + archType + '/Generic/RealView') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uC-CPU/' + archType + '/RealView') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/config') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uCOS-II/Source') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uC-CPU') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSII/src/uC-LIB') elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uCOS-III/Ports/' + archType + '/Generic/RealView') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-CPU/' + archType + '/RealView') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/config') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uCOS-III/Source') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-CPU') self.cIncludes['state'].append(self.projRelPath + 'rtos/uCOSIII/src/uC-LIB') # Add relative paths to files prePend = self.projRelPath + '{0}' self.projStartup['FileName'] = [f.replace('xxx', ksdkProj.device[1]) for f in self.projStartup['FileName']] self.projStartup['FilePath'] = [f.replace('xxx', ksdkProj.device[1]) for f in self.projStartup['FilePath']] self.projStartup['FilePath'] = [prePend.format(f) for f in self.projStartup['FilePath']] if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'freertos': index = 0 while index < len(self.projRtos['FilePath']): self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'xxx',\ ksdkProj.device[1][1:]) self.projRtos['FilePath'][index] = self.projRelPath + self.projRtos['FilePath'][index] index += 1 elif ksdkProj.rtos == 'mqx': index = 0 while index < len(self.projRtos['FilePath']): self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'xxx',\ ksdkProj.device[1]) self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'bbb',\ ksdkProj.board[1]) self.projRtos['FilePath'][index] = self.projRelPath + self.projRtos['FilePath'][index] index += 1 elif ksdkProj.rtos == 'ucosii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.projRtos['FilePath']): self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'ccc',\ archType) self.projRtos['FilePath'][index] = self.projRelPath + self.projRtos['FilePath'][index] index += 1 elif ksdkProj.rtos == 'ucosiii': archType = 'ARM-Cortex-M4' if (self.device[4] == 'cm4') else 'ARM-Cortex-M0' index = 0 while index < len(self.projRtos['FilePath']): self.projRtos['FilePath'][index] = kT.string_replace(self.projRtos['FilePath'][index],\ 'ccc',\ archType) self.projRtos['FilePath'][index] = self.projRelPath + self.projRtos['FilePath'][index] index += 1 kT.debug_log(self.projStartup['FileName']) kT.debug_log(self.projStartup['FilePath']) if ksdkProj.libList[0] != 'hal': self.projUtilities['FilePath'] = [prePend.format(f) for f in self.projUtilities['FilePath']] self.linkLibs['state'][0] = self.projRelPath + self.linkLibs['state'][0] self.linkLibs['state'][0] = kT.string_replace(self.linkLibs['state'][0], \ 'xxx', ksdkProj.libList[0]) if ksdkProj.rtos != 'bm': self.linkLibs['state'][0] = kT.string_replace(self.linkLibs['state'][0], \ 'libksdk_' + ksdkProj.libList[0] + '.lib', \ 'libksdk_platform_' + ksdkProj.libList[0] + '.lib') self.linkLibs['state'][0] = kT.string_replace(self.linkLibs['state'][0], \ 'ddd', ksdkProj.device[1][1:]) if ksdkProj.rtos == 'mqx': mqxLib = self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.mdk/debug/mqx/lib_mqx.lib' self.linkLibs['state'].append(mqxLib) mqxStdLib = self.projRelPath + 'rtos/mqx/lib/' + ksdkProj.board[1] + '.mdk/debug/mqx_stdlib/lib_mqx_stdlib.lib' self.linkLibs['state'].append(mqxStdLib) projMem = self.get_memory_loc(ksdkProj) #print 'Memory loc/size: ' + str(projMem) peDebug = "PEMicro\\Pemicro_ArmCortexInterface.dll" cmDebug = "BIN\\CMSIS_AGDI.dll" tree = ET.ElementTree(ET.fromstring(mF.mdk_formatted_uvprojx)) for elem in tree.iter(tag='TargetName'): if 'Debug' in elem.text: elem.text = self.name + ' Debug' else: elem.text = self.name + ' Release' for elem in tree.iter(tag='Device'): elem.text = self.device[0] for elem in tree.iter(tag='OutputName'): elem.text = self.name + '.out' for elem in tree.iter(tag='Driver'): elem.text = cmDebug if (self.device[4] == 'cm4') else peDebug for elem in tree.iter(tag='AdsCpuType'): elem.text = "\"Cortex-M4\"" if (self.device[4] == 'cm4') else "\"Cortex-M0+\"" for elem in tree.iter(tag='RvdsVP'): elem.text = '2' if self.device[3] else '1' for elem in tree.iter(tag='Ir1Chk'): elem.text = '1' for elem in tree.iter(tag='Im1Chk'): elem.text = '1' for elem in tree.iter(tag='Im2Chk'): elem.text = '0' if (projMem[4] == '') else '1' for elem in tree.iter(tag='IRAM'): for child in elem.findall('StartAddress'): child.text = projMem[2] for child in elem.findall('Size'): child.text = projMem[3] for elem in tree.iter(tag='IROM'): for child in elem.findall('StartAddress'): child.text = projMem[0] for child in elem.findall('Size'): child.text = projMem[1] for elem in tree.iter(tag='OCR_RVCT4'): for child in elem.findall('StartAddress'): child.text = projMem[0] for child in elem.findall('Size'): child.text = projMem[1] for elem in tree.iter(tag='OCR_RVCT9'): for child in elem.findall('StartAddress'): child.text = projMem[2] for child in elem.findall('Size'): child.text = projMem[3] for elem in tree.iter(tag='OCR_RVCT10'): for child in elem.findall('StartAddress'): child.text = '0x0' if (projMem[4] == '') else projMem[4] for child in elem.findall('Size'): child.text = '0x0' if (projMem[5] == '') else projMem[5] for elem in tree.iter(tag='Cads'): for child in elem.findall('VariousControls'): for defs in child.findall('Define'): temp = defs.text for d in self.cDefines['state']: temp += ', ' + d defs.text = temp for incl in child.findall('IncludePath'): temp = incl.text for i in self.cIncludes['state']: temp += '; ' + i incl.text = temp for elem in tree.iter(tag='Aads'): if ksdkProj.rtos == 'freertos': for child in elem.findall('VariousControls'): for incl in child.findall('IncludePath'): incl.text = self.asmIncludes['state'][0] for elem in tree.iter(tag='ScatterFile'): elem.text = self.linkScf['state'] for elem in tree.iter(tag='Misc'): temp = self.linkLibs['state'][0] + ' ' if ksdkProj.rtos != 'bm': if ksdkProj.rtos == 'mqx': temp += self.linkLibs['state'][1] + ' ' temp += self.linkLibs['state'][2] + ' ' temp += self.linkLibs['state'][1] + '(boot.o)' + ' ' temp += self.linkLibs['state'][1] + '(startup_*.o)' + ' ' temp += ' --remove ' temp += ' --predefine="-D__stack_size__=0x1000" ' temp += ' --predefine="-D__heap_size__=0x1000" ' temp += '--predefine="-D__ram_vector_table__=1" ' elem.text = temp for elem in tree.iter(tag='Groups'): if ksdkProj.rtos != 'mqx': # Add startup files group = ET.SubElement(elem, 'Group') name = ET.SubElement(group, 'GroupName') name.text = self.projStartup['GroupName'] files = ET.SubElement(group, 'Files') index = 0 while index < len(self.projStartup['FileName']): newFile = ET.SubElement(files, 'File') fileName = ET.SubElement(newFile, 'FileName') fileType = ET.SubElement(newFile, 'FileType') filePath = ET.SubElement(newFile, 'FilePath') fileName.text = self.projStartup['FileName'][index] fileType.text = self.projStartup['FileType'][index] filePath.text = self.projStartup['FilePath'][index] index += 1 # Add source files group = ET.SubElement(elem, 'Group') name = ET.SubElement(group, 'GroupName') name.text = self.projSources['GroupName'] files = ET.SubElement(group, 'Files') index = 0 while index < len(self.projSources['FileName']): newFile = ET.SubElement(files, 'File') fileName = ET.SubElement(newFile, 'FileName') fileType = ET.SubElement(newFile, 'FileType') filePath = ET.SubElement(newFile, 'FilePath') fileName.text = self.projSources['FileName'][index] fileType.text = self.projSources['FileType'][index] filePath.text = self.projSources['FilePath'][index] index += 1 # Add board files if needed if ksdkProj.useBSP: group = ET.SubElement(elem, 'Group') name = ET.SubElement(group, 'GroupName') name.text = self.projBoard['GroupName'] files = ET.SubElement(group, 'Files') index = 0 while index < len(self.projBoard['FileName']): newFile = ET.SubElement(files, 'File') fileName = ET.SubElement(newFile, 'FileName') fileType = ET.SubElement(newFile, 'FileType') filePath = ET.SubElement(newFile, 'FilePath') fileName.text = self.projBoard['FileName'][index] fileType.text = self.projBoard['FileType'][index] filePath.text = self.projBoard['FilePath'][index] index += 1 # Add utilities in needed if ksdkProj.libList[0] != 'hal': group = ET.SubElement(elem, 'Group') name = ET.SubElement(group, 'GroupName') name.text = self.projUtilities['GroupName'] files = ET.SubElement(group, 'Files') index = 0 while index < len(self.projUtilities['FileName']): newFile = ET.SubElement(files, 'File') fileName = ET.SubElement(newFile, 'FileName') fileType = ET.SubElement(newFile, 'FileType') filePath = ET.SubElement(newFile, 'FilePath') fileName.text = self.projUtilities['FileName'][index] fileType.text = self.projUtilities['FileType'][index] filePath.text = self.projUtilities['FilePath'][index] index += 1 # Add RTOS files if needed if ksdkProj.rtos != 'bm': group = ET.SubElement(elem, 'Group') name = ET.SubElement(group, 'GroupName') name.text = self.projRtos['GroupName'] files = ET.SubElement(group, 'Files') index = 0 while index < len(self.projRtos['FileName']): newFile = ET.SubElement(files, 'File') fileName = ET.SubElement(newFile, 'FileName') fileType = ET.SubElement(newFile, 'FileType') filePath = ET.SubElement(newFile, 'FilePath') fileName.text = self.projRtos['FileName'][index] fileType.text = self.projRtos['FileType'][index] filePath.text = self.projRtos['FilePath'][index] index += 1 root = tree.getroot() prettyRoot = kT.pretty_xml(root, "UTF-8") # Write data to file if not os.path.isdir(mdkPath): os.makedirs(mdkPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(mdkPath + '/' + self.name + '.uvprojx', "UTF-8") if 'MKL' in self.device[0]: setPath = mdkPath + '/pemicro_connection_settings.ini' setContent = mF.pemicro_connection_settings_ini setContent = kT.string_replace(setContent, 'dev_name', self.device[0][1:].replace('xxx', 'M')) with open(setPath, 'wb+') as f: f.write(setContent) f.close() return
def gen_working_set(self, ksdkProj): """ Generate KDS working set for project """ # Get relative path kdsPath = self.parent + ('' if self.parent[-1:] == '/' else '/') + self.name + '/kds' relPath = '' if self.isLinked: tempStr = ksdkProj.sdkPath + '/' if ksdkProj.osType == 'Windows': relPath = kT.string_replace(tempStr, '\\', '/') else: relPath = tempStr[:] else: relPath = '../' tree = ET.ElementTree(ET.fromstring(kF.formatted_wsd)) root = tree.getroot() for child in root: if child.tag == 'projects': proj = ET.Element('project') child.append(proj) projName = ET.Element('name') projName.text = str(self.name + '_' + ksdkProj.device[2]) proj.append(projName) projPath = ET.Element('path') projPath.text = '.' proj.append(projPath) projOpen = ET.Element('open') projOpen.text = 'true' proj.append(projOpen) projAct = ET.Element('activeconfig') projAct.text = 'debug' proj.append(projAct) projBulRef = ET.Element('buildreferences', {'config': "debug"}) projBulRef.text = 'false' proj.append(projBulRef) projAct = ET.Element('activeconfig') projAct.text = 'release' proj.append(projAct) projBulRef = ET.Element('buildreferences', {'config': "release"}) projBulRef.text = 'false' proj.append(projBulRef) if child.tag == 'workingsets': wSet = ET.Element('workingSet', {'editPageId': "org.eclipse.cdt.ui.CElementWorkingSetPage",\ 'id': "1323268527287_1", 'label': self.name, 'name': self.name}) child.append(wSet) wSetItem = ET.Element('item', {'factoryID': "org.eclipse.cdt.ui.PersistableCElementFactory", \ 'path': "/" + str(self.name + '_' + ksdkProj.device[2]), 'type': "4"}) wSet.append(wSetItem) if child.tag == 'cdtconfigurations': wSet = ET.Element('workingSet', {'name': self.name}) child.append(wSet) wSetConfig = ET.Element('config', {'name': "debug"}) wSet.append(wSetConfig) wSetProjName = str(self.name + '_' + ksdkProj.device[2]) wSetProj = ET.Element('project', {'config': "com.freescale.arm.cdt.toolchain.config.arm.release.695495605",\ 'name': wSetProjName,\ 'configName': "debug"}) wSetConfig.append(wSetProj) wSetConfig = ET.Element('config', {'name': "release"}) wSet.append(wSetConfig) wSetProj = ET.Element('project', {'config': "com.freescale.arm.cdt.toolchain.config.arm.release.695495605",\ 'name': wSetProjName,\ 'configName': "release"}) wSetConfig.append(wSetProj) # Format data to make it more readable prettyRoot = kT.pretty_xml(root, "UTF-8") #print prettyRoot # Write data to file if not os.path.isdir(kdsPath): os.mkdir(kdsPath) tree = ET.ElementTree(ET.fromstring(prettyRoot)) tree.write(kdsPath + '/' + self.name + '.wsd', "UTF-8") return