]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/build/BuildReport.py
BaseTools: Enable Module Scope Structure Pcd
[mirror_edk2.git] / BaseTools / Source / Python / build / BuildReport.py
index 8efa869162d4d12d47a7ed951a56802b61e01a51..a95bb36811a98529d8002bfca745f9e8bf9f8c4a 100644 (file)
@@ -696,7 +696,7 @@ class ModuleReport(object):
         FileWrite(File, gSectionSep)\r
 \r
         if "PCD" in ReportType:\r
-            GlobalPcdReport.GenerateReport(File, self.ModulePcdSet)\r
+            GlobalPcdReport.GenerateReport(File, self.ModulePcdSet,self.FileGuid)\r
 \r
         if "LIBRARY" in ReportType:\r
             self.LibraryReport.GenerateReport(File)\r
@@ -881,7 +881,7 @@ class PcdReport(object):
                 if DscDefaultValue:\r
                     self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue\r
 \r
-    def GenerateReport(self, File, ModulePcdSet):\r
+    def GenerateReport(self, File, ModulePcdSet,ModuleGuid=None):\r
         if not ModulePcdSet:\r
             if self.ConditionalPcds:\r
                 self.GenerateReportDetail(File, ModulePcdSet, 1)\r
@@ -897,7 +897,7 @@ class PcdReport(object):
                         break\r
                 if not IsEmpty:\r
                     self.GenerateReportDetail(File, ModulePcdSet, 2)\r
-        self.GenerateReportDetail(File, ModulePcdSet)\r
+        self.GenerateReportDetail(File, ModulePcdSet,ModuleGuid = ModuleGuid)\r
 \r
     ##\r
     # Generate report for PCD information\r
@@ -913,7 +913,7 @@ class PcdReport(object):
     #                        directives section report, 2 means Unused Pcds section report\r
     # @param DscOverridePcds Module DSC override PCDs set\r
     #\r
-    def GenerateReportDetail(self, File, ModulePcdSet, ReportSubType = 0):\r
+    def GenerateReportDetail(self, File, ModulePcdSet, ReportSubType = 0,ModuleGuid=None):\r
         PcdDict = self.AllPcds\r
         if ReportSubType == 1:\r
             PcdDict = self.ConditionalPcds\r
@@ -993,10 +993,12 @@ class PcdReport(object):
                 #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
+                PcdComponentValue = None\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
+                    InfDefaultValue, PcdComponentValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+                    PcdValue = PcdComponentValue\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
@@ -1081,6 +1083,11 @@ class PcdReport(object):
                     if TypeName in ('DYNVPD', 'DEXVPD'):\r
                         SkuInfoList = Pcd.SkuInfoList\r
                     Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]\r
+                    if ModulePcdSet and ModulePcdSet.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type)):\r
+                        InfDefaultValue, PcdComponentValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+                        DscDefaultValBak = Pcd.DefaultValue\r
+                        Pcd.DefaultValue = PcdComponentValue\r
+\r
                     Pcd.DatumType = Pcd.StructName\r
                     if TypeName in ('DYNVPD', 'DEXVPD'):\r
                         Pcd.SkuInfoList = SkuInfoList\r
@@ -1091,48 +1098,53 @@ class PcdReport(object):
                         DscDefaultValue = True\r
                         DscMatch = True\r
                         DecMatch = False\r
-                    elif Pcd.SkuOverrideValues:\r
-                        DscOverride = False\r
-                        if Pcd.DefaultFromDSC:\r
-                            DscOverride = True\r
-                        else:\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 Pcd.Type in PCD_DYNAMIC_TYPE_SET | PCD_DYNAMIC_EX_TYPE_SET:\r
+                            DscOverride = False\r
+                            if Pcd.DefaultFromDSC:\r
+                                DscOverride = True\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
+                                DictLen = 0\r
+                                for item in Pcd.SkuOverrideValues:\r
+                                    DictLen += len(Pcd.SkuOverrideValues[item])\r
+                                if not DictLen:\r
+                                    DscOverride = False\r
                                 else:\r
