コード例 #1
0
    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)
コード例 #2
0
 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)
コード例 #3
0
 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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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
コード例 #10
0
    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