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''' 16InfPomAlignmentMisc 17''' 18 19## 20# Import modules 21# 22import Logger.Log as Logger 23from Library import DataType as DT 24from Library.Misc import ConvertArchList 25from Object.POM.ModuleObject import BinaryFileObject 26from Object.POM import CommonObject 27from Library.String import FORMAT_INVALID 28from Library.Misc import CheckGuidRegFormat 29from Logger import StringTable as ST 30 31 32## GenModuleHeaderUserExt 33# 34# 35def 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# 165def _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# 174def 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