]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/build/BuildReport.py
BaseTools: Fix the *B and *F Flag display for Structure Pcd
[mirror_edk2.git] / BaseTools / Source / Python / build / BuildReport.py
index c7fa1b97db8ddeefca548faf5d03d803f74319b3..de8f0fb087d948d1d7764f8e3f62299ea427aeca 100644 (file)
@@ -888,7 +888,17 @@ class PcdReport(object):
             if self.ConditionalPcds:\r
                 self.GenerateReportDetail(File, ModulePcdSet, 1)\r
             if self.UnusedPcds:\r
-                self.GenerateReportDetail(File, ModulePcdSet, 2)\r
+                IsEmpty = True\r
+                for Token in self.UnusedPcds:\r
+                    TokenDict = self.UnusedPcds[Token]\r
+                    for Type in TokenDict:\r
+                        if TokenDict[Type]:\r
+                            IsEmpty = False\r
+                            break\r
+                    if not IsEmpty:\r
+                        break\r
+                if not IsEmpty:\r
+                    self.GenerateReportDetail(File, ModulePcdSet, 2)\r
         self.GenerateReportDetail(File, ModulePcdSet)\r
 \r
     ##\r
@@ -982,12 +992,16 @@ class PcdReport(object):
                 PcdValue = DecDefaultValue\r
                 if DscDefaultValue:\r
                     PcdValue = DscDefaultValue\r
-                Pcd.DefaultValue = PcdValue\r
+                #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+                if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+                    Pcd.DefaultValue = PcdValue\r
                 if ModulePcdSet is not None:\r
                     if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
                         continue\r
                     InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
-                    Pcd.DefaultValue = PcdValue\r
+                    #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+                    if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+                        Pcd.DefaultValue = PcdValue\r
                     if InfDefaultValue:\r
                         try:\r
                             InfDefaultValue = ValueExpressionEx(InfDefaultValue, Pcd.DatumType, self._GuidDict)(True)\r
@@ -1003,7 +1017,9 @@ class PcdReport(object):
                             if pcd[2]:\r
                                 continue\r
                             PcdValue = pcd[3]\r
-                            Pcd.DefaultValue = PcdValue\r
+                            #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+                            if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+                                Pcd.DefaultValue = PcdValue\r
                             BuildOptionMatch = True\r
                             break\r
 \r
@@ -1050,7 +1066,7 @@ class PcdReport(object):
                         DscMatch = (DscDefaultValue.strip() == PcdValue.strip())\r
 \r
                 IsStructure = False\r
-                if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):\r
+                if self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
                     IsStructure = True\r
                     if TypeName in ('DYNVPD', 'DEXVPD'):\r
                         SkuInfoList = Pcd.SkuInfoList\r
@@ -1058,42 +1074,58 @@ class PcdReport(object):
                     Pcd.DatumType = Pcd.StructName\r
                     if TypeName in ('DYNVPD', 'DEXVPD'):\r
                         Pcd.SkuInfoList = SkuInfoList\r
-                    if Pcd.PcdFieldValueFromComm:\r
+                    if Pcd.PcdValueFromComm or Pcd.PcdFieldValueFromComm:\r
                         BuildOptionMatch = True\r
                         DecMatch = False\r
+                    elif Pcd.PcdValueFromFdf or Pcd.PcdFieldValueFromFdf:\r
+                        DscDefaultValue = True\r
+                        DscMatch = True\r
+                        DecMatch = False\r
                     elif Pcd.SkuOverrideValues:\r
                         DscOverride = False\r
-                        if not Pcd.SkuInfoList:\r
-                            OverrideValues = Pcd.SkuOverrideValues\r
-                            if OverrideValues:\r
-                                Keys = OverrideValues.keys()\r
-                                Data = OverrideValues[Keys[0]]\r
-                                Struct = Data.values()[0]\r
-                                DscOverride = self.ParseStruct(Struct)\r
+                        if Pcd.DefaultFromDSC:\r
+                            DscOverride = True\r
                         else:\r
-                            SkuList = sorted(Pcd.SkuInfoList.keys())\r
-                            for Sku in SkuList:\r
-                                SkuInfo = Pcd.SkuInfoList[Sku]\r
-                                if TypeName in ('DYNHII', 'DEXHII'):\r
-                                    if SkuInfo.DefaultStoreDict:\r
-                                        DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
-                                        for DefaultStore in DefaultStoreList:\r
-                                            OverrideValues = Pcd.SkuOverrideValues[Sku]\r
-                                            DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
-                                            if DscOverride:\r
+                            DictLen = 0\r
+                            for item in Pcd.SkuOverrideValues:\r
+                                DictLen += len(Pcd.SkuOverrideValues[item])\r
+                            if not DictLen:\r
+                                DscOverride = False\r
+                            else:\r
+                                if not Pcd.SkuInfoList:\r
+                                    OverrideValues = Pcd.SkuOverrideValues\r
+                                    if OverrideValues:\r
+                                        for Data in OverrideValues.values():\r
+                                            Struct = list(Data.values())\r
+                                            if Struct:\r
+                                                DscOverride = self.ParseStruct(Struct[0])\r
                                                 break\r
                                 else:\r
-                                    OverrideValues = Pcd.SkuOverrideValues[Sku]\r
-                                    if OverrideValues:\r
-                                        Keys = OverrideValues.keys()\r
-                                        OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
-                                        DscOverride = self.ParseStruct(OverrideFieldStruct)\r
-                                if DscOverride:\r
-                                    break\r
+                                    SkuList = sorted(Pcd.SkuInfoList.keys())\r
+                                    for Sku in SkuList:\r
+                                        SkuInfo = Pcd.SkuInfoList[Sku]\r
+                                        if TypeName in ('DYNHII', 'DEXHII'):\r
+                                            if SkuInfo.DefaultStoreDict:\r
+                                                DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
+                                                for DefaultStore in DefaultStoreList:\r
+                                                    OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+                                                    DscOverride = self.ParseStruct(OverrideValues[DefaultStore])\r
+                                                    if DscOverride:\r
+                                                        break\r
+                                        else:\r
+                                            OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+                                            if OverrideValues:\r
+                                                Keys = list(OverrideValues.keys())\r
+                                                OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
+                                                DscOverride = self.ParseStruct(OverrideFieldStruct)\r
+                                        if DscOverride:\r
+                                            break\r
                         if DscOverride:\r
                             DscDefaultValue = True\r
                             DscMatch = True\r
                             DecMatch = False\r
+                        else:\r
+                            DecMatch = True\r
                     else:\r
                         DscDefaultValue = True\r
                         DscMatch = True\r
@@ -1238,12 +1270,18 @@ class PcdReport(object):
                         Value = "0x{:X} ({})".format(int(Value, 0), Value)\r
                 FileWrite(File, ' %-*s   : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
             if IsStructure:\r
+                FiledOverrideFlag = False\r
                 OverrideValues = Pcd.SkuOverrideValues\r
                 if OverrideValues:\r
-                    Keys = OverrideValues.keys()\r
-                    Data = OverrideValues[Keys[0]]\r
-                    Struct = Data.values()[0]\r
-                    OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct)\r
+                    for Data in OverrideValues.values():\r
+                        Struct = list(Data.values())\r
+                        if Struct:\r
+                            OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct[0])\r
+                            self.PrintStructureInfo(File, OverrideFieldStruct)\r
+                            FiledOverrideFlag = True\r
+                            break\r
+                if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
+                    OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
                     self.PrintStructureInfo(File, OverrideFieldStruct)\r
             self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
         else:\r
@@ -1364,11 +1402,16 @@ class PcdReport(object):
                     if TypeName in ('DYNVPD', 'DEXVPD'):\r
                         FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
                     if IsStructure:\r
+                        FiledOverrideFlag = False\r
                         OverrideValues = Pcd.SkuOverrideValues[Sku]\r
                         if OverrideValues:\r
                             Keys = OverrideValues.keys()\r
                             OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
                             self.PrintStructureInfo(File, OverrideFieldStruct)\r
+                            FiledOverrideFlag = True\r
+                        if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
+                            OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
+                            self.PrintStructureInfo(File, OverrideFieldStruct)\r
                     self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
 \r
     def OverrideFieldValue(self, Pcd, OverrideStruct):\r
@@ -1428,6 +1471,12 @@ class PcdReport(object):
             else:\r
                 return value\r
 \r
+    def IsStructurePcd(self, PcdToken, PcdTokenSpaceGuid):\r
+        if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((PcdToken, PcdTokenSpaceGuid) in GlobalData.gStructurePcd[self.Arch]):\r
+            return True\r
+        else:\r
+            return False\r
+\r
 ##\r
 # Reports platform and module Prediction information\r
 #\r
@@ -1592,7 +1641,7 @@ class PredictionReport(object):
         TempFile.close()\r
 \r
         try:\r
-            from Eot.Eot import Eot\r
+            from Eot.EotMain import Eot\r
 \r
             #\r
             # Invoke EOT tool and echo its runtime performance\r