-                                    SkuList = sorted(Pcd.SkuInfoList.keys())\r
-                                    for Sku in SkuList:\r
-                                        SkuInfo = Pcd.SkuInfoList[Sku]\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
+                                    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
-                                        if DscOverride:\r
-                                            break\r
-                        if DscOverride:\r
-                            DscDefaultValue = True\r
-                            DscMatch = True\r
-                            DecMatch = False\r
+                                    else:\r
+                                        SkuList = sorted(Pcd.SkuInfoList.keys())\r
+                                        for Sku in SkuList:\r
+                                            SkuInfo = Pcd.SkuInfoList[Sku]\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
+                                            if DscOverride:\r
+                                                break\r
+                            if DscOverride:\r
+                                DscDefaultValue = True\r
+                                DscMatch = True\r
+                                DecMatch = False\r
+                            else:\r
+                                DecMatch = True\r
                         else:\r
-                            DecMatch = True\r
-                    else:\r
-                        DscDefaultValue = True\r
-                        DscMatch = True\r
-                        DecMatch = False\r
+                            if Pcd.DscRawValue or (ModuleGuid and ModuleGuid.replace("-","S") in Pcd.PcdValueFromComponents):\r
+                                DscDefaultValue = True\r
+                                DscMatch = True\r
+                                DecMatch = False\r
+                            else:\r
+                                DscDefaultValue = False\r
+                                DecMatch = True\r
 \r
                 #\r
                 # Report PCD item according to their override relationship\r
@@ -1153,13 +1165,14 @@ class PcdReport(object):
                 elif BuildOptionMatch:\r
                     self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
                 else:\r
-                    if DscDefaultValue and DscMatch:\r
+                    if PcdComponentValue:\r
+                        self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, PcdComponentValue, DecMatch, DecDefaultValue, '*M', ModuleGuid)\r
+                    elif DscDefaultValue and DscMatch:\r
                         if (Pcd.TokenCName, Key, Field) in self.FdfPcdSet:\r
                             self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')\r
                         else:\r
                             self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')\r
-                    else:\r
-                        self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
+\r
 \r
                 if ModulePcdSet is None:\r
                     if IsStructure:\r
@@ -1265,7 +1278,7 @@ class PcdReport(object):
             for filedvalues in Pcd.DefaultValues.values():\r
                 self.PrintStructureInfo(File, filedvalues)\r
 \r
-    def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = '  '):\r
+    def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = '  ',ModuleGuid=None):\r
         if not Pcd.SkuInfoList:\r
             Value = Pcd.DefaultValue\r
             IsByteArray, ArrayList = ByteArrayForamt(Value)\r
@@ -1288,14 +1301,20 @@ class PcdReport(object):
                     OverrideValues = GlobalData.gPcdSkuOverrides[(Pcd.TokenCName,Pcd.TokenSpaceGuidCName)]\r
                 else:\r
                     OverrideValues = Pcd.SkuOverrideValues\r
+                FieldOverrideValues = None\r
                 if OverrideValues:\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
+                            FieldOverrideValues = Struct[0]\r
                             FiledOverrideFlag = True\r
                             break\r
+                if Pcd.PcdFiledValueFromDscComponent and ModuleGuid and ModuleGuid.replace("-","S") in Pcd.PcdFiledValueFromDscComponent:\r
+                    FieldOverrideValues = Pcd.PcdFiledValueFromDscComponent[ModuleGuid.replace("-","S")]\r
+                if FieldOverrideValues:\r
+                    OverrideFieldStruct = self.OverrideFieldValue(Pcd, FieldOverrideValues)\r
+                    self.PrintStructureInfo(File, OverrideFieldStruct)\r
+\r
                 if not FiledOverrideFlag and (Pcd.PcdFieldValueFromComm or Pcd.PcdFieldValueFromFdf):\r
                     OverrideFieldStruct = self.OverrideFieldValue(Pcd, {})\r
                     self.PrintStructureInfo(File, OverrideFieldStruct)\r