def _GenSpecialComments(self): SpecialCommentsList = self.Parser.InfSpecialCommentSection.GetSpecialComments( ) for Key in SpecialCommentsList: if Key == DT.TYPE_HOB_SECTION: HobList = [] for Item in SpecialCommentsList[Key]: Hob = HobObject() Hob.SetHobType(Item.GetHobType()) Hob.SetUsage(Item.GetUsage()) Hob.SetSupArchList(Item.GetSupArchList()) if Item.GetHelpString(): HelpTextObj = CommonObject.TextObject() if self.UniFileClassObject: HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X) HelpTextObj.SetString(Item.GetHelpString()) Hob.SetHelpTextList([HelpTextObj]) HobList.append(Hob) self.SetHobList(HobList) elif Key == DT.TYPE_EVENT_SECTION: EventList = [] for Item in SpecialCommentsList[Key]: Event = EventObject() Event.SetEventType(Item.GetEventType()) Event.SetUsage(Item.GetUsage()) if Item.GetHelpString(): HelpTextObj = CommonObject.TextObject() if self.UniFileClassObject: HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X) HelpTextObj.SetString(Item.GetHelpString()) Event.SetHelpTextList([HelpTextObj]) EventList.append(Event) self.SetEventList(EventList) elif Key == DT.TYPE_BOOTMODE_SECTION: BootModeList = [] for Item in SpecialCommentsList[Key]: BootMode = BootModeObject() BootMode.SetSupportedBootModes( Item.GetSupportedBootModes()) BootMode.SetUsage(Item.GetUsage()) if Item.GetHelpString(): HelpTextObj = CommonObject.TextObject() if self.UniFileClassObject: HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X) HelpTextObj.SetString(Item.GetHelpString()) BootMode.SetHelpTextList([HelpTextObj]) BootModeList.append(BootMode) self.SetBootModeList(BootModeList)
def _GenLibraryClasses(self): Logger.Debug(2, "Generate %s ..." % DT.TAB_LIBRARY_CLASSES) if not GlobalData.gIS_BINARY_INF: # # Get all LibraryClasses # LibClassObj = self.Parser.InfLibraryClassSection.LibraryClasses Keys = LibClassObj.keys() for Key in Keys: LibraryClassData = LibClassObj[Key] for Item in LibraryClassData: LibraryClass = CommonObject.LibraryClassObject() LibraryClass.SetUsage(DT.USAGE_ITEM_CONSUMES) LibraryClass.SetLibraryClass(Item.GetLibName()) LibraryClass.SetRecommendedInstance(None) LibraryClass.SetFeatureFlag(Item.GetFeatureFlagExp()) LibraryClass.SetSupArchList( ConvertArchList(Item.GetSupArchList())) LibraryClass.SetSupModuleList(Item.GetSupModuleList()) HelpStringObj = Item.GetHelpString() if HelpStringObj != None: CommentString = GetHelpStringByRemoveHashKey( HelpStringObj.HeaderComments + HelpStringObj.TailComments) HelpTextHeaderObj = CommonObject.TextObject() HelpTextHeaderObj.SetString(CommentString) LibraryClass.SetHelpTextList([HelpTextHeaderObj]) self.SetLibraryClassList(self.GetLibraryClassList() + [LibraryClass])
def _GenPcds(self): if not GlobalData.gIS_BINARY_INF: Logger.Debug(2, "Generate %s ..." % DT.TAB_PCDS) # # Get all Pcds # PcdObj = self.Parser.InfPcdSection.Pcds KeysList = PcdObj.keys() # # Go through each arch # for (PcdType, PcdKey) in KeysList: PcdData = PcdObj[PcdType, PcdKey] for PcdItemObj in PcdData: CommentList = PcdItemObj.GetHelpStringList() if CommentList: for CommentItem in CommentList: Pcd = CommonObject.PcdObject() Pcd.SetCName(PcdItemObj.GetCName()) Pcd.SetTokenSpaceGuidCName(PcdItemObj.GetTokenSpaceGuidCName()) Pcd.SetDefaultValue(PcdItemObj.GetDefaultValue()) Pcd.SetItemType(PcdType) Pcd.SetValidUsage(CommentItem.GetUsageItem()) Pcd.SetFeatureFlag(PcdItemObj.GetFeatureFlagExp()) Pcd.SetSupArchList(ConvertArchList(PcdItemObj.GetSupportArchList())) HelpTextObj = CommonObject.TextObject() if self.UniFileClassObject: HelpTextObj.SetLang(DT.TAB_LANGUAGE_EN_X) HelpTextObj.SetString(CommentItem.GetHelpStringItem()) Pcd.SetHelpTextList([HelpTextObj]) PcdList = self.GetPcdList() PcdList.append(Pcd) self.SetPcdList(PcdList)
def _GenGuidProtocolPpis(self, Type): Logger.Debug(2, "Generate %s ..." % Type) # # Get all Guid/Protocol/Ppis data # GuidObj = self.Parser.InfGuidSection.GetGuid() ProtocolObj = self.Parser.InfProtocolSection.GetProtocol() PpisObj = self.Parser.InfPpiSection.GetPpi() GuidProtocolPpiList = [] if Type == DT.TAB_GUIDS: GuidData = GuidObj.keys() for Item in GuidData: CommentList = Item.GetCommentList() # # Depend on CommentList content # generate muti-guid-obj # if CommentList: for GuidComentItem in CommentList: ListObject = CommonObject.GuidObject() ListObject.SetGuidTypeList( [GuidComentItem.GetGuidTypeItem()]) ListObject.SetVariableName( GuidComentItem.GetVariableNameItem()) ListObject.SetUsage(GuidComentItem.GetUsageItem()) ListObject.SetName(Item.GetName()) ListObject.SetCName(Item.GetName()) ListObject.SetSupArchList( ConvertArchList(Item.GetSupArchList())) ListObject.SetFeatureFlag(Item.GetFeatureFlagExp()) HelpString = GuidComentItem.GetHelpStringItem() HelpTxtTailObj = CommonObject.TextObject() HelpTxtTailObj.SetString(HelpString) ListObject.SetHelpTextList([HelpTxtTailObj]) GuidProtocolPpiList.append(ListObject) elif Type == DT.TAB_PROTOCOLS: ProtocolData = ProtocolObj.keys() for Item in ProtocolData: CommentList = Item.GetCommentList() for CommentItem in CommentList: ListObject = CommonObject.ProtocolObject() ListObject.SetCName(Item.GetName()) ListObject.SetSupArchList( ConvertArchList(Item.GetSupArchList())) ListObject.SetFeatureFlag(Item.GetFeatureFlagExp()) ListObject.SetNotify(CommentItem.GetNotify()) ListObject.SetUsage(CommentItem.GetUsageItem()) HelpTxtObj = CommonObject.TextObject() HelpString = CommentItem.GetHelpStringItem() HelpTxtObj.SetString(HelpString) ListObject.SetHelpTextList([HelpTxtObj]) GuidProtocolPpiList.append(ListObject) elif Type == DT.TAB_PPIS: PpiData = PpisObj.keys() for Item in PpiData: CommentList = Item.GetCommentList() for CommentItem in CommentList: ListObject = CommonObject.PpiObject() ListObject.SetCName(Item.GetName()) ListObject.SetSupArchList( ConvertArchList(Item.GetSupArchList())) ListObject.SetFeatureFlag(Item.GetFeatureFlagExp()) ListObject.SetNotify(CommentItem.GetNotify()) ListObject.SetUsage(CommentItem.GetUsage()) HelpTextObj = CommonObject.TextObject() HelpString = CommentItem.GetHelpStringItem() HelpTextObj.SetString(HelpString) ListObject.SetHelpTextList([HelpTextObj]) GuidProtocolPpiList.append(ListObject) if Type == DT.TAB_GUIDS: self.SetGuidList(self.GetGuidList() + GuidProtocolPpiList) elif Type == DT.TAB_PROTOCOLS: self.SetProtocolList(self.GetProtocolList() + GuidProtocolPpiList) elif Type == DT.TAB_PPIS: self.SetPpiList(self.GetPpiList() + GuidProtocolPpiList)
def _GenAsBuiltPcds(self, PcdList, AsBuildIns): AsBuildPatchPcdList = [] AsBuildPcdExList = [] # # Pcd AsBuild Info # for PcdItem in PcdList: if PcdItem[0].upper() == DT.TAB_INF_PATCH_PCD.upper(): PcdItemObj = PcdItem[1] Pcd = CommonObject.PcdObject() Pcd.SetCName(PcdItemObj.GetCName()) Pcd.SetTokenSpaceGuidCName(PcdItemObj.GetTokenSpaceGuidCName()) if PcdItemObj.GetTokenSpaceGuidValue( ) == '' and self.BinaryModule: Logger.Error("\nMkPkg", PARSER_ERROR, ST.ERR_ASBUILD_PCD_TOKENSPACE_GUID_VALUE_MISS % \ (PcdItemObj.GetTokenSpaceGuidCName()), self.GetFullPath(), RaiseError=True) else: Pcd.SetTokenSpaceGuidValue( PcdItemObj.GetTokenSpaceGuidValue()) if (PcdItemObj.GetToken() == '' or PcdItemObj.GetDatumType() == '') and self.BinaryModule: Logger.Error("\nMkPkg", PARSER_ERROR, ST.ERR_ASBUILD_PCD_DECLARITION_MISS % \ (PcdItemObj.GetTokenSpaceGuidCName() + '.' + PcdItemObj.GetCName()), self.GetFullPath(), RaiseError=True) Pcd.SetToken(PcdItemObj.GetToken()) Pcd.SetDatumType(PcdItemObj.GetDatumType()) Pcd.SetMaxDatumSize(PcdItemObj.GetMaxDatumSize()) Pcd.SetDefaultValue(PcdItemObj.GetDefaultValue()) Pcd.SetOffset(PcdItemObj.GetOffset()) Pcd.SetItemType(PcdItem[0]) Pcd.SetFeatureFlag(PcdItemObj.GetFeatureFlagExp()) Pcd.SetSupArchList( ConvertArchList(PcdItemObj.GetSupportArchList())) HelpTextObj = CommonObject.TextObject() HelpTextObj.SetString(PcdItemObj.GetHelpStringList()) Pcd.SetHelpTextList([HelpTextObj]) AsBuildPatchPcdList.append(Pcd) else: PcdItemObj = PcdItem[1] Pcd = CommonObject.PcdObject() Pcd.SetTokenSpaceGuidValue(PcdItemObj.GetTokenSpaceGuidValue()) Pcd.SetToken(PcdItemObj.GetToken()) Pcd.SetDatumType(PcdItemObj.GetDatumType()) Pcd.SetMaxDatumSize(PcdItemObj.GetMaxDatumSize()) Pcd.SetDefaultValue(PcdItemObj.GetDefaultValue()) Pcd.SetItemType(PcdItem[0]) Pcd.SetFeatureFlag(PcdItemObj.GetFeatureFlagExp()) Pcd.SetSupArchList( ConvertArchList(PcdItemObj.GetSupportArchList())) HelpTextObj = CommonObject.TextObject() HelpTextObj.SetString(PcdItemObj.GetHelpStringList()) Pcd.SetHelpTextList([HelpTextObj]) AsBuildPcdExList.append(Pcd) AsBuildIns.SetPatchPcdList(AsBuildPatchPcdList) AsBuildIns.SetPcdExList(AsBuildPcdExList) return AsBuildIns
def _GenDepexes(self): Logger.Debug(2, "Generate %s ..." % DT.TAB_DEPEX) PEI_LIST = [DT.SUP_MODULE_PEIM] SMM_LIST = [DT.SUP_MODULE_DXE_SMM_DRIVER] DXE_LIST = [ DT.SUP_MODULE_DXE_DRIVER, DT.SUP_MODULE_DXE_SAL_DRIVER, DT.SUP_MODULE_DXE_RUNTIME_DRIVER ] IsLibraryClass = self.GetIsLibrary() # # Get all Depexes # DepexData = self.Parser.InfDepexSection.GetDepex() SmmDepexList = [] DxeDepexList = [] PeiDepexList = [] for Depex in DepexData: ModuleType = Depex.GetModuleType() ModuleTypeList = [] if IsLibraryClass: if not self.GetIsLibraryModList(): Logger.Error( "\nMkPkg", PARSER_ERROR, ST. ERR_INF_PARSER_DEPEX_SECTION_INVALID_FOR_LIBRARY_CLASS, self.GetFullPath(), RaiseError=True) if ModuleType and ModuleType not in self.GetIsLibraryModList(): Logger.Error( "\nMkPkg", PARSER_ERROR, ST.ERR_INF_PARSER_DEPEX_SECTION_NOT_DETERMINED, self.GetFullPath(), RaiseError=True) if ModuleType: ModuleTypeList = [ModuleType] else: for ModuleTypeInList in self.GetIsLibraryModList(): if ModuleTypeInList in DT.VALID_DEPEX_MODULE_TYPE_LIST: ModuleTypeList.append(ModuleTypeInList) if not ModuleTypeList: Logger.Error( "\nMkPkg", PARSER_ERROR, ST.ERR_INF_PARSER_DEPEX_SECTION_NOT_DETERMINED, self.GetFullPath(), RaiseError=True) else: if not ModuleType: ModuleType = self.ModuleType if ModuleType not in DT.VALID_DEPEX_MODULE_TYPE_LIST: Logger.Error( "\nMkPkg", PARSER_ERROR, ST.ERR_INF_PARSER_DEPEX_SECTION_MODULE_TYPE_ERROR % (ModuleType), self.GetFullPath(), RaiseError=True) if ModuleType != self.ModuleType: Logger.Error( "\nMkPkg", PARSER_ERROR, ST.ERR_INF_PARSER_DEPEX_SECTION_NOT_DETERMINED, self.GetFullPath(), RaiseError=True) ModuleTypeList = [ModuleType] for ModuleType in ModuleTypeList: DepexIns = DepexObject() DepexIns.SetDepex(Depex.GetDepexContent()) if IsLibraryClass: DepexIns.SetModuleType(ModuleType) else: if Depex.GetModuleType(): DepexIns.SetModuleType(Depex.GetModuleType()) DepexIns.SetSupArchList(ConvertArchList([Depex.GetSupArch()])) DepexIns.SetFeatureFlag(Depex.GetFeatureFlagExp()) if Depex.HelpString: HelpIns = CommonObject.TextObject() HelpIns.SetString( GetHelpStringByRemoveHashKey(Depex.HelpString)) DepexIns.SetHelpText(HelpIns) if ModuleType in SMM_LIST: SmmDepexList.append(DepexIns) if ModuleType in DXE_LIST: DxeDepexList.append(DepexIns) if ModuleType in PEI_LIST: PeiDepexList.append(DepexIns) if ModuleType == DT.SUP_MODULE_UEFI_DRIVER: if IsLibraryClass: DxeDepexList.append(DepexIns) else: Logger.Error( "\nMkPkg", PARSER_ERROR, ST.ERR_INF_PARSER_DEPEX_SECTION_INVALID_FOR_DRIVER, self.GetFullPath(), RaiseError=True) #End of for ModuleType in ModuleTypeList self._GenDepexesList(SmmDepexList, DxeDepexList, PeiDepexList)