## @file InfPomAlignmentMisc.py # This file contained the routines for InfPomAlignment # # Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.
# # This program and the accompanying materials are licensed and made available # under the terms and conditions of the BSD License which accompanies this # distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php # # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # ''' InfPomAlignmentMisc ''' ## # Import modules # import Logger.Log as Logger from Library import DataType as DT from Library.Misc import ConvertArchList from Object.POM.ModuleObject import BinaryFileObject from Object.POM import CommonObject from Library.String import FORMAT_INVALID from Library.Misc import CheckGuidRegFormat from Logger import StringTable as ST ## GenModuleHeaderUserExt # # def GenModuleHeaderUserExt(DefineObj, ArchString): DefinesDictNew = {} EdkReleaseVersion = DefineObj.GetEdkReleaseVersion() Shadow = DefineObj.GetShadow() DpxSource = DefineObj.GetDpxSource() PciVendorId = DefineObj.GetPciVendorId() PciDeviceId = DefineObj.GetPciDeviceId() PciClassCode = DefineObj.GetPciClassCode() PciRevision = DefineObj.GetPciRevision() PciCompress = DefineObj.GetPciCompress() CustomMakefile = DefineObj.GetCustomMakefile() UefiHiiResourceSection = DefineObj.GetUefiHiiResourceSection() if EdkReleaseVersion != None: Name = DT.TAB_INF_DEFINES_EDK_RELEASE_VERSION Value = EdkReleaseVersion.GetValue() Statement = _GenInfDefineStateMent(EdkReleaseVersion.Comments.GetHeaderComments(), Name, Value, EdkReleaseVersion.Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if Shadow != None: Name = DT.TAB_INF_DEFINES_SHADOW Value = Shadow.GetValue() Statement = _GenInfDefineStateMent(Shadow.Comments.GetHeaderComments(), Name, Value, Shadow.Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if DpxSource != None: Name = DT.TAB_INF_DEFINES_DPX_SOURCE for DpxSourceItem in DpxSource: Value = DpxSourceItem[0] Statement = _GenInfDefineStateMent(DpxSourceItem[1].GetHeaderComments(), Name, Value, DpxSourceItem[1].GetTailComments()) DefinesDictNew[Statement] = ArchString if PciVendorId != None: Name = DT.TAB_INF_DEFINES_PCI_VENDOR_ID Value = PciVendorId.GetValue() Statement = _GenInfDefineStateMent(PciVendorId.Comments.GetHeaderComments(), Name, Value, PciVendorId.Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if PciDeviceId != None: Name = DT.TAB_INF_DEFINES_PCI_DEVICE_ID Value = PciDeviceId.GetValue() Statement = _GenInfDefineStateMent(PciDeviceId.Comments.GetHeaderComments(), Name, Value, PciDeviceId.Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if PciClassCode != None: Name = DT.TAB_INF_DEFINES_PCI_CLASS_CODE Value = PciClassCode.GetValue() Statement = _GenInfDefineStateMent(PciClassCode.Comments.GetHeaderComments(), Name, Value, PciClassCode.Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if PciRevision != None: Name = DT.TAB_INF_DEFINES_PCI_REVISION Value = PciRevision.GetValue() Statement = _GenInfDefineStateMent(PciRevision.Comments.GetHeaderComments(), Name, Value, PciRevision.Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if PciCompress != None: Name = DT.TAB_INF_DEFINES_PCI_COMPRESS Value = PciCompress.GetValue() Statement = _GenInfDefineStateMent(PciCompress.Comments.GetHeaderComments(), Name, Value, PciCompress.Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if len(CustomMakefile) >= 1: for CustomMakefileItem in CustomMakefile: Name = DT.TAB_INF_DEFINES_CUSTOM_MAKEFILE # # Not with Feature Flag Expression # if len(CustomMakefileItem) == 3: if CustomMakefileItem[0] != '': Value = CustomMakefileItem[0] + ' | ' + CustomMakefileItem[1] else: Value = CustomMakefileItem[1] Comments = CustomMakefileItem[2] Statement = _GenInfDefineStateMent(Comments.GetHeaderComments(), Name, Value, Comments.GetTailComments()) DefinesDictNew[Statement] = ArchString if UefiHiiResourceSection != None: Name = DT.TAB_INF_DEFINES_UEFI_HII_RESOURCE_SECTION Value = UefiHiiResourceSection.GetValue() HeaderComment = UefiHiiResourceSection.Comments.GetHeaderComments() TailComment = UefiHiiResourceSection.Comments.GetTailComments() Statement = _GenInfDefineStateMent(HeaderComment, Name, Value, TailComment) DefinesDictNew[Statement] = "" return DefinesDictNew ## Generate the define statement that will be put into userextension # Not support comments. # # @param HeaderComment: the original header comment (# not remvoed) # @param Name: the definition keyword, should not be empty or none # @param Value: the definition keyword value # @param TailComment: the original Tail comment (# not remvoed) # # @return: the regenerated define statement # def _GenInfDefineStateMent(HeaderComment, Name, Value, TailComment): Logger.Debug(5, HeaderComment + TailComment) Statement = '%s = %s' % (Name, Value) return Statement ## GenBinaryData # # def GenBinaryData(BinaryData, BinaryObj, BinariesDict, AsBuildIns, BinaryFileObjectList, \ SupArchList, BinaryModule, DecObjList=None): if BinaryModule: pass OriSupArchList = SupArchList for Item in BinaryData: ItemObj = BinaryObj[Item][0][0] if ItemObj.GetType() not in DT.BINARY_FILE_TYPE_UI_LIST + DT.BINARY_FILE_TYPE_VER_LIST: TagName = ItemObj.GetTagName() Family = ItemObj.GetFamily() else: TagName = '' Family = '' FFE = ItemObj.GetFeatureFlagExp() # # If have architecturie specified, then use the specified architecturie; # If the section tag does not have an architecture modifier or the modifier is "common" (case in-sensitive), # and the VALID_ARCHITECTURES comment exists, the list from the VALID_ARCHITECTURES comment # can be used for the attribute. # If both not have VALID_ARCHITECTURE comment and no architecturie specified, then keep it empty. # SupArchList = ConvertArchList(ItemObj.GetSupArchList()) SupArchList.sort() if len(SupArchList) == 1 and SupArchList[0] == 'COMMON': if not (len(OriSupArchList) == 1 or OriSupArchList[0] == 'COMMON'): SupArchList = OriSupArchList else: SupArchList = ['COMMON'] FileNameObj = CommonObject.FileNameObject() FileNameObj.SetFileType(ItemObj.GetType()) FileNameObj.SetFilename(ItemObj.GetFileName()) FileNameObj.SetFeatureFlag(FFE) # # Get GUID value of the GUID CName in the DEC file # if ItemObj.GetType() == DT.SUBTYPE_GUID_BINARY_FILE_TYPE: if not CheckGuidRegFormat(ItemObj.GetGuidValue()): if not DecObjList: if DT.TAB_HORIZON_LINE_SPLIT in ItemObj.GetGuidValue() or \ DT.TAB_COMMA_SPLIT in ItemObj.GetGuidValue(): Logger.Error("\nMkPkg", FORMAT_INVALID, ST.ERR_DECPARSE_DEFINE_PKGGUID, ExtraData=ItemObj.GetGuidValue(), RaiseError=True) else: Logger.Error("\nMkPkg", FORMAT_INVALID, ST.ERR_UNI_SUBGUID_VALUE_DEFINE_DEC_NOT_FOUND % \ (ItemObj.GetGuidValue()), RaiseError=True) else: for DecObj in DecObjList: for GuidObj in DecObj.GetGuidList(): if GuidObj.GetCName() == ItemObj.GetGuidValue(): FileNameObj.SetGuidValue(GuidObj.GetGuid()) break if not FileNameObj.GetGuidValue(): Logger.Error("\nMkPkg", FORMAT_INVALID, ST.ERR_DECPARSE_CGUID_NOT_FOUND % \ (ItemObj.GetGuidValue()), RaiseError=True) else: FileNameObj.SetGuidValue(ItemObj.GetGuidValue().strip()) FileNameObj.SetSupArchList(SupArchList) FileNameList = [FileNameObj] BinaryFile = BinaryFileObject() BinaryFile.SetFileNameList(FileNameList) BinaryFile.SetAsBuiltList(AsBuildIns) BinaryFileObjectList.append(BinaryFile) SupArchStr = ' '.join(SupArchList) Key = (ItemObj.GetFileName(), ItemObj.GetType(), FFE, SupArchStr) ValueItem = (ItemObj.GetTarget(), Family, TagName, '') if Key in BinariesDict: ValueList = BinariesDict[Key] ValueList.append(ValueItem) BinariesDict[Key] = ValueList else: BinariesDict[Key] = [ValueItem] return BinariesDict, AsBuildIns, BinaryFileObjectList