Home | History | Annotate | Download | only in PomAdapter
      1 ## @file InfPomAlignmentMisc.py

      2 # This file contained the routines for InfPomAlignment

      3 #

      4 # Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>

      5 #

      6 # This program and the accompanying materials are licensed and made available 

      7 # under the terms and conditions of the BSD License which accompanies this 

      8 # distribution. The full text of the license may be found at 

      9 # http://opensource.org/licenses/bsd-license.php

     10 #

     11 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

     12 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

     13 #

     14 
     15 '''
     16 InfPomAlignmentMisc
     17 '''
     18 
     19 ##

     20 # Import modules

     21 #

     22 import Logger.Log as Logger
     23 from Library import DataType as DT
     24 from Library.Misc import ConvertArchList
     25 from Object.POM.ModuleObject import BinaryFileObject
     26 from Object.POM import CommonObject
     27 from Library.String import FORMAT_INVALID
     28 from Library.Misc import CheckGuidRegFormat
     29 from Logger import StringTable as ST
     30 
     31 
     32 ## GenModuleHeaderUserExt

     33 #

     34 #

     35 def GenModuleHeaderUserExt(DefineObj, ArchString):
     36     DefinesDictNew = {}
     37     EdkReleaseVersion = DefineObj.GetEdkReleaseVersion()
     38     Shadow = DefineObj.GetShadow()
     39     DpxSource = DefineObj.GetDpxSource()
     40     PciVendorId = DefineObj.GetPciVendorId()
     41     PciDeviceId = DefineObj.GetPciDeviceId()
     42     PciClassCode = DefineObj.GetPciClassCode()
     43     PciRevision = DefineObj.GetPciRevision()
     44     PciCompress = DefineObj.GetPciCompress()
     45     CustomMakefile = DefineObj.GetCustomMakefile()
     46     UefiHiiResourceSection = DefineObj.GetUefiHiiResourceSection()
     47 
     48     if EdkReleaseVersion != None:
     49         Name = DT.TAB_INF_DEFINES_EDK_RELEASE_VERSION
     50         Value = EdkReleaseVersion.GetValue()
     51         Statement = _GenInfDefineStateMent(EdkReleaseVersion.Comments.GetHeaderComments(),
     52                                            Name,
     53                                            Value,
     54                                            EdkReleaseVersion.Comments.GetTailComments())
     55         DefinesDictNew[Statement] = ArchString
     56 
     57     if Shadow != None:
     58         Name = DT.TAB_INF_DEFINES_SHADOW
     59         Value = Shadow.GetValue()
     60         Statement = _GenInfDefineStateMent(Shadow.Comments.GetHeaderComments(),
     61                                            Name,
     62                                            Value,
     63                                            Shadow.Comments.GetTailComments())
     64         DefinesDictNew[Statement] = ArchString
     65 
     66     if DpxSource != None:
     67         Name = DT.TAB_INF_DEFINES_DPX_SOURCE
     68         for DpxSourceItem in DpxSource:
     69             Value = DpxSourceItem[0]
     70             Statement = _GenInfDefineStateMent(DpxSourceItem[1].GetHeaderComments(),
     71                                                Name,
     72                                                Value,
     73                                                DpxSourceItem[1].GetTailComments())
     74             DefinesDictNew[Statement] = ArchString
     75 
     76     if PciVendorId != None:
     77         Name = DT.TAB_INF_DEFINES_PCI_VENDOR_ID
     78         Value = PciVendorId.GetValue()
     79         Statement = _GenInfDefineStateMent(PciVendorId.Comments.GetHeaderComments(),
     80                                            Name,
     81                                            Value,
     82                                            PciVendorId.Comments.GetTailComments())
     83         DefinesDictNew[Statement] = ArchString
     84 
     85     if PciDeviceId != None:
     86         Name = DT.TAB_INF_DEFINES_PCI_DEVICE_ID
     87         Value = PciDeviceId.GetValue()
     88         Statement = _GenInfDefineStateMent(PciDeviceId.Comments.GetHeaderComments(),
     89                                            Name,
     90                                            Value,
     91                                            PciDeviceId.Comments.GetTailComments())
     92         DefinesDictNew[Statement] = ArchString
     93 
     94     if PciClassCode != None:
     95         Name = DT.TAB_INF_DEFINES_PCI_CLASS_CODE
     96         Value = PciClassCode.GetValue()
     97         Statement = _GenInfDefineStateMent(PciClassCode.Comments.GetHeaderComments(),
     98                                            Name,
     99                                            Value,
    100                                            PciClassCode.Comments.GetTailComments())
    101         DefinesDictNew[Statement] = ArchString
    102 
    103     if PciRevision != None:
    104         Name = DT.TAB_INF_DEFINES_PCI_REVISION
    105         Value = PciRevision.GetValue()
    106         Statement = _GenInfDefineStateMent(PciRevision.Comments.GetHeaderComments(),
    107                                            Name,
    108                                            Value,
    109                                            PciRevision.Comments.GetTailComments())
    110         DefinesDictNew[Statement] = ArchString
    111 
    112     if PciCompress != None:
    113         Name = DT.TAB_INF_DEFINES_PCI_COMPRESS
    114         Value = PciCompress.GetValue()
    115         Statement = _GenInfDefineStateMent(PciCompress.Comments.GetHeaderComments(),
    116                                            Name,
    117                                            Value,
    118                                            PciCompress.Comments.GetTailComments())
    119         DefinesDictNew[Statement] = ArchString
    120 
    121     if len(CustomMakefile) >= 1:
    122         for CustomMakefileItem in CustomMakefile:
    123             Name = DT.TAB_INF_DEFINES_CUSTOM_MAKEFILE
    124             #

    125             # Not with Feature Flag Expression

    126             #

    127             if len(CustomMakefileItem) == 3:
    128                 if CustomMakefileItem[0] != '':
    129                     Value = CustomMakefileItem[0] + ' | ' + CustomMakefileItem[1]
    130                 else:
    131                     Value = CustomMakefileItem[1]
    132 
    133                 Comments = CustomMakefileItem[2]
    134                 Statement = _GenInfDefineStateMent(Comments.GetHeaderComments(),
    135                                                    Name,
    136                                                    Value,
    137                                                    Comments.GetTailComments())
    138 
    139             DefinesDictNew[Statement] = ArchString
    140 
    141     if UefiHiiResourceSection != None:
    142         Name = DT.TAB_INF_DEFINES_UEFI_HII_RESOURCE_SECTION
    143         Value = UefiHiiResourceSection.GetValue()
    144         HeaderComment = UefiHiiResourceSection.Comments.GetHeaderComments()
    145         TailComment = UefiHiiResourceSection.Comments.GetTailComments()
    146         Statement = _GenInfDefineStateMent(HeaderComment,
    147                                            Name,
    148                                            Value,
    149                                            TailComment)
    150         DefinesDictNew[Statement] = ""
    151 
    152     return DefinesDictNew
    153 
    154 
    155 ## Generate the define statement that will be put into userextension

    156 #  Not support comments.

    157 #

    158 # @param HeaderComment: the original header comment (# not remvoed)

    159 # @param Name: the definition keyword, should not be empty or none

    160 # @param Value: the definition keyword value

    161 # @param TailComment: the original Tail comment (# not remvoed)

    162 #

    163 # @return: the regenerated define statement

    164 #

    165 def _GenInfDefineStateMent(HeaderComment, Name, Value, TailComment):
    166     Logger.Debug(5, HeaderComment + TailComment)
    167     Statement = '%s = %s' % (Name, Value)
    168 
    169     return Statement
    170 
    171 ## GenBinaryData

    172 #

    173 #

    174 def GenBinaryData(BinaryData, BinaryObj, BinariesDict, AsBuildIns, BinaryFileObjectList, \
    175                   SupArchList, BinaryModule, DecObjList=None):
    176     if BinaryModule:
    177         pass
    178     OriSupArchList = SupArchList
    179     for Item in BinaryData:
    180         ItemObj = BinaryObj[Item][0][0]
    181         if ItemObj.GetType() not in DT.BINARY_FILE_TYPE_UI_LIST + DT.BINARY_FILE_TYPE_VER_LIST:
    182             TagName = ItemObj.GetTagName()
    183             Family = ItemObj.GetFamily()
    184         else:
    185             TagName = ''
    186             Family = ''
    187         
    188         FFE = ItemObj.GetFeatureFlagExp()
    189 
    190         #

    191         # If have architecturie specified, then use the specified architecturie;

    192         # If the section tag does not have an architecture modifier or the modifier is "common" (case in-sensitive),

    193         # and the VALID_ARCHITECTURES comment exists, the list from the VALID_ARCHITECTURES comment 

    194         # can be used for the attribute.

    195         # If both not have VALID_ARCHITECTURE comment and no architecturie specified, then keep it empty.

    196         #        

    197         SupArchList = ConvertArchList(ItemObj.GetSupArchList())
    198         SupArchList.sort()
    199         if len(SupArchList) == 1 and SupArchList[0] == 'COMMON':
    200             if not (len(OriSupArchList) == 1 or OriSupArchList[0] == 'COMMON'):
    201                 SupArchList = OriSupArchList
    202             else:
    203                 SupArchList = ['COMMON']
    204 
    205         FileNameObj = CommonObject.FileNameObject()
    206         FileNameObj.SetFileType(ItemObj.GetType())
    207         FileNameObj.SetFilename(ItemObj.GetFileName())
    208         FileNameObj.SetFeatureFlag(FFE)
    209         #

    210         # Get GUID value of the GUID CName in the DEC file

    211         #

    212         if ItemObj.GetType() == DT.SUBTYPE_GUID_BINARY_FILE_TYPE:                
    213             if not CheckGuidRegFormat(ItemObj.GetGuidValue()):
    214                 if not DecObjList:
    215                     if DT.TAB_HORIZON_LINE_SPLIT in ItemObj.GetGuidValue() or \
    216                         DT.TAB_COMMA_SPLIT in ItemObj.GetGuidValue():
    217                         Logger.Error("\nMkPkg",
    218                                  FORMAT_INVALID,
    219                                  ST.ERR_DECPARSE_DEFINE_PKGGUID,
    220                                  ExtraData=ItemObj.GetGuidValue(),
    221                                  RaiseError=True)
    222                     else:
    223                         Logger.Error("\nMkPkg",
    224                                      FORMAT_INVALID,
    225                                      ST.ERR_UNI_SUBGUID_VALUE_DEFINE_DEC_NOT_FOUND % \
    226                                      (ItemObj.GetGuidValue()),
    227                                      RaiseError=True)
    228                 else:
    229                     for DecObj in DecObjList:
    230                         for GuidObj in DecObj.GetGuidList():
    231                             if GuidObj.GetCName() == ItemObj.GetGuidValue():
    232                                 FileNameObj.SetGuidValue(GuidObj.GetGuid())
    233                                 break
    234 
    235                     if not FileNameObj.GetGuidValue():                        
    236                         Logger.Error("\nMkPkg",
    237                                          FORMAT_INVALID,
    238                                          ST.ERR_DECPARSE_CGUID_NOT_FOUND % \
    239                                          (ItemObj.GetGuidValue()),
    240                                          RaiseError=True)  
    241             else:
    242                 FileNameObj.SetGuidValue(ItemObj.GetGuidValue().strip())
    243 
    244         FileNameObj.SetSupArchList(SupArchList)
    245         FileNameList = [FileNameObj]
    246 
    247         BinaryFile = BinaryFileObject()
    248         BinaryFile.SetFileNameList(FileNameList)
    249         BinaryFile.SetAsBuiltList(AsBuildIns)
    250         BinaryFileObjectList.append(BinaryFile)
    251 
    252         SupArchStr = ' '.join(SupArchList)
    253         Key = (ItemObj.GetFileName(), ItemObj.GetType(), FFE, SupArchStr)
    254         ValueItem = (ItemObj.GetTarget(), Family, TagName, '')
    255         if Key in BinariesDict:
    256             ValueList = BinariesDict[Key]
    257             ValueList.append(ValueItem)
    258             BinariesDict[Key] = ValueList
    259         else:
    260             BinariesDict[Key] = [ValueItem]
    261 
    262     return BinariesDict, AsBuildIns, BinaryFileObjectList
    263