# This module contains the functionality to generate build report after\r
# build all target completes successfully.\r
#\r
-# Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
from Common.Misc import SaveFileOnChange\r
from Common.Misc import GuidStructureByteArrayToGuidString\r
from Common.Misc import GuidStructureStringToGuidString\r
-from Common.InfClassObject import gComponentType2ModuleType\r
from Common.BuildToolError import FILE_WRITE_FAILURE\r
from Common.BuildToolError import CODE_ERROR\r
from Common.BuildToolError import COMMAND_FAILURE\r
+from Common.BuildToolError import FORMAT_INVALID\r
from Common.LongFilePathSupport import OpenLongFilePath as open\r
from Common.MultipleWorkspace import MultipleWorkspace as mws\r
import Common.GlobalData as GlobalData\r
from Common.String import NormPath\r
from Common.DataType import *\r
import collections\r
+from Common.Expression import *\r
+\r
+gComponentType2ModuleType = {\r
+ "LIBRARY" : "BASE",\r
+ "SECURITY_CORE" : "SEC",\r
+ "PEI_CORE" : "PEI_CORE",\r
+ "COMBINED_PEIM_DRIVER" : "PEIM",\r
+ "PIC_PEIM" : "PEIM",\r
+ "RELOCATABLE_PEIM" : "PEIM",\r
+ "PE32_PEIM" : "PEIM",\r
+ "BS_DRIVER" : "DXE_DRIVER",\r
+ "RT_DRIVER" : "DXE_RUNTIME_DRIVER",\r
+ "SAL_RT_DRIVER" : "DXE_SAL_DRIVER",\r
+ "APPLICATION" : "UEFI_APPLICATION",\r
+ "LOGO" : "BASE",\r
+}\r
\r
## Pattern to extract contents in EDK DXS files\r
gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", re.DOTALL)\r
# read one line a time\r
Line = From.readline()\r
# empty string means "end"\r
- if Line != None and Line != "":\r
+ if Line is not None and Line != "":\r
To(Line.rstrip())\r
else:\r
break\r
else:\r
self.FdfPcdSet = {}\r
\r
+ self.DefaultStoreSingle = True\r
+ self.SkuSingle = True\r
+ if GlobalData.gDefaultStores and len(GlobalData.gDefaultStores) > 1:\r
+ self.DefaultStoreSingle = False\r
+ if GlobalData.gSkuids and len(GlobalData.gSkuids) > 1:\r
+ self.SkuSingle = False\r
+\r
self.ModulePcdOverride = {}\r
for Pa in Wa.AutoGenObjectList:\r
self.Arch = Pa.Arch\r
for PcdItem in GlobalData.gConditionalPcds:\r
if '.' in PcdItem:\r
(TokenSpaceGuidCName, TokenCName) = PcdItem.split('.')\r
- if (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds.keys():\r
+ if (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds:\r
Pcd = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)]\r
PcdList = self.ConditionalPcds.setdefault(Pcd.TokenSpaceGuidCName, {}).setdefault(Pcd.Type, [])\r
if Pcd not in PcdList:\r
# Collect PCD DEC default value.\r
#\r
self.DecPcdDefault = {}\r
+ self._GuidDict = {}\r
for Pa in Wa.AutoGenObjectList:\r
for Package in Pa.PackageList:\r
+ Guids = Package.Guids\r
+ self._GuidDict.update(Guids)\r
for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds:\r
DecDefaultValue = Package.Pcds[TokenCName, TokenSpaceGuidCName, DecType].DefaultValue\r
self.DecPcdDefault.setdefault((TokenCName, TokenSpaceGuidCName, DecType), DecDefaultValue)\r
self.DscPcdDefault = {}\r
for Pa in Wa.AutoGenObjectList:\r
for (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds:\r
- DscDefaultValue = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue\r
+ DscDefaultValue = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DscDefaultValue\r
if DscDefaultValue:\r
self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue\r
\r
def GenerateReport(self, File, ModulePcdSet):\r
- if self.ConditionalPcds:\r
- self.GenerateReportDetail(File, ModulePcdSet, 1)\r
- if self.UnusedPcds:\r
- self.GenerateReportDetail(File, ModulePcdSet, 2)\r
+ if not ModulePcdSet:\r
+ if self.ConditionalPcds:\r
+ self.GenerateReportDetail(File, ModulePcdSet, 1)\r
+ if self.UnusedPcds:\r
+ self.GenerateReportDetail(File, ModulePcdSet, 2)\r
self.GenerateReportDetail(File, ModulePcdSet)\r
\r
##\r
elif ReportSubType == 2:\r
PcdDict = self.UnusedPcds\r
\r
- if ModulePcdSet == None:\r
+ if not ModulePcdSet:\r
FileWrite(File, gSectionStart)\r
if ReportSubType == 1:\r
FileWrite(File, "Conditional Directives used by the build system")\r
#\r
DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType))\r
DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName))\r
- DscDefaultValBak= DscDefaultValue\r
+ DscDefaultValBak = DscDefaultValue\r
DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue)\r
+ if DscDefaultValue != DscDefaultValBak:\r
+ try:\r
+ DscDefaultValue = ValueExpressionEx(DscDefaultValue, Pcd.DatumType, self._GuidDict)(True)\r
+ except BadExpression, DscDefaultValue:\r
+ EdkLogger.error('BuildReport', FORMAT_INVALID, "PCD Value: %s, Type: %s" %(DscDefaultValue, Pcd.DatumType))\r
+\r
InfDefaultValue = None\r
\r
PcdValue = DecDefaultValue\r
if DscDefaultValue:\r
PcdValue = DscDefaultValue\r
- if ModulePcdSet != None:\r
+ if ModulePcdSet is not None:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
continue\r
InfDefault, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
+ Pcd.DefaultValue = PcdValue\r
if InfDefault == "":\r
InfDefault = None\r
\r
if GlobalData.BuildOptionPcd:\r
for pcd in GlobalData.BuildOptionPcd:\r
if (Pcd.TokenSpaceGuidCName, Pcd.TokenCName) == (pcd[0], pcd[1]):\r
- PcdValue = pcd[2]\r
+ if pcd[2]:\r
+ continue\r
+ PcdValue = pcd[3]\r
+ Pcd.DefaultValue = PcdValue\r
BuildOptionMatch = True\r
break\r
\r
if First:\r
- if ModulePcdSet == None:\r
+ if ModulePcdSet is None:\r
FileWrite(File, "")\r
FileWrite(File, Key)\r
First = False\r
\r
\r
- if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'):\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
PcdValueNumber = int(PcdValue.strip(), 0)\r
- if DecDefaultValue == None:\r
+ if DecDefaultValue is None:\r
DecMatch = True\r
else:\r
DecDefaultValueNumber = int(DecDefaultValue.strip(), 0)\r
DecMatch = (DecDefaultValueNumber == PcdValueNumber)\r
\r
- if InfDefaultValue == None:\r
+ if InfDefaultValue is None:\r
InfMatch = True\r
else:\r
InfDefaultValueNumber = int(InfDefaultValue.strip(), 0)\r
InfMatch = (InfDefaultValueNumber == PcdValueNumber)\r
\r
- if DscDefaultValue == None:\r
+ if DscDefaultValue is None:\r
DscMatch = True\r
else:\r
DscDefaultValueNumber = int(DscDefaultValue.strip(), 0)\r
DscMatch = (DscDefaultValueNumber == PcdValueNumber)\r
else:\r
- if DecDefaultValue == None:\r
+ if DecDefaultValue is None:\r
DecMatch = True\r
else:\r
DecMatch = (DecDefaultValue.strip() == PcdValue.strip())\r
\r
- if InfDefaultValue == None:\r
+ if InfDefaultValue is None:\r
InfMatch = True\r
else:\r
InfMatch = (InfDefaultValue.strip() == PcdValue.strip())\r
\r
- if DscDefaultValue == None:\r
+ if DscDefaultValue is None:\r
DscMatch = True\r
else:\r
DscMatch = (DscDefaultValue.strip() == PcdValue.strip())\r
\r
IsStructure = False\r
- if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd.keys()) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):\r
+ if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):\r
IsStructure = True\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
SkuInfoList = Pcd.SkuInfoList\r
Pcd.DatumType = Pcd.StructName\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
Pcd.SkuInfoList = SkuInfoList\r
- if Pcd.OverrideValues:\r
- DscMatch = True\r
+ if Pcd.PcdFieldValueFromComm:\r
+ BuildOptionMatch = 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
+ 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
+ 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
+ if DscOverride:\r
+ DscMatch = True\r
+ DecMatch = False\r
+\r
#\r
# Report PCD item according to their override relationship\r
#\r
if DecMatch and InfMatch:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')\r
elif BuildOptionMatch:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
else:\r
if DscMatch:\r
if (Pcd.TokenCName, Key) in self.FdfPcdSet:\r
- self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')\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, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')\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, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValBak, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
\r
- if ModulePcdSet == None:\r
+ if ModulePcdSet is None:\r
if IsStructure:\r
continue\r
if not TypeName in ('PATCH', 'FLAG', 'FIXED'):\r
ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})\r
for ModulePath in ModuleOverride:\r
ModuleDefault = ModuleOverride[ModulePath]\r
- if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'):\r
+ if Pcd.DatumType in TAB_PCD_CLEAN_NUMERIC_TYPES:\r
ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0)\r
Match = (ModulePcdDefaultValueNumber == PcdValueNumber)\r
else:\r
else:\r
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))\r
\r
- if ModulePcdSet == None:\r
+ if ModulePcdSet is None:\r
FileWrite(File, gSectionEnd)\r
else:\r
if not ReportSubType and ModulePcdSet:\r
FileWrite(File, gSubSectionEnd)\r
\r
+ def ParseStruct(self, struct):\r
+ HasDscOverride = False\r
+ if struct:\r
+ for _, Values in struct.items():\r
+ if Values[1] and Values[1].endswith('.dsc'):\r
+ HasDscOverride = True\r
+ break\r
+ return HasDscOverride\r
\r
def PrintPcdDefault(self, File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue):\r
- if not DscMatch and DscDefaultValue != None:\r
+ if not DscMatch and DscDefaultValue is not None:\r
Value = DscDefaultValue.strip()\r
IsByteArray, ArrayList = ByteArrayForamt(Value)\r
if IsByteArray:\r
FileWrite(File, '%s' % (Array))\r
else:\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', Value))\r
- if not InfMatch and InfDefaultValue != None:\r
+ if not InfMatch and InfDefaultValue is not None:\r
Value = InfDefaultValue.strip()\r
IsByteArray, ArrayList = ByteArrayForamt(Value)\r
if IsByteArray:\r
else:\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', Value))\r
\r
- if not DecMatch and DecDefaultValue != None:\r
+ if not DecMatch and DecDefaultValue is not None:\r
Value = DecDefaultValue.strip()\r
IsByteArray, ArrayList = ByteArrayForamt(Value)\r
if IsByteArray:\r
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))\r
if IsStructure:\r
self.PrintStructureInfo(File, Pcd.DefaultValues)\r
+ if DecMatch and IsStructure:\r
+ self.PrintStructureInfo(File, Pcd.DefaultValues)\r
\r
def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = ' '):\r
if not Pcd.SkuInfoList:\r
else:\r
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
if IsStructure:\r
- OverrideValues = Pcd.OverrideValues\r
+ OverrideValues = Pcd.SkuOverrideValues\r
if OverrideValues:\r
Keys = OverrideValues.keys()\r
Data = OverrideValues[Keys[0]]\r
Struct = Data.values()[0]\r
- self.PrintStructureInfo(File, Struct)\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, Struct)\r
+ self.PrintStructureInfo(File, OverrideFieldStruct)\r
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
else:\r
FirstPrint = True\r
SkuList = sorted(Pcd.SkuInfoList.keys())\r
for Sku in SkuList:\r
SkuInfo = Pcd.SkuInfoList[Sku]\r
+ SkuIdName = SkuInfo.SkuIdName\r
if TypeName in ('DYNHII', 'DEXHII'):\r
if SkuInfo.DefaultStoreDict:\r
DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
if FirstPrint:\r
FirstPrint = False\r
if IsByteArray:\r
- FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', '{'))\r
+ if self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '{'))\r
+ elif self.DefaultStoreSingle and not self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '{'))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', '{'))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', '{'))\r
for Array in ArrayList:\r
FileWrite(File, '%s' % (Array))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', Value))\r
+ if self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
+ elif self.DefaultStoreSingle and not self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', Value))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', Value))\r
else:\r
if IsByteArray:\r
- FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', '{'))\r
+ if self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '{'))\r
+ elif self.DefaultStoreSingle and not self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '{'))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', '{'))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', '{'))\r
for Array in ArrayList:\r
FileWrite(File, '%s' % (Array))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', Value))\r
+ if self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', Value))\r
+ elif self.DefaultStoreSingle and not self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ elif not self.DefaultStoreSingle and self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + DefaultStore + ')', Value))\r
+ else:\r
+ 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.OverrideValues[Sku]\r
- Struct = OverrideValues[DefaultStore]\r
- self.PrintStructureInfo(File, Struct)\r
+ OverrideValues = Pcd.SkuOverrideValues[Sku]\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
- elif TypeName in ('DYNVPD', 'DEXVPD'):\r
- Value = SkuInfo.DefaultValue\r
- IsByteArray, ArrayList = ByteArrayForamt(Value)\r
- if FirstPrint:\r
- FirstPrint = False\r
- if IsByteArray:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', "{"))\r
- for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
- else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))\r
- else:\r
- if IsByteArray:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', "{"))\r
- for Array in ArrayList:\r
- FileWrite(File, '%s' % (Array))\r
- else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))\r
- FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
- if IsStructure:\r
- OverrideValues = Pcd.OverrideValues[Sku]\r
- if OverrideValues:\r
- Keys = OverrideValues.keys()\r
- Struct = OverrideValues[Keys[0]]\r
- self.PrintStructureInfo(File, Struct)\r
- self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)\r
else:\r
Value = SkuInfo.DefaultValue\r
IsByteArray, ArrayList = ByteArrayForamt(Value)\r
if FirstPrint:\r
FirstPrint = False\r
if IsByteArray:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '{'))\r
+ if self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', "{"))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))\r
for Array in ArrayList:\r
FileWrite(File, '%s' % (Array))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))\r
+ if self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
else:\r
if IsByteArray:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '{'))\r
+ if self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', "{"))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))\r
for Array in ArrayList:\r
FileWrite(File, '%s' % (Array))\r
else:\r
- FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))\r
+ if self.SkuSingle:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', Value))\r
+ else:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', Value))\r
+ if TypeName in ('DYNVPD', 'DEXVPD'):\r
+ FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
if IsStructure:\r
- OverrideValues = Pcd.OverrideValues[Sku]\r
+ OverrideValues = Pcd.SkuOverrideValues[Sku]\r
if OverrideValues:\r
Keys = OverrideValues.keys()\r
- Struct = OverrideValues[Keys[0]]\r
- self.PrintStructureInfo(File, Struct)\r
+ OverrideFieldStruct = self.OverrideFieldValue(Pcd, OverrideValues[Keys[0]])\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
+ OverrideFieldStruct = collections.OrderedDict()\r
+ if OverrideStruct:\r
+ for Key, Values in OverrideStruct.items():\r
+ if Values[1] and Values[1].endswith('.dsc'):\r
+ OverrideFieldStruct[Key] = Values\r
+ if Pcd.PcdFieldValueFromComm:\r
+ for Key, Values in Pcd.PcdFieldValueFromComm.items():\r
+ OverrideFieldStruct[Key] = Values\r
+ return OverrideFieldStruct\r
+\r
def PrintStructureInfo(self, File, Struct):\r
- NewInfo = collections.OrderedDict()\r
for Key, Value in Struct.items():\r
- if Key not in NewInfo:\r
- NewInfo[Key] = Value[0]\r
+ if Value[1] and 'build command options' in Value[1]:\r
+ FileWrite(File, ' *B %-*s = %s' % (self.MaxLen + 4, '.' + Key, Value[0]))\r
else:\r
- del NewInfo[Key]\r
- NewInfo[Key] = Value[0]\r
- if NewInfo:\r
- for item in NewInfo:\r
- FileWrite(File, ' %-*s = %s' % (self.MaxLen + 4, '.' + item, NewInfo[item]))\r
+ FileWrite(File, ' %-*s = %s' % (self.MaxLen + 4, '.' + Key, Value[0]))\r
\r
def StrtoHex(self, value):\r
try:\r
self.FvInfo = {}\r
self._GuidsDb = {}\r
self._FvDir = Wa.FvDir\r
+ self._WorkspaceDir = Wa.WorkspaceDir\r
\r
#\r
# If the input FdRegion is not a firmware volume,\r
FvTotalSize = 0\r
FvTakenSize = 0\r
FvFreeSize = 0\r
- FvReportFileName = os.path.join(self._FvDir, FvName + ".Fv.txt")\r
+ if FvName.upper().endswith('.FV'):\r
+ FileExt = FvName + ".txt"\r
+ else:\r
+ FileExt = FvName + ".Fv.txt"\r
+\r
+ if not os.path.isfile(FileExt):\r
+ FvReportFileName = mws.join(self._WorkspaceDir, FileExt)\r
+ if not os.path.isfile(FvReportFileName):\r
+ FvReportFileName = os.path.join(self._FvDir, FileExt)\r
try:\r
#\r
# Collect size info in the firmware volume.\r
self.PcdReport = PcdReport(Wa)\r
\r
self.FdReportList = []\r
- if "FLASH" in ReportType and Wa.FdfProfile and MaList == None:\r
+ if "FLASH" in ReportType and Wa.FdfProfile and MaList is None:\r
for Fd in Wa.FdfProfile.FdDict:\r
self.FdReportList.append(FdReport(Wa.FdfProfile.FdDict[Fd], Wa))\r
\r
self.DepexParser = DepexParser(Wa)\r
\r
self.ModuleReportList = []\r
- if MaList != None:\r
+ if MaList is not None:\r
self._IsModuleBuild = True\r
for Ma in MaList:\r
self.ModuleReportList.append(ModuleReport(Ma, ReportType))\r
ModuleAutoGenList = []\r
for ModuleKey in Pa.Platform.Modules:\r
ModuleAutoGenList.append(Pa.Platform.Modules[ModuleKey].M)\r
- if GlobalData.gFdfParser != None:\r
+ if GlobalData.gFdfParser is not None:\r
if Pa.Arch in GlobalData.gFdfParser.Profile.InfDict:\r
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
- if Ma == None:\r
+ if Ma is None:\r
continue\r
if Ma not in ModuleAutoGenList:\r
ModuleAutoGenList.append(Ma)\r