BaseTools: Sort PCD by token space first then by PcdCName
Sort PCD by token space first, then by PcdCName in the build report. Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com> Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
parent
8653ea2088
commit
238d9b5c64
|
@ -927,190 +927,194 @@ class PcdReport(object):
|
||||||
FileWrite(File, gSubSectionStart)
|
FileWrite(File, gSubSectionStart)
|
||||||
FileWrite(File, TAB_BRG_PCD)
|
FileWrite(File, TAB_BRG_PCD)
|
||||||
FileWrite(File, gSubSectionSep)
|
FileWrite(File, gSubSectionSep)
|
||||||
|
AllPcdDict = {}
|
||||||
for Key in PcdDict:
|
for Key in PcdDict:
|
||||||
|
AllPcdDict[Key] = {}
|
||||||
|
for Type in PcdDict[Key]:
|
||||||
|
for Pcd in PcdDict[Key][Type]:
|
||||||
|
AllPcdDict[Key][(Pcd.TokenCName, Type)] = Pcd
|
||||||
|
for Key in sorted(AllPcdDict):
|
||||||
#
|
#
|
||||||
# Group PCD by their token space GUID C Name
|
# Group PCD by their token space GUID C Name
|
||||||
#
|
#
|
||||||
First = True
|
First = True
|
||||||
for Type in PcdDict[Key]:
|
for PcdTokenCName, Type in sorted(AllPcdDict[Key]):
|
||||||
#
|
#
|
||||||
# Group PCD by their usage type
|
# Group PCD by their usage type
|
||||||
#
|
#
|
||||||
|
Pcd = AllPcdDict[Key][(PcdTokenCName, Type)]
|
||||||
TypeName, DecType = gPcdTypeMap.get(Type, ("", Type))
|
TypeName, DecType = gPcdTypeMap.get(Type, ("", Type))
|
||||||
for Pcd in PcdDict[Key][Type]:
|
MixedPcdFlag = False
|
||||||
PcdTokenCName = Pcd.TokenCName
|
if GlobalData.MixedPcd:
|
||||||
MixedPcdFlag = False
|
for PcdKey in GlobalData.MixedPcd:
|
||||||
if GlobalData.MixedPcd:
|
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdKey]:
|
||||||
for PcdKey in GlobalData.MixedPcd:
|
PcdTokenCName = PcdKey[0]
|
||||||
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.MixedPcd[PcdKey]:
|
MixedPcdFlag = True
|
||||||
PcdTokenCName = PcdKey[0]
|
if MixedPcdFlag and not ModulePcdSet:
|
||||||
MixedPcdFlag = True
|
continue
|
||||||
if MixedPcdFlag and not ModulePcdSet:
|
#
|
||||||
continue
|
# Get PCD default value and their override relationship
|
||||||
#
|
#
|
||||||
# Get PCD default value and their override relationship
|
DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))
|
||||||
#
|
DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))
|
||||||
DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))
|
DscDefaultValBak = DscDefaultValue
|
||||||
DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))
|
DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)
|
||||||
DscDefaultValBak = DscDefaultValue
|
if DscDefaultValue != DscDefaultValBak:
|
||||||
DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)
|
try:
|
||||||
if DscDefaultValue != DscDefaultValBak:
|
DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)
|
||||||
try:
|
except BadExpression, DscDefaultValue:
|
||||||
DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)
|
EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))
|
||||||
except BadExpression, DscDefaultValue:
|
|
||||||
EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))
|
|
||||||
|
|
||||||
InfDefaultValue = None
|
InfDefaultValue = None
|
||||||
|
|
||||||
PcdValue = DecDefaultValue
|
PcdValue = DecDefaultValue
|
||||||
if DscDefaultValue:
|
if DscDefaultValue:
|
||||||
PcdValue = DscDefaultValue
|
PcdValue = DscDefaultValue
|
||||||
if ModulePcdSet is not None:
|
if ModulePcdSet is not None:
|
||||||
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:
|
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:
|
||||||
continue
|
continue
|
||||||
InfDefault, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]
|
InfDefault, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]
|
||||||
Pcd.DefaultValue = PcdValue
|
Pcd.DefaultValue = PcdValue
|
||||||
if InfDefault == "":
|
if InfDefault == "":
|
||||||
InfDefault = None
|
InfDefault = None
|
||||||
|
|
||||||
BuildOptionMatch = False
|
BuildOptionMatch = False
|
||||||
if GlobalData.BuildOptionPcd:
|
if GlobalData.BuildOptionPcd:
|
||||||
for pcd in GlobalData.BuildOptionPcd:
|
for pcd in GlobalData.BuildOptionPcd:
|
||||||
if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) == (pcd[0], pcd[1]):
|
if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) == (pcd[0], pcd[1]):
|
||||||
if pcd[2]:
|
if pcd[2]:
|
||||||
continue
|
continue
|
||||||
PcdValue = pcd[3]
|
PcdValue = pcd[3]
|
||||||
Pcd.DefaultValue = PcdValue
|
Pcd.DefaultValue = PcdValue
|
||||||
BuildOptionMatch = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if First:
|
|
||||||
if ModulePcdSet is None:
|
|
||||||
FileWrite(File, "")
|
|
||||||
FileWrite(File, Key)
|
|
||||||
First = False
|
|
||||||
|
|
||||||
|
|
||||||
if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:
|
|
||||||
PcdValueNumber = int(PcdValue.strip(), 0)
|
|
||||||
if DecDefaultValue is None:
|
|
||||||
DecMatch = True
|
|
||||||
else:
|
|
||||||
DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)
|
|
||||||
DecMatch = (DecDefaultValueNumber == PcdValueNumber)
|
|
||||||
|
|
||||||
if InfDefaultValue is None:
|
|
||||||
InfMatch = True
|
|
||||||
else:
|
|
||||||
InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)
|
|
||||||
InfMatch = (InfDefaultValueNumber == PcdValueNumber)
|
|
||||||
|
|
||||||
if DscDefaultValue is None:
|
|
||||||
DscMatch = True
|
|
||||||
else:
|
|
||||||
DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)
|
|
||||||
DscMatch = (DscDefaultValueNumber == PcdValueNumber)
|
|
||||||
else:
|
|
||||||
if DecDefaultValue is None:
|
|
||||||
DecMatch = True
|
|
||||||
else:
|
|
||||||
DecMatch = (DecDefaultValue.strip() == PcdValue.strip())
|
|
||||||
|
|
||||||
if InfDefaultValue is None:
|
|
||||||
InfMatch = True
|
|
||||||
else:
|
|
||||||
InfMatch = (InfDefaultValue.strip() == PcdValue.strip())
|
|
||||||
|
|
||||||
if DscDefaultValue is None:
|
|
||||||
DscMatch = True
|
|
||||||
else:
|
|
||||||
DscMatch = (DscDefaultValue.strip() == PcdValue.strip())
|
|
||||||
|
|
||||||
IsStructure = False
|
|
||||||
if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):
|
|
||||||
IsStructure = True
|
|
||||||
if TypeName in ('DYNVPD', 'DEXVPD'):
|
|
||||||
SkuInfoList = Pcd.SkuInfoList
|
|
||||||
Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]
|
|
||||||
Pcd.DatumType = Pcd.StructName
|
|
||||||
if TypeName in ('DYNVPD', 'DEXVPD'):
|
|
||||||
Pcd.SkuInfoList = SkuInfoList
|
|
||||||
if Pcd.PcdFieldValueFromComm:
|
|
||||||
BuildOptionMatch = True
|
BuildOptionMatch = True
|
||||||
DecMatch = False
|
break
|
||||||
elif Pcd.SkuOverrideValues:
|
|
||||||
DscOverride = False
|
|
||||||
if not Pcd.SkuInfoList:
|
|
||||||
OverrideValues = Pcd.SkuOverrideValues
|
|
||||||
if OverrideValues:
|
|
||||||
Keys = OverrideValues.keys()
|
|
||||||
Data = OverrideValues[Keys[0]]
|
|
||||||
Struct = Data.values()[0]
|
|
||||||
DscOverride = self.ParseStruct(Struct)
|
|
||||||
else:
|
|
||||||
SkuList = sorted(Pcd.SkuInfoList.keys())
|
|
||||||
for Sku in SkuList:
|
|
||||||
SkuInfo = Pcd.SkuInfoList[Sku]
|
|
||||||
if TypeName in ('DYNHII', 'DEXHII'):
|
|
||||||
if SkuInfo.DefaultStoreDict:
|
|
||||||
DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())
|
|
||||||
for DefaultStore in DefaultStoreList:
|
|
||||||
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
|
||||||
DscOverride = self.ParseStruct(OverrideValues[DefaultStore])
|
|
||||||
if DscOverride:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
|
||||||
if OverrideValues:
|
|
||||||
Keys = OverrideValues.keys()
|
|
||||||
OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])
|
|
||||||
DscOverride = self.ParseStruct(OverrideFieldStruct)
|
|
||||||
if DscOverride:
|
|
||||||
break
|
|
||||||
if DscOverride:
|
|
||||||
DscMatch = True
|
|
||||||
DecMatch = False
|
|
||||||
|
|
||||||
#
|
|
||||||
# Report PCD item according to their override relationship
|
|
||||||
#
|
|
||||||
if DecMatch and InfMatch:
|
|
||||||
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')
|
|
||||||
elif BuildOptionMatch:
|
|
||||||
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')
|
|
||||||
else:
|
|
||||||
if DscMatch:
|
|
||||||
if (Pcd.TokenCName, Key) in self.FdfPcdSet:
|
|
||||||
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')
|
|
||||||
else:
|
|
||||||
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')
|
|
||||||
else:
|
|
||||||
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')
|
|
||||||
|
|
||||||
|
if First:
|
||||||
if ModulePcdSet is None:
|
if ModulePcdSet is None:
|
||||||
if IsStructure:
|
FileWrite(File, "")
|
||||||
continue
|
FileWrite(File, Key)
|
||||||
if not TypeName in ('PATCH', 'FLAG', 'FIXED'):
|
First = False
|
||||||
continue
|
|
||||||
if not BuildOptionMatch:
|
|
||||||
ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})
|
if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:
|
||||||
for ModulePath in ModuleOverride:
|
PcdValueNumber = int(PcdValue.strip(), 0)
|
||||||
ModuleDefault = ModuleOverride[ModulePath]
|
if DecDefaultValue is None:
|
||||||
if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:
|
DecMatch = True
|
||||||
ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)
|
else:
|
||||||
Match = (ModulePcdDefaultValueNumber == PcdValueNumber)
|
DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)
|
||||||
|
DecMatch = (DecDefaultValueNumber == PcdValueNumber)
|
||||||
|
|
||||||
|
if InfDefaultValue is None:
|
||||||
|
InfMatch = True
|
||||||
|
else:
|
||||||
|
InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)
|
||||||
|
InfMatch = (InfDefaultValueNumber == PcdValueNumber)
|
||||||
|
|
||||||
|
if DscDefaultValue is None:
|
||||||
|
DscMatch = True
|
||||||
|
else:
|
||||||
|
DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)
|
||||||
|
DscMatch = (DscDefaultValueNumber == PcdValueNumber)
|
||||||
|
else:
|
||||||
|
if DecDefaultValue is None:
|
||||||
|
DecMatch = True
|
||||||
|
else:
|
||||||
|
DecMatch = (DecDefaultValue.strip() == PcdValue.strip())
|
||||||
|
|
||||||
|
if InfDefaultValue is None:
|
||||||
|
InfMatch = True
|
||||||
|
else:
|
||||||
|
InfMatch = (InfDefaultValue.strip() == PcdValue.strip())
|
||||||
|
|
||||||
|
if DscDefaultValue is None:
|
||||||
|
DscMatch = True
|
||||||
|
else:
|
||||||
|
DscMatch = (DscDefaultValue.strip() == PcdValue.strip())
|
||||||
|
|
||||||
|
IsStructure = False
|
||||||
|
if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):
|
||||||
|
IsStructure = True
|
||||||
|
if TypeName in ('DYNVPD', 'DEXVPD'):
|
||||||
|
SkuInfoList = Pcd.SkuInfoList
|
||||||
|
Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]
|
||||||
|
Pcd.DatumType = Pcd.StructName
|
||||||
|
if TypeName in ('DYNVPD', 'DEXVPD'):
|
||||||
|
Pcd.SkuInfoList = SkuInfoList
|
||||||
|
if Pcd.PcdFieldValueFromComm:
|
||||||
|
BuildOptionMatch = True
|
||||||
|
DecMatch = False
|
||||||
|
elif Pcd.SkuOverrideValues:
|
||||||
|
DscOverride = False
|
||||||
|
if not Pcd.SkuInfoList:
|
||||||
|
OverrideValues = Pcd.SkuOverrideValues
|
||||||
|
if OverrideValues:
|
||||||
|
Keys = OverrideValues.keys()
|
||||||
|
Data = OverrideValues[Keys[0]]
|
||||||
|
Struct = Data.values()[0]
|
||||||
|
DscOverride = self.ParseStruct(Struct)
|
||||||
|
else:
|
||||||
|
SkuList = sorted(Pcd.SkuInfoList.keys())
|
||||||
|
for Sku in SkuList:
|
||||||
|
SkuInfo = Pcd.SkuInfoList[Sku]
|
||||||
|
if TypeName in ('DYNHII', 'DEXHII'):
|
||||||
|
if SkuInfo.DefaultStoreDict:
|
||||||
|
DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())
|
||||||
|
for DefaultStore in DefaultStoreList:
|
||||||
|
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
||||||
|
DscOverride = self.ParseStruct(OverrideValues[DefaultStore])
|
||||||
|
if DscOverride:
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
Match = (ModuleDefault.strip() == PcdValue.strip())
|
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
||||||
if Match:
|
if OverrideValues:
|
||||||
continue
|
Keys = OverrideValues.keys()
|
||||||
IsByteArray, ArrayList = ByteArrayForamt(ModuleDefault.strip())
|
OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])
|
||||||
if IsByteArray:
|
DscOverride = self.ParseStruct(OverrideFieldStruct)
|
||||||
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, '{'))
|
if DscOverride:
|
||||||
for Array in ArrayList:
|
break
|
||||||
FileWrite(File, '%s' % (Array))
|
if DscOverride:
|
||||||
else:
|
DscMatch = True
|
||||||
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))
|
DecMatch = False
|
||||||
|
|
||||||
|
#
|
||||||
|
# Report PCD item according to their override relationship
|
||||||
|
#
|
||||||
|
if DecMatch and InfMatch:
|
||||||
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')
|
||||||
|
elif BuildOptionMatch:
|
||||||
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')
|
||||||
|
else:
|
||||||
|
if DscMatch:
|
||||||
|
if (Pcd.TokenCName, Key) in self.FdfPcdSet:
|
||||||
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')
|
||||||
|
else:
|
||||||
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')
|
||||||
|
else:
|
||||||
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')
|
||||||
|
|
||||||
|
if ModulePcdSet is None:
|
||||||
|
if IsStructure:
|
||||||
|
continue
|
||||||
|
if not TypeName in ('PATCH', 'FLAG', 'FIXED'):
|
||||||
|
continue
|
||||||
|
if not BuildOptionMatch:
|
||||||
|
ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})
|
||||||
|
for ModulePath in ModuleOverride:
|
||||||
|
ModuleDefault = ModuleOverride[ModulePath]
|
||||||
|
if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:
|
||||||
|
ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)
|
||||||
|
Match = (ModulePcdDefaultValueNumber == PcdValueNumber)
|
||||||
|
else:
|
||||||
|
Match = (ModuleDefault.strip() == PcdValue.strip())
|
||||||
|
if Match:
|
||||||
|
continue
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(ModuleDefault.strip())
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 15, ModulePath, '{'))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 15, ModulePath, ModuleDefault.strip()))
|
||||||
|
|
||||||
if ModulePcdSet is None:
|
if ModulePcdSet is None:
|
||||||
FileWrite(File, gSectionEnd)
|
FileWrite(File, gSectionEnd)
|
||||||
|
|
Loading…
Reference in New Issue