BaseTools: Correct Structure Pcd value in the report
The patch "Fixed build failed issue" changed structure Pcd Object, so
we need update build report to correct structure Pcd Value.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
(cherry picked from commit 24326f381f
)
This commit is contained in:
@ -958,7 +958,7 @@ class PcdReport(object):
|
|||||||
if DscDefaultValue != DscDefaultValBak:
|
if DscDefaultValue != DscDefaultValBak:
|
||||||
try:
|
try:
|
||||||
DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)
|
DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)
|
||||||
except BadExpression, Value:
|
except BadExpression, DscDefaultValue:
|
||||||
EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))
|
EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))
|
||||||
|
|
||||||
InfDefaultValue = None
|
InfDefaultValue = None
|
||||||
@ -1033,9 +1033,42 @@ class PcdReport(object):
|
|||||||
Pcd.DatumType = Pcd.StructName
|
Pcd.DatumType = Pcd.StructName
|
||||||
if TypeName in ('DYNVPD', 'DEXVPD'):
|
if TypeName in ('DYNVPD', 'DEXVPD'):
|
||||||
Pcd.SkuInfoList = SkuInfoList
|
Pcd.SkuInfoList = SkuInfoList
|
||||||
if Pcd.SkuOverrideValues:
|
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:
|
||||||
|
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
|
DscMatch = True
|
||||||
DecMatch = False
|
DecMatch = False
|
||||||
|
|
||||||
#
|
#
|
||||||
# Report PCD item according to their override relationship
|
# Report PCD item according to their override relationship
|
||||||
#
|
#
|
||||||
@ -1082,6 +1115,14 @@ class PcdReport(object):
|
|||||||
if not ReportSubType and ModulePcdSet:
|
if not ReportSubType and ModulePcdSet:
|
||||||
FileWrite(File, gSubSectionEnd)
|
FileWrite(File, gSubSectionEnd)
|
||||||
|
|
||||||
|
def ParseStruct(self, struct):
|
||||||
|
HasDscOverride = False
|
||||||
|
if struct:
|
||||||
|
for _, Values in struct.items():
|
||||||
|
if Values[1] and Values[1].endswith('.dsc'):
|
||||||
|
HasDscOverride = True
|
||||||
|
break
|
||||||
|
return HasDscOverride
|
||||||
|
|
||||||
def PrintPcdDefault(self, File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue):
|
def PrintPcdDefault(self, File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue):
|
||||||
if not DscMatch and DscDefaultValue != None:
|
if not DscMatch and DscDefaultValue != None:
|
||||||
@ -1114,6 +1155,8 @@ class PcdReport(object):
|
|||||||
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))
|
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))
|
||||||
if IsStructure:
|
if IsStructure:
|
||||||
self.PrintStructureInfo(File, Pcd.DefaultValues)
|
self.PrintStructureInfo(File, Pcd.DefaultValues)
|
||||||
|
if DecMatch and IsStructure:
|
||||||
|
self.PrintStructureInfo(File, Pcd.DefaultValues)
|
||||||
|
|
||||||
def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = ' '):
|
def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = ' '):
|
||||||
if not Pcd.SkuInfoList:
|
if not Pcd.SkuInfoList:
|
||||||
@ -1131,7 +1174,8 @@ class PcdReport(object):
|
|||||||
Keys = OverrideValues.keys()
|
Keys = OverrideValues.keys()
|
||||||
Data = OverrideValues[Keys[0]]
|
Data = OverrideValues[Keys[0]]
|
||||||
Struct = Data.values()[0]
|
Struct = Data.values()[0]
|
||||||
self.PrintStructureInfo(File, Struct)
|
OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct)
|
||||||
|
self.PrintStructureInfo(File, OverrideFieldStruct)
|
||||||
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
||||||
else:
|
else:
|
||||||
FirstPrint = True
|
FirstPrint = True
|
||||||
@ -1191,8 +1235,8 @@ class PcdReport(object):
|
|||||||
FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))
|
FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))
|
||||||
if IsStructure:
|
if IsStructure:
|
||||||
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
||||||
Struct = OverrideValues[DefaultStore]
|
OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[DefaultStore])
|
||||||
self.PrintStructureInfo(File, Struct)
|
self.PrintStructureInfo(File, OverrideFieldStruct)
|
||||||
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
||||||
else:
|
else:
|
||||||
Value = SkuInfo.DefaultValue
|
Value = SkuInfo.DefaultValue
|
||||||
@ -1230,12 +1274,22 @@ class PcdReport(object):
|
|||||||
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
OverrideValues = Pcd.SkuOverrideValues[Sku]
|
||||||
if OverrideValues:
|
if OverrideValues:
|
||||||
Keys = OverrideValues.keys()
|
Keys = OverrideValues.keys()
|
||||||
Struct = OverrideValues[Keys[0]]
|
OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])
|
||||||
self.PrintStructureInfo(File, Struct)
|
self.PrintStructureInfo(File, OverrideFieldStruct)
|
||||||
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
||||||
|
|
||||||
|
def OverrideFieldValue(self, Pcd, OverrideStruct):
|
||||||
|
OverrideFieldStruct = collections.OrderedDict()
|
||||||
|
if OverrideStruct:
|
||||||
|
for Key, Values in OverrideStruct.items():
|
||||||
|
if Values[1] and Values[1].endswith('.dsc'):
|
||||||
|
OverrideFieldStruct[Key] = Values
|
||||||
|
if Pcd.PcdFieldValueFromComm:
|
||||||
|
for Key, Values in Pcd.PcdFieldValueFromComm.items():
|
||||||
|
OverrideFieldStruct[Key] = Values
|
||||||
|
return OverrideFieldStruct
|
||||||
|
|
||||||
def PrintStructureInfo(self, File, Struct):
|
def PrintStructureInfo(self, File, Struct):
|
||||||
NewInfo = collections.OrderedDict()
|
|
||||||
for Key, Value in Struct.items():
|
for Key, Value in Struct.items():
|
||||||
if Value[1] and 'build command options' in Value[1]:
|
if Value[1] and 'build command options' in Value[1]:
|
||||||
FileWrite(File, ' *B %-*s = %s' % (self.MaxLen + 4, '.' + Key, Value[0]))
|
FileWrite(File, ' *B %-*s = %s' % (self.MaxLen + 4, '.' + Key, Value[0]))
|
||||||
|
Reference in New Issue
Block a user