]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/build/BuildReport.py
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / Source / Python / build / BuildReport.py
index a3eb3b2383e4b6fba6b1a5581a9abb1af0045006..468772930ca19613a9f751b36b1b77eece2f442b 100644 (file)
@@ -34,7 +34,7 @@ from Common.BuildToolError import FORMAT_INVALID
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 import Common.GlobalData as GlobalData\r
-from AutoGen.AutoGen import ModuleAutoGen\r
+from AutoGen.ModuleAutoGen import ModuleAutoGen\r
 from Common.Misc import PathClass\r
 from Common.StringUtils import NormPath\r
 from Common.DataType import *\r
@@ -60,7 +60,7 @@ gPcdGuidPattern = re.compile(r"PCD\((\w+)[.](\w+)\)")
 gOffsetGuidPattern = re.compile(r"(0x[0-9A-Fa-f]+) ([-A-Fa-f0-9]+)")\r
 \r
 ## Pattern to find module base address and entry point in fixed flash map file\r
-gModulePattern = r"\n[-\w]+\s*\(([^,]+),\s*BaseAddress=%(Address)s,\s*EntryPoint=%(Address)s\)\s*\(GUID=([-0-9A-Fa-f]+)[^)]*\)"\r
+gModulePattern = r"\n[-\w]+\s*\(([^,]+),\s*BaseAddress=%(Address)s,\s*EntryPoint=%(Address)s,\s*Type=\w+\)\s*\(GUID=([-0-9A-Fa-f]+)[^)]*\)"\r
 gMapFileItemPattern = re.compile(gModulePattern % {"Address" : "(-?0[xX][0-9A-Fa-f]+)"})\r
 \r
 ## Pattern to find all module referenced header files in source files\r
@@ -558,6 +558,7 @@ class ModuleReport(object):
     def __init__(self, M, ReportType):\r
         self.ModuleName = M.Module.BaseName\r
         self.ModuleInfPath = M.MetaFile.File\r
+        self.ModuleArch = M.Arch\r
         self.FileGuid = M.Guid\r
         self.Size = 0\r
         self.BuildTimeStamp = None\r
@@ -668,6 +669,7 @@ class ModuleReport(object):
 \r
         FileWrite(File, "Module Summary")\r
         FileWrite(File, "Module Name:          %s" % self.ModuleName)\r
+        FileWrite(File, "Module Arch:          %s" % self.ModuleArch)\r
         FileWrite(File, "Module INF Path:      %s" % self.ModuleInfPath)\r
         FileWrite(File, "File GUID:            %s" % self.FileGuid)\r
         if self.Size:\r
@@ -694,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
@@ -879,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
@@ -895,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
@@ -911,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
@@ -991,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
@@ -1079,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
@@ -1089,48 +1098,54 @@ 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.get(Sku)\r
+                                                    if OverrideValues:\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
@@ -1151,13 +1166,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
@@ -1263,7 +1279,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
@@ -1286,14 +1302,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
@@ -1367,9 +1389,10 @@ class PcdReport(object):
                                         FileWrite(File, ' %-*s   : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', Value))\r
                             FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))\r
                             if IsStructure:\r
-                                OverrideValues = Pcd.SkuOverrideValues[Sku]\r
-                                OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[DefaultStore])\r
-                                self.PrintStructureInfo(File, OverrideFieldStruct)\r
+                                OverrideValues = Pcd.SkuOverrideValues.get(Sku)\r
+                                if OverrideValues:\r
+                                    OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[DefaultStore])\r
+                                    self.PrintStructureInfo(File, OverrideFieldStruct)\r
                             self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
                 else:\r
                     Value = SkuInfo.DefaultValue\r
@@ -1417,10 +1440,19 @@ class PcdReport(object):
                         FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
                         VPDPcdItem = (Pcd.TokenSpaceGuidCName + '.' + PcdTokenCName, SkuIdName, SkuInfo.VpdOffset, Pcd.MaxDatumSize, SkuInfo.DefaultValue)\r
                         if VPDPcdItem not in VPDPcdList:\r
-                            VPDPcdList.append(VPDPcdItem)\r
+                            PcdGuidList = self.UnusedPcds.get(Pcd.TokenSpaceGuidCName)\r
+                            if PcdGuidList:\r
+                                PcdList = PcdGuidList.get(Pcd.Type)\r
+                                if not PcdList:\r
+                                    VPDPcdList.append(VPDPcdItem)\r
+                                for VpdPcd in PcdList:\r
+                                    if PcdTokenCName == VpdPcd.TokenCName:\r
+                                        break\r
+                                else:\r
+                                    VPDPcdList.append(VPDPcdItem)\r
                     if IsStructure:\r
                         FiledOverrideFlag = False\r
-                        OverrideValues = Pcd.SkuOverrideValues[Sku]\r
+                        OverrideValues = Pcd.SkuOverrideValues.get(Sku)\r
                         if OverrideValues:\r
                             Keys = list(OverrideValues.keys())\r
                             OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\r
@@ -2031,7 +2063,7 @@ class FdReport(object):
         self.VPDBaseAddress = 0\r
         self.VPDSize = 0\r
         for index, FdRegion in enumerate(Fd.RegionList):\r
-            if str(FdRegion.RegionType) is 'FILE' and Wa.Platform.VpdToolGuid in str(FdRegion.RegionDataList):\r
+            if str(FdRegion.RegionType) == 'FILE' and Wa.Platform.VpdToolGuid in str(FdRegion.RegionDataList):\r
                 self.VPDBaseAddress = self.FdRegionList[index].BaseAddress\r
                 self.VPDSize = self.FdRegionList[index].Size\r
                 break\r
@@ -2140,7 +2172,7 @@ class PlatformReport(object):
                         INFList = GlobalData.gFdfParser.Profile.InfDict[Pa.Arch]\r
                         for InfName in INFList:\r
                             InfClass = PathClass(NormPath(InfName), Wa.WorkspaceDir, Pa.Arch)\r
-                            Ma = ModuleAutoGen(Wa, InfClass, Pa.BuildTarget, Pa.ToolChain, Pa.Arch, Wa.MetaFile)\r
+                            Ma = ModuleAutoGen(Wa, InfClass, Pa.BuildTarget, Pa.ToolChain, Pa.Arch, Wa.MetaFile, Pa.DataPipe)\r
                             if Ma is None:\r
                                 continue\r
                             if Ma not in ModuleAutoGenList:\r