def GenNmakes(self, ContainerFile): EdkLogger.debug(2, "Generate %s ..." % TAB_NMAKE) Nmakes = sdict() # # Get all Nmakes # RecordSet = self.RecordSet[MODEL_META_DATA_NMAKE] # # Go through each arch # for Arch in self.SupArchList: for Record in RecordSet: if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON: MergeArches(Nmakes, Record[0], Arch) for Key in Nmakes.keys(): List = GetSplitValueList(Key, DataType.TAB_EQUAL_SPLIT, MaxSplit=1) if len(List) != 2: RaiseParserError(Key, 'Nmake', ContainerFile, '<MacroName> = <Value>') continue Nmake = ModuleNmakeClass() Nmake.Name = List[0] Nmake.Value = List[1] Nmake.SupArchList = Nmakes[Key] self.Module.Nmake.append(Nmake) # convert Edk format to EdkII format if Nmake.Name == "IMAGE_ENTRY_POINT": Image = ModuleExternImageClass() Image.ModuleEntryPoint = Nmake.Value self.Module.ExternImages.append(Image) elif Nmake.Name == "DPX_SOURCE": Source = ModuleSourceFileClass(NormPath(Nmake.Value), "", "", "", "", Nmake.SupArchList) self.Module.Sources.append(Source) else: ToolList = gNmakeFlagPattern.findall(Nmake.Name) if len(ToolList) == 0 or len(ToolList) != 1: EdkLogger.warn("\nParser", "Don't know how to do with MACRO: %s" % Nmake.Name, ExtraData=ContainerFile) else: if ToolList[0] in gNmakeFlagName2ToolCode: Tool = gNmakeFlagName2ToolCode[ToolList[0]] else: Tool = ToolList[0] BuildOption = BuildOptionClass("MSFT", "*_*_*_%s_FLAGS" % Tool, Nmake.Value) BuildOption.SupArchList = Nmake.SupArchList self.Module.BuildOptions.append(BuildOption)
def GenIncludes(self, ContainerFile): EdkLogger.debug(2, "Generate %s ..." % TAB_INCLUDES) Includes = sdict() # Get all Includes RecordSet = self.RecordSet[MODEL_EFI_INCLUDE] for Record in RecordSet: Include = IncludeClass() Include.FilePath = Record[0] Include.SupArchList = Record[1] if GenerateHelpText(Record[5], ""): Include.HelpTextList.append(GenerateHelpText(Record[5], "")) self.Module.Includes.append(Include)
def GenIncludes(self, ContainerFile): EdkLogger.debug(2, "Generate %s ..." % TAB_INCLUDES) Includes = sdict() # Get all Includes RecordSet = self.RecordSet[MODEL_EFI_INCLUDE] for Record in RecordSet: Include = IncludeClass() Include.FilePath = Record[0] Include.SupArchList = Record[1] if GenerateHelpText(Record[5], ''): Include.HelpTextList.append(GenerateHelpText(Record[5], '')) self.Module.Includes.append(Include)
def GenIncludes(self, ContainerFile): EdkLogger.debug(2, "Generate %s ..." % TAB_INCLUDES) Includes = sdict() # # Get all Includes # RecordSet = self.RecordSet[MODEL_EFI_INCLUDE] # # Go through each arch # for Arch in self.SupArchList: for Record in RecordSet: if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON: MergeArches(Includes, Record[0], Arch) for Key in Includes.keys(): Include = IncludeClass() Include.FilePath = NormPath(Key) Include.SupArchList = Includes[Key] self.Module.Includes.append(Include)
def GenLibraries(self, ContainerFile): EdkLogger.debug(2, "Generate %s ..." % TAB_LIBRARIES) Libraries = sdict() # # Get all Includes # RecordSet = self.RecordSet[MODEL_EFI_LIBRARY_INSTANCE] # # Go through each arch # for Arch in self.SupArchList: for Record in RecordSet: if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON: MergeArches(Libraries, Record[0], Arch) for Key in Libraries.keys(): Library = ModuleLibraryClass() # replace macro and remove file extension Library.Library = Key.rsplit('.', 1)[0] Library.SupArchList = Libraries[Key] self.Module.Libraries.append(Library)
def ModuleToInf(self, Module): Inf = "" InfList = sdict() SectionHeaderCommentDict = {} if Module == None: return Inf ModuleHeader = Module.ModuleHeader TmpList = [] # Common define items if ModuleHeader.Name: TmpList.append(TAB_INF_DEFINES_BASE_NAME + " = " + ModuleHeader.Name) if ModuleHeader.Guid: TmpList.append(TAB_INF_DEFINES_FILE_GUID + " = " + ModuleHeader.Guid) if ModuleHeader.Version: TmpList.append(TAB_INF_DEFINES_VERSION_STRING + " = " + ModuleHeader.Version) if ModuleHeader.ModuleType: TmpList.append(TAB_INF_DEFINES_MODULE_TYPE + " = " + ModuleHeader.ModuleType) if ModuleHeader.PcdIsDriver: TmpList.append(TAB_INF_DEFINES_PCD_IS_DRIVER + " = " + ModuleHeader.PcdIsDriver) # Externs for Item in Module.Externs: if Item.EntryPoint: TmpList.append(TAB_INF_DEFINES_ENTRY_POINT + " = " + Item.EntryPoint) if Item.UnloadImage: TmpList.append(TAB_INF_DEFINES_UNLOAD_IMAGE + " = " + Item.UnloadImage) if Item.Constructor: TmpList.append(TAB_INF_DEFINES_CONSTRUCTOR + " = " + Item.Constructor) if Item.Destructor: TmpList.append(TAB_INF_DEFINES_DESTRUCTOR + " = " + Item.Destructor) # Other define items if Module.UserExtensions != None: for Item in Module.UserExtensions.Defines: TmpList.append(Item) InfList["Defines"] = TmpList if ModuleHeader.Description != "": SectionHeaderCommentDict["Defines"] = ModuleHeader.Description if Module.UserExtensions != None: InfList["BuildOptions"] = Module.UserExtensions.BuildOptions for Item in Module.Includes: Key = "Includes." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.FilePath) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.LibraryClasses: Key = "LibraryClasses." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.LibraryClass if Item.RecommendedInstance: NewValue = NewValue + "|" + Item.RecommendedInstance if Item.FeatureFlag: NewValue = NewValue + "|" + Item.FeatureFlag Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.PackageDependencies: Key = "Packages." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.FilePath) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.PcdCodes: Key = "Pcds" + Item.ItemType + "." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.TokenSpaceGuidCName + "." + Item.CName if Item.DefaultValue != "": NewValue = NewValue + "|" + Item.DefaultValue Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Sources: Key = "Sources." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.SourceFile if Item.ToolChainFamily != "": NewValue = NewValue + "|" + Item.ToolChainFamily if Item.TagName != "": NewValue = NewValue + "|" + Item.TagName if Item.ToolCode != "": NewValue = NewValue + "|" + Item.ToolCode if Item.FeatureFlag != "": NewValue = NewValue + "|" + Item.FeatureFlag Value.append(NewValue) if Item.HelpText != "": SectionHeaderCommentDict[Key] = Item.HelpText GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Guids: Key = "Guids." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Protocols: Key = "Protocols." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Ppis: Key = "Ppis." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) if Module.PeiDepex: Key = "Depex" Value = Module.PeiDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) if Module.DxeDepex: Key = "Depex" Value = Module.DxeDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) if Module.SmmDepex: Key = "Depex" Value = Module.SmmDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Binaries: Key = "Binaries." + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.FileType + "|" + Item.BinaryFile + "|" + Item.Target if Item.FeatureFlag != "": NewValue = NewValue + "|" + Item.FeatureFlag Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) # Transfer Module to Inf for Key in InfList: if Key in SectionHeaderCommentDict: List = SectionHeaderCommentDict[Key].split("\r") for Item in List: Inf = Inf + Item + "\n" Inf = Inf + "[" + Key + "]" + "\n" for Value in InfList[Key]: if type(Value) == type([]): for SubValue in Value: Inf = Inf + " " + SubValue + "\n" else: Inf = Inf + " " + Value + "\n" Inf = Inf + "\n" return Inf
def ModuleToInf(self, Module): Inf = '' InfList = sdict() SectionHeaderCommentDict = {} if Module == None: return Inf ModuleHeader = Module.ModuleHeader TmpList = [] # Common define items if ModuleHeader.Name: TmpList.append(TAB_INF_DEFINES_BASE_NAME + ' = ' + ModuleHeader.Name) if ModuleHeader.Guid: TmpList.append(TAB_INF_DEFINES_FILE_GUID + ' = ' + ModuleHeader.Guid) if ModuleHeader.Version: TmpList.append(TAB_INF_DEFINES_VERSION_STRING + ' = ' + ModuleHeader.Version) if ModuleHeader.ModuleType: TmpList.append(TAB_INF_DEFINES_MODULE_TYPE + ' = ' + ModuleHeader.ModuleType) if ModuleHeader.PcdIsDriver: TmpList.append(TAB_INF_DEFINES_PCD_IS_DRIVER + ' = ' + ModuleHeader.PcdIsDriver) # Externs for Item in Module.Externs: if Item.EntryPoint: TmpList.append(TAB_INF_DEFINES_ENTRY_POINT + ' = ' + Item.EntryPoint) if Item.UnloadImage: TmpList.append(TAB_INF_DEFINES_UNLOAD_IMAGE + ' = ' + Item.UnloadImage) if Item.Constructor: TmpList.append(TAB_INF_DEFINES_CONSTRUCTOR + ' = ' + Item.Constructor) if Item.Destructor: TmpList.append(TAB_INF_DEFINES_DESTRUCTOR + ' = ' + Item.Destructor) # Other define items if Module.UserExtensions != None: for Item in Module.UserExtensions.Defines: TmpList.append(Item) InfList['Defines'] = TmpList if ModuleHeader.Description != '': SectionHeaderCommentDict['Defines'] = ModuleHeader.Description if Module.UserExtensions != None: InfList['BuildOptions'] = Module.UserExtensions.BuildOptions for Item in Module.Includes: Key = 'Includes.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.FilePath) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.LibraryClasses: Key = 'LibraryClasses.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.LibraryClass if Item.RecommendedInstance: NewValue = NewValue + '|' + Item.RecommendedInstance if Item.FeatureFlag: NewValue = NewValue + '|' + Item.FeatureFlag Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.PackageDependencies: Key = 'Packages.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.FilePath) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.PcdCodes: Key = 'Pcds' + Item.ItemType + '.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.TokenSpaceGuidCName + '.' + Item.CName if Item.DefaultValue != '': NewValue = NewValue + '|' + Item.DefaultValue Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Sources: Key = 'Sources.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.SourceFile if Item.ToolChainFamily != '': NewValue = NewValue + '|' + Item.ToolChainFamily if Item.TagName != '': NewValue = NewValue + '|' + Item.TagName if Item.ToolCode != '': NewValue = NewValue + '|' + Item.ToolCode if Item.FeatureFlag != '': NewValue = NewValue + '|' + Item.FeatureFlag Value.append(NewValue) if Item.HelpText != '': SectionHeaderCommentDict[Key] = Item.HelpText GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Guids: Key = 'Guids.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Protocols: Key = 'Protocols.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Ppis: Key = 'Ppis.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) Value.append(Item.CName) GenMetaDatSectionItem(Key, Value, InfList) if Module.PeiDepex: Key = 'Depex' Value = Module.PeiDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) if Module.DxeDepex: Key = 'Depex' Value = Module.DxeDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) if Module.SmmDepex: Key = 'Depex' Value = Module.SmmDepex.Depex GenMetaDatSectionItem(Key, Value, InfList) for Item in Module.Binaries: Key = 'Binaries.' + GetStringOfList(Item.SupArchList) Value = GetHelpTextList(Item.HelpTextList) NewValue = Item.FileType + '|' + Item.BinaryFile + '|' + Item.Target if Item.FeatureFlag != '': NewValue = NewValue + '|' + Item.FeatureFlag Value.append(NewValue) GenMetaDatSectionItem(Key, Value, InfList) # Transfer Module to Inf for Key in InfList: if Key in SectionHeaderCommentDict: List = SectionHeaderCommentDict[Key].split('\r') for Item in List: Inf = Inf + Item + '\n' Inf = Inf + '[' + Key + ']' + '\n' for Value in InfList[Key]: if type(Value) == type([]): for SubValue in Value: Inf = Inf + ' ' + SubValue + '\n' else: Inf = Inf + ' ' + Value + '\n' Inf = Inf + '\n' return Inf