else:\r
self.OutputPath = os.path.dirname(self.DscFile)\r
self.DefaultStores = None\r
- self.SkuIdMgr = SkuClass(self.SkuIdentifier, self.SkuIds)\r
+ self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)\r
arraystr = self.SkuIdMgr.DumpSkuIdArrary()\r
\r
## XXX[key] = value\r
self._SupArchList = None\r
self._BuildTargets = None\r
self._SkuName = None\r
- self._SkuIdentifier = None\r
- self._AvilableSkuIds = None\r
self._PcdInfoFlag = None\r
self._VarCheckFlag = None\r
self._FlashDefinition = None\r
elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER:\r
if self._SkuName == None:\r
self._SkuName = Record[2]\r
- self._SkuIdentifier = Record[2]\r
- self._AvilableSkuIds = Record[2]\r
+ if GlobalData.gSKUID_CMD:\r
+ self._SkuName = GlobalData.gSKUID_CMD\r
elif Name == TAB_DSC_DEFINES_PCD_INFO_GENERATION:\r
self._PcdInfoFlag = Record[2]\r
elif Name == TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION:\r
return True\r
else:\r
return False\r
- def _GetAviableSkuIds(self):\r
- if self._AvilableSkuIds:\r
- return self._AvilableSkuIds\r
- return self.SkuIdentifier\r
- def _GetSkuIdentifier(self):\r
- if self._SkuName:\r
- return self._SkuName\r
- if self._SkuIdentifier == None:\r
- if self._Header == None:\r
- self._GetHeaderInfo()\r
- return self._SkuIdentifier\r
- ## Retrieve SKUID_IDENTIFIER\r
+\r
+ # # Retrieve SKUID_IDENTIFIER\r
def _GetSkuName(self):\r
if self._SkuName == None:\r
if self._Header == None:\r
self._GetHeaderInfo()\r
- if (self._SkuName == None or self._SkuName not in self.SkuIds):\r
+ if self._SkuName == None:\r
self._SkuName = 'DEFAULT'\r
return self._SkuName\r
\r
self.DefaultStores[Record[1].upper()] = (self.ToInt(Record[0]),Record[1].upper())\r
if TAB_DEFAULT_STORES_DEFAULT not in self.DefaultStores:\r
self.DefaultStores[TAB_DEFAULT_STORES_DEFAULT] = (0,TAB_DEFAULT_STORES_DEFAULT)\r
+ GlobalData.gDefaultStores = self.DefaultStores.keys()\r
+ if GlobalData.gDefaultStores:\r
+ GlobalData.gDefaultStores.sort()\r
return self.DefaultStores\r
\r
## Retrieve [Components] section information\r
for pcdname in Pcds:\r
pcd = Pcds[pcdname]\r
Pcds[pcdname].SkuInfoList = {"DEFAULT":pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}\r
+ if type(pcd) is StructurePcd and pcd.OverrideValues:\r
+ Pcds[pcdname].OverrideValues = {"DEFAULT":pcd.OverrideValues[skuid] for skuid in pcd.OverrideValues if skuid in available_sku}\r
else:\r
for pcdname in Pcds:\r
pcd = Pcds[pcdname]\r
Pcds[pcdname].SkuInfoList = {skuid:pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}\r
+ if type(pcd) is StructurePcd and pcd.OverrideValues:\r
+ Pcds[pcdname].OverrideValues = {skuid:pcd.OverrideValues[skuid] for skuid in pcd.OverrideValues if skuid in available_sku}\r
return Pcds\r
def CompleteHiiPcdsDefaultStores(self,Pcds):\r
HiiPcd = [Pcds[pcd] for pcd in Pcds if Pcds[pcd].Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]]\r
\r
for pcd in Pcds.values():\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
+ # Only fix the value while no value provided in DSC file.\r
+ for sku in pcd.SkuInfoList.values():\r
+ if (sku.DefaultValue == "" or sku.DefaultValue==None):\r
+ sku.DefaultValue = pcdDecObject.DefaultValue\r
if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():\r
valuefromDec = pcdDecObject.DefaultValue\r
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec)\r
for pcd in Pcds.values():\r
SkuInfoObj = pcd.SkuInfoList.values()[0]\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
+ # Only fix the value while no value provided in DSC file.\r
+ for sku in pcd.SkuInfoList.values():\r
+ if (sku.DefaultValue == "" or sku.DefaultValue==None):\r
+ sku.DefaultValue = pcdDecObject.DefaultValue\r
if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():\r
valuefromDec = pcdDecObject.DefaultValue\r
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', SkuInfoObj.VpdOffset, valuefromDec)\r
SupArchList = property(_GetSupArch)\r
BuildTargets = property(_GetBuildTarget)\r
SkuName = property(_GetSkuName, _SetSkuName)\r
- SkuIdentifier = property(_GetSkuIdentifier)\r
- AvilableSkuIds = property(_GetAviableSkuIds)\r
PcdInfoFlag = property(_GetPcdInfoFlag)\r
VarCheckFlag = property(_GetVarCheckFlag)\r
FlashDefinition = property(_GetFdfFile)\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.DataType import TAB_LINE_BREAK\r
-from Common.DataType import TAB_DEPEX\r
-from Common.DataType import TAB_SLASH\r
-from Common.DataType import TAB_SPACE_SPLIT\r
-from Common.DataType import TAB_BRG_PCD\r
-from Common.DataType import TAB_BRG_LIBRARY\r
-from Common.DataType import TAB_BACK_SLASH\r
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 Common.Misc import PathClass\r
from Common.String import NormPath\r
+from Common.DataType import *\r
+import collections\r
\r
## Pattern to extract contents in EDK DXS files\r
gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", re.DOTALL)\r
String = textwrap.fill(String, 120)\r
File.write(String + gEndOfLine)\r
\r
+def ByteArrayForamt(Value):\r
+ IsByteArray = False\r
+ SplitNum = 16\r
+ ArrayList = []\r
+ if Value.startswith('{') and Value.endswith('}'):\r
+ Value = Value[1:-1]\r
+ ValueList = Value.split(',')\r
+ if len(ValueList) >= SplitNum:\r
+ IsByteArray = True\r
+ if IsByteArray:\r
+ if ValueList:\r
+ Len = len(ValueList)/SplitNum\r
+ for i, element in enumerate(ValueList):\r
+ ValueList[i] = '0x%02X' % int(element.strip(), 16)\r
+ if Len:\r
+ Id = 0\r
+ while (Id <= Len):\r
+ End = min(SplitNum*(Id+1), len(ValueList))\r
+ Str = ','.join(ValueList[SplitNum*Id : End])\r
+ if End == len(ValueList):\r
+ Str += '}'\r
+ ArrayList.append(Str)\r
+ break\r
+ else:\r
+ Str += ','\r
+ ArrayList.append(Str)\r
+ Id += 1\r
+ else:\r
+ ArrayList = [Value + '}']\r
+ return IsByteArray, ArrayList\r
+\r
##\r
# Find all the header file that the module source directly includes.\r
#\r
self.UnusedPcds = {}\r
self.ConditionalPcds = {}\r
self.MaxLen = 0\r
+ self.Arch = None\r
if Wa.FdfProfile:\r
self.FdfPcdSet = Wa.FdfProfile.PcdDict\r
else:\r
\r
self.ModulePcdOverride = {}\r
for Pa in Wa.AutoGenObjectList:\r
+ self.Arch = Pa.Arch\r
#\r
# Collect all platform referenced PCDs and grouped them by PCD token space\r
# GUID C Names\r
# Collect PCDs defined in DSC common section\r
#\r
self.DscPcdDefault = {}\r
- for Arch in Wa.ArchList:\r
- Platform = Wa.BuildDatabase[Wa.MetaFile, Arch, Wa.BuildTarget, Wa.ToolChain]\r
- for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds:\r
- DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DscDefaultValue\r
+ for Pa in Wa.AutoGenObjectList:\r
+ for (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds:\r
+ DscDefaultValue = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue\r
if DscDefaultValue:\r
self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue\r
\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
+ IsStructure = True\r
+ if TypeName in ('DYNVPD', 'DEXVPD'):\r
+ SkuInfoList = Pcd.SkuInfoList\r
+ Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]\r
+ Pcd.DatumType = Pcd.StructName\r
+ if TypeName in ('DYNVPD', 'DEXVPD'):\r
+ Pcd.SkuInfoList = SkuInfoList\r
+ if Pcd.OverrideValues:\r
+ DscMatch = True\r
+ DecMatch = False\r
#\r
# Report PCD item according to their override relationship\r
#\r
if DecMatch and InfMatch:\r
- FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')\r
elif BuildOptionMatch:\r
- FileWrite(File, ' *B %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')\r
else:\r
if DscMatch:\r
if (Pcd.TokenCName, Key) in self.FdfPcdSet:\r
- FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')\r
else:\r
- FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')\r
else:\r
- FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))\r
-\r
- if TypeName in ('DYNHII', 'DEXHII', 'DYNVPD', 'DEXVPD'):\r
- for SkuInfo in Pcd.SkuInfoList.values():\r
- if TypeName in ('DYNHII', 'DEXHII'):\r
- FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))\r
- else:\r
- FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))\r
- \r
- if not DscMatch and DscDefaultValBak != None:\r
- FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValBak.strip()))\r
-\r
- if not InfMatch and InfDefaultValue != None:\r
- FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue.strip()))\r
-\r
- if not DecMatch and DecDefaultValue != None:\r
- FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue.strip()))\r
+ self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')\r
\r
if ModulePcdSet == None:\r
+ if IsStructure:\r
+ continue\r
+ if not TypeName in ('PATCH', 'FLAG', 'FIXED'):\r
+ continue\r
if not BuildOptionMatch:\r
ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})\r
for ModulePath in ModuleOverride:\r
Match = (ModuleDefault.strip() == PcdValue.strip())\r
if Match:\r
continue\r
- FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))\r
+ IsByteArray, ArrayList = ByteArrayForamt(ModuleDefault.strip())\r
+ if IsByteArray:\r
+ FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, '{'))\r
+ for Array in ArrayList:\r
+ FileWrite(File, '%s' % (Array))\r
+ else:\r
+ FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))\r
\r
if ModulePcdSet == None:\r
FileWrite(File, gSectionEnd)\r
FileWrite(File, gSubSectionEnd)\r
\r
\r
+ def PrintPcdDefault(self, File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue):\r
+ if not DscMatch and DscDefaultValue != None:\r
+ Value = DscDefaultValue.strip()\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', "{"))\r
+ for Array in ArrayList:\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
+ Value = InfDefaultValue.strip()\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', "{"))\r
+ for Array in ArrayList:\r
+ FileWrite(File, '%s' % (Array))\r
+ else:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', Value))\r
+\r
+ if not DecMatch and DecDefaultValue != None:\r
+ Value = DecDefaultValue.strip()\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', "{"))\r
+ for Array in ArrayList:\r
+ FileWrite(File, '%s' % (Array))\r
+ else:\r
+ FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))\r
+ if 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
+ Value = Pcd.DefaultValue\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '{'))\r
+ for Array in ArrayList:\r
+ FileWrite(File, '%s' % (Array))\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
+ if OverrideValues:\r
+ Keys = OverrideValues.keys()\r
+ Data = OverrideValues[Keys[0]]\r
+ Struct = Data.values()[0]\r
+ self.PrintStructureInfo(File, Struct)\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
+ if TypeName in ('DYNHII', 'DEXHII'):\r
+ if SkuInfo.DefaultStoreDict:\r
+ DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())\r
+ for DefaultStore in DefaultStoreList:\r
+ Value = SkuInfo.DefaultStoreDict[DefaultStore]\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\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
+ 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
+ else:\r
+ if IsByteArray:\r
+ FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.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
+ 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
+ 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
+ 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
+ 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
+\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
+ 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
+\r
+ def StrtoHex(self, value):\r
+ try:\r
+ value = hex(int(value))\r
+ return value\r
+ except:\r
+ if value.startswith("L\"") and value.endswith("\""):\r
+ valuelist = []\r
+ for ch in value[2:-1]:\r
+ valuelist.append(hex(ord(ch)))\r
+ valuelist.append('0x00')\r
+ return valuelist\r
+ elif value.startswith("\"") and value.endswith("\""):\r
+ return hex(ord(value[1:-1]))\r
+ elif value.startswith("{") and value.endswith("}"):\r
+ valuelist = []\r
+ if ',' not in value:\r
+ return value[1:-1]\r
+ for ch in value[1:-1].split(','):\r
+ ch = ch.strip()\r
+ if ch.startswith('0x') or ch.startswith('0X'):\r
+ valuelist.append(ch)\r
+ continue\r
+ try:\r
+ valuelist.append(hex(int(ch.strip())))\r
+ except:\r
+ pass\r
+ return valuelist\r
+ else:\r
+ return value\r
\r
##\r
# Reports platform and module Prediction information\r
#\r
# Collect PCDs defined in DSC file\r
#\r
- for arch in Wa.ArchList:\r
- Platform = Wa.BuildDatabase[Wa.MetaFile, arch]\r
- for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds:\r
- DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue\r
+ for Pa in Wa.AutoGenObjectList:\r
+ for (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds:\r
+ DscDefaultValue = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue\r
PlatformPcds[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue\r
\r
#\r
FileWrite(File, "Size: 0x%X (%.0fK)" % (self.VPDSize, self.VPDSize / 1024.0))\r
FileWrite(File, gSubSectionSep)\r
for item in self.VPDInfoList:\r
- FileWrite(File, item)\r
+ ValueList = item.split('|')\r
+ Value = ValueList[-1].strip()\r
+ IsByteArray, ArrayList = ByteArrayForamt(Value)\r
+ if IsByteArray:\r
+ ValueList[-1] = ' {'\r
+ FileWrite(File, '|'.join(ValueList))\r
+ for Array in ArrayList:\r
+ FileWrite(File, '%s' % (Array))\r
+ else:\r
+ FileWrite(File, item)\r
FileWrite(File, gSubSectionEnd)\r
FileWrite(File, gSectionEnd)\r
\r
FileWrite(File, "Architectures: %s" % self.Architectures)\r
FileWrite(File, "Tool Chain: %s" % self.ToolChain)\r
FileWrite(File, "Target: %s" % self.Target)\r
+ if GlobalData.gSkuids:\r
+ FileWrite(File, "SKUID: %s" % " ".join(GlobalData.gSkuids))\r
+ if GlobalData.gDefaultStores:\r
+ FileWrite(File, "DefaultStore: %s" % " ".join(GlobalData.gDefaultStores))\r
FileWrite(File, "Output Path: %s" % self.OutputPath)\r
FileWrite(File, "Build Environment: %s" % self.BuildEnvironment)\r
FileWrite(File, "Build Duration: %s" % BuildDuration)\r