Re: [edk2] [Patch] BaseTools: Correct Structure Pcd value in the report
Reviewed-by: Liming Gao > -Original Message- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Yonghong Zhu > Sent: Friday, March 2, 2018 10:53 PM > To: edk2-devel@lists.01.org > Subject: [edk2] [Patch] 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 > --- > BaseTools/Source/Python/build/BuildReport.py | 72 > > 1 file changed, 63 insertions(+), 9 deletions(-) > > diff --git a/BaseTools/Source/Python/build/BuildReport.py > b/BaseTools/Source/Python/build/BuildReport.py > index b2cc6ee..f4d2c75 100644 > --- a/BaseTools/Source/Python/build/BuildReport.py > +++ b/BaseTools/Source/Python/build/BuildReport.py > @@ -956,11 +956,11 @@ class PcdReport(object): > DscDefaultValBak = DscDefaultValue > DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, > Key), DscDefaultValue) > if DscDefaultValue != DscDefaultValBak: > try: > 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)) > > InfDefaultValue = None > > PcdValue = DecDefaultValue > @@ -1031,13 +1031,46 @@ class PcdReport(object): > 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.SkuOverrideValues: > -DscMatch = True > +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 > +DecMatch = False > + >
[edk2] [Patch] 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 --- BaseTools/Source/Python/build/BuildReport.py | 72 1 file changed, 63 insertions(+), 9 deletions(-) diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py index b2cc6ee..f4d2c75 100644 --- a/BaseTools/Source/Python/build/BuildReport.py +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -956,11 +956,11 @@ class PcdReport(object): DscDefaultValBak = DscDefaultValue DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue) if DscDefaultValue != DscDefaultValBak: try: 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)) InfDefaultValue = None PcdValue = DecDefaultValue @@ -1031,13 +1031,46 @@ class PcdReport(object): 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.SkuOverrideValues: -DscMatch = True +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 +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, ' ') @@ -1080,10 +1113,18 @@ class PcdReport(object): FileWrite(File, gSectionEnd) else: if not ReportSubType and ModulePcdSet: 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 +