BaseTools: Report Structure PCD value and SKU, DefaultStore info
https://bugzilla.tianocore.org/show_bug.cgi?id=706 Add Structure PCD support for Build report. Structure PCD field value described in DEC/DSC will be display in build report. And, PCD value for each SKU and Default store will also be shown in build report. Contributed-under: TianoCore Contribution Agreement 1.1 Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@ -1078,7 +1078,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SkuObj = SkuClass(Platform.Platform.AvilableSkuIds, Platform.Platform.SkuIds)
|
SkuObj = SkuClass(Platform.Platform.SkuName, Platform.Platform.SkuIds)
|
||||||
Dict['SYSTEM_SKU_ID_VALUE'] = Platform.Platform.SkuIds[SkuObj.SystemSkuId][0]
|
Dict['SYSTEM_SKU_ID_VALUE'] = Platform.Platform.SkuIds[SkuObj.SystemSkuId][0]
|
||||||
|
|
||||||
Dict['PCD_INFO_FLAG'] = Platform.Platform.PcdInfoFlag
|
Dict['PCD_INFO_FLAG'] = Platform.Platform.PcdInfoFlag
|
||||||
|
@ -24,6 +24,7 @@ gOptions = None
|
|||||||
gCaseInsensitive = False
|
gCaseInsensitive = False
|
||||||
gAllFiles = None
|
gAllFiles = None
|
||||||
gCommand = None
|
gCommand = None
|
||||||
|
gSKUID_CMD = None
|
||||||
|
|
||||||
gGlobalDefines = {}
|
gGlobalDefines = {}
|
||||||
gPlatformDefines = {}
|
gPlatformDefines = {}
|
||||||
@ -39,6 +40,8 @@ gCommandMaxLength = 4096
|
|||||||
# for debug trace purpose when problem occurs
|
# for debug trace purpose when problem occurs
|
||||||
gProcessingFile = ''
|
gProcessingFile = ''
|
||||||
gBuildingModule = ''
|
gBuildingModule = ''
|
||||||
|
gSkuids = []
|
||||||
|
gDefaultStores = []
|
||||||
|
|
||||||
## Regular expression for matching macro used in DSC/DEC/INF file inclusion
|
## Regular expression for matching macro used in DSC/DEC/INF file inclusion
|
||||||
gMacroRefPattern = re.compile("\$\(([A-Z][_A-Z0-9]*)\)", re.UNICODE)
|
gMacroRefPattern = re.compile("\$\(([A-Z][_A-Z0-9]*)\)", re.UNICODE)
|
||||||
|
@ -2149,9 +2149,6 @@ class SkuClass():
|
|||||||
EdkLogger.error("build", PARAMETER_INVALID,
|
EdkLogger.error("build", PARAMETER_INVALID,
|
||||||
ExtraData = "SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]"
|
ExtraData = "SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]"
|
||||||
% (k, " | ".join(SkuIds.keys())))
|
% (k, " | ".join(SkuIds.keys())))
|
||||||
if len(self.SkuIdSet) == 2 and 'DEFAULT' in self.SkuIdSet and SkuIdentifier != 'ALL':
|
|
||||||
self.SkuIdSet.remove('DEFAULT')
|
|
||||||
self.SkuIdNumberSet.remove('0U')
|
|
||||||
for each in self.SkuIdSet:
|
for each in self.SkuIdSet:
|
||||||
if each in SkuIds:
|
if each in SkuIds:
|
||||||
self.AvailableSkuIds[each] = SkuIds[each][0]
|
self.AvailableSkuIds[each] = SkuIds[each][0]
|
||||||
@ -2161,6 +2158,13 @@ class SkuClass():
|
|||||||
% (each, " | ".join(SkuIds.keys())))
|
% (each, " | ".join(SkuIds.keys())))
|
||||||
if self.SkuUsageType != self.SINGLE:
|
if self.SkuUsageType != self.SINGLE:
|
||||||
self.AvailableSkuIds.update({'DEFAULT':0, 'COMMON':0})
|
self.AvailableSkuIds.update({'DEFAULT':0, 'COMMON':0})
|
||||||
|
if self.SkuIdSet:
|
||||||
|
GlobalData.gSkuids = (self.SkuIdSet)
|
||||||
|
if 'COMMON' in GlobalData.gSkuids:
|
||||||
|
GlobalData.gSkuids.remove('COMMON')
|
||||||
|
if GlobalData.gSkuids:
|
||||||
|
GlobalData.gSkuids.sort()
|
||||||
|
|
||||||
def GetNextSkuId(self, skuname):
|
def GetNextSkuId(self, skuname):
|
||||||
if not self.__SkuInherit:
|
if not self.__SkuInherit:
|
||||||
self.__SkuInherit = {}
|
self.__SkuInherit = {}
|
||||||
|
@ -118,7 +118,7 @@ class StructurePcd(PcdClassObject):
|
|||||||
self.PcdMode = None
|
self.PcdMode = None
|
||||||
self.SkuOverrideValues = collections.OrderedDict({})
|
self.SkuOverrideValues = collections.OrderedDict({})
|
||||||
self.FlexibleFieldName = None
|
self.FlexibleFieldName = None
|
||||||
|
self.StructName = None
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self.TypeName
|
return self.TypeName
|
||||||
|
|
||||||
@ -170,6 +170,7 @@ class StructurePcd(PcdClassObject):
|
|||||||
self.DefaultFromDSC=None
|
self.DefaultFromDSC=None
|
||||||
self.OverrideValues = PcdObject.SkuOverrideValues if PcdObject.SkuOverrideValues else self.SkuOverrideValues
|
self.OverrideValues = PcdObject.SkuOverrideValues if PcdObject.SkuOverrideValues else self.SkuOverrideValues
|
||||||
self.FlexibleFieldName = PcdObject.FlexibleFieldName if PcdObject.FlexibleFieldName else self.FlexibleFieldName
|
self.FlexibleFieldName = PcdObject.FlexibleFieldName if PcdObject.FlexibleFieldName else self.FlexibleFieldName
|
||||||
|
self.StructName = PcdObject.DatumType if PcdObject.DatumType else self.StructName
|
||||||
|
|
||||||
## LibraryClassObject
|
## LibraryClassObject
|
||||||
#
|
#
|
||||||
|
@ -401,14 +401,15 @@ class DecBuildData(PackageBuildClassObject):
|
|||||||
#
|
#
|
||||||
PcdDict = tdict(True, 3)
|
PcdDict = tdict(True, 3)
|
||||||
# for summarizing PCD
|
# for summarizing PCD
|
||||||
PcdSet = set()
|
PcdSet = []
|
||||||
# find out all PCDs of the 'type'
|
# find out all PCDs of the 'type'
|
||||||
|
|
||||||
StrPcdSet = []
|
StrPcdSet = []
|
||||||
RecordList = self._RawData[Type, self._Arch]
|
RecordList = self._RawData[Type, self._Arch]
|
||||||
for TokenSpaceGuid, PcdCName, Setting, Arch, PrivateFlag, Dummy1, Dummy2 in RecordList:
|
for TokenSpaceGuid, PcdCName, Setting, Arch, PrivateFlag, Dummy1, Dummy2 in RecordList:
|
||||||
PcdDict[Arch, PcdCName, TokenSpaceGuid] = (Setting,Dummy2)
|
PcdDict[Arch, PcdCName, TokenSpaceGuid] = (Setting,Dummy2)
|
||||||
PcdSet.add((PcdCName, TokenSpaceGuid))
|
if not (PcdCName, TokenSpaceGuid) in PcdSet:
|
||||||
|
PcdSet.append((PcdCName, TokenSpaceGuid))
|
||||||
|
|
||||||
for PcdCName, TokenSpaceGuid in PcdSet:
|
for PcdCName, TokenSpaceGuid in PcdSet:
|
||||||
#
|
#
|
||||||
|
@ -159,7 +159,7 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
else:
|
else:
|
||||||
self.OutputPath = os.path.dirname(self.DscFile)
|
self.OutputPath = os.path.dirname(self.DscFile)
|
||||||
self.DefaultStores = None
|
self.DefaultStores = None
|
||||||
self.SkuIdMgr = SkuClass(self.SkuIdentifier, self.SkuIds)
|
self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)
|
||||||
arraystr = self.SkuIdMgr.DumpSkuIdArrary()
|
arraystr = self.SkuIdMgr.DumpSkuIdArrary()
|
||||||
|
|
||||||
## XXX[key] = value
|
## XXX[key] = value
|
||||||
@ -185,8 +185,6 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
self._SupArchList = None
|
self._SupArchList = None
|
||||||
self._BuildTargets = None
|
self._BuildTargets = None
|
||||||
self._SkuName = None
|
self._SkuName = None
|
||||||
self._SkuIdentifier = None
|
|
||||||
self._AvilableSkuIds = None
|
|
||||||
self._PcdInfoFlag = None
|
self._PcdInfoFlag = None
|
||||||
self._VarCheckFlag = None
|
self._VarCheckFlag = None
|
||||||
self._FlashDefinition = None
|
self._FlashDefinition = None
|
||||||
@ -306,8 +304,8 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER:
|
elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER:
|
||||||
if self._SkuName == None:
|
if self._SkuName == None:
|
||||||
self._SkuName = Record[2]
|
self._SkuName = Record[2]
|
||||||
self._SkuIdentifier = Record[2]
|
if GlobalData.gSKUID_CMD:
|
||||||
self._AvilableSkuIds = Record[2]
|
self._SkuName = GlobalData.gSKUID_CMD
|
||||||
elif Name == TAB_DSC_DEFINES_PCD_INFO_GENERATION:
|
elif Name == TAB_DSC_DEFINES_PCD_INFO_GENERATION:
|
||||||
self._PcdInfoFlag = Record[2]
|
self._PcdInfoFlag = Record[2]
|
||||||
elif Name == TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION:
|
elif Name == TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION:
|
||||||
@ -438,23 +436,13 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
def _GetAviableSkuIds(self):
|
|
||||||
if self._AvilableSkuIds:
|
# # Retrieve SKUID_IDENTIFIER
|
||||||
return self._AvilableSkuIds
|
|
||||||
return self.SkuIdentifier
|
|
||||||
def _GetSkuIdentifier(self):
|
|
||||||
if self._SkuName:
|
|
||||||
return self._SkuName
|
|
||||||
if self._SkuIdentifier == None:
|
|
||||||
if self._Header == None:
|
|
||||||
self._GetHeaderInfo()
|
|
||||||
return self._SkuIdentifier
|
|
||||||
## Retrieve SKUID_IDENTIFIER
|
|
||||||
def _GetSkuName(self):
|
def _GetSkuName(self):
|
||||||
if self._SkuName == None:
|
if self._SkuName == None:
|
||||||
if self._Header == None:
|
if self._Header == None:
|
||||||
self._GetHeaderInfo()
|
self._GetHeaderInfo()
|
||||||
if (self._SkuName == None or self._SkuName not in self.SkuIds):
|
if self._SkuName == None:
|
||||||
self._SkuName = 'DEFAULT'
|
self._SkuName = 'DEFAULT'
|
||||||
return self._SkuName
|
return self._SkuName
|
||||||
|
|
||||||
@ -620,6 +608,9 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
self.DefaultStores[Record[1].upper()] = (self.ToInt(Record[0]),Record[1].upper())
|
self.DefaultStores[Record[1].upper()] = (self.ToInt(Record[0]),Record[1].upper())
|
||||||
if TAB_DEFAULT_STORES_DEFAULT not in self.DefaultStores:
|
if TAB_DEFAULT_STORES_DEFAULT not in self.DefaultStores:
|
||||||
self.DefaultStores[TAB_DEFAULT_STORES_DEFAULT] = (0,TAB_DEFAULT_STORES_DEFAULT)
|
self.DefaultStores[TAB_DEFAULT_STORES_DEFAULT] = (0,TAB_DEFAULT_STORES_DEFAULT)
|
||||||
|
GlobalData.gDefaultStores = self.DefaultStores.keys()
|
||||||
|
if GlobalData.gDefaultStores:
|
||||||
|
GlobalData.gDefaultStores.sort()
|
||||||
return self.DefaultStores
|
return self.DefaultStores
|
||||||
|
|
||||||
## Retrieve [Components] section information
|
## Retrieve [Components] section information
|
||||||
@ -854,10 +845,14 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
for pcdname in Pcds:
|
for pcdname in Pcds:
|
||||||
pcd = Pcds[pcdname]
|
pcd = Pcds[pcdname]
|
||||||
Pcds[pcdname].SkuInfoList = {"DEFAULT":pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}
|
Pcds[pcdname].SkuInfoList = {"DEFAULT":pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}
|
||||||
|
if type(pcd) is StructurePcd and pcd.OverrideValues:
|
||||||
|
Pcds[pcdname].OverrideValues = {"DEFAULT":pcd.OverrideValues[skuid] for skuid in pcd.OverrideValues if skuid in available_sku}
|
||||||
else:
|
else:
|
||||||
for pcdname in Pcds:
|
for pcdname in Pcds:
|
||||||
pcd = Pcds[pcdname]
|
pcd = Pcds[pcdname]
|
||||||
Pcds[pcdname].SkuInfoList = {skuid:pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}
|
Pcds[pcdname].SkuInfoList = {skuid:pcd.SkuInfoList[skuid] for skuid in pcd.SkuInfoList if skuid in available_sku}
|
||||||
|
if type(pcd) is StructurePcd and pcd.OverrideValues:
|
||||||
|
Pcds[pcdname].OverrideValues = {skuid:pcd.OverrideValues[skuid] for skuid in pcd.OverrideValues if skuid in available_sku}
|
||||||
return Pcds
|
return Pcds
|
||||||
def CompleteHiiPcdsDefaultStores(self,Pcds):
|
def CompleteHiiPcdsDefaultStores(self,Pcds):
|
||||||
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]]]
|
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]]]
|
||||||
@ -1574,6 +1569,10 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
|
|
||||||
for pcd in Pcds.values():
|
for pcd in Pcds.values():
|
||||||
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]
|
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]
|
||||||
|
# Only fix the value while no value provided in DSC file.
|
||||||
|
for sku in pcd.SkuInfoList.values():
|
||||||
|
if (sku.DefaultValue == "" or sku.DefaultValue==None):
|
||||||
|
sku.DefaultValue = pcdDecObject.DefaultValue
|
||||||
if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():
|
if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():
|
||||||
valuefromDec = pcdDecObject.DefaultValue
|
valuefromDec = pcdDecObject.DefaultValue
|
||||||
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec)
|
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec)
|
||||||
@ -1872,6 +1871,10 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
for pcd in Pcds.values():
|
for pcd in Pcds.values():
|
||||||
SkuInfoObj = pcd.SkuInfoList.values()[0]
|
SkuInfoObj = pcd.SkuInfoList.values()[0]
|
||||||
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]
|
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]
|
||||||
|
# Only fix the value while no value provided in DSC file.
|
||||||
|
for sku in pcd.SkuInfoList.values():
|
||||||
|
if (sku.DefaultValue == "" or sku.DefaultValue==None):
|
||||||
|
sku.DefaultValue = pcdDecObject.DefaultValue
|
||||||
if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():
|
if 'DEFAULT' not in pcd.SkuInfoList.keys() and 'COMMON' not in pcd.SkuInfoList.keys():
|
||||||
valuefromDec = pcdDecObject.DefaultValue
|
valuefromDec = pcdDecObject.DefaultValue
|
||||||
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', SkuInfoObj.VpdOffset, valuefromDec)
|
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', SkuInfoObj.VpdOffset, valuefromDec)
|
||||||
@ -1927,8 +1930,6 @@ class DscBuildData(PlatformBuildClassObject):
|
|||||||
SupArchList = property(_GetSupArch)
|
SupArchList = property(_GetSupArch)
|
||||||
BuildTargets = property(_GetBuildTarget)
|
BuildTargets = property(_GetBuildTarget)
|
||||||
SkuName = property(_GetSkuName, _SetSkuName)
|
SkuName = property(_GetSkuName, _SetSkuName)
|
||||||
SkuIdentifier = property(_GetSkuIdentifier)
|
|
||||||
AvilableSkuIds = property(_GetAviableSkuIds)
|
|
||||||
PcdInfoFlag = property(_GetPcdInfoFlag)
|
PcdInfoFlag = property(_GetPcdInfoFlag)
|
||||||
VarCheckFlag = property(_GetVarCheckFlag)
|
VarCheckFlag = property(_GetVarCheckFlag)
|
||||||
FlashDefinition = property(_GetFdfFile)
|
FlashDefinition = property(_GetFdfFile)
|
||||||
|
@ -1144,9 +1144,9 @@ class DscParser(MetaFileParser):
|
|||||||
File=self.MetaFile, Line=self._LineIndex + 1)
|
File=self.MetaFile, Line=self._LineIndex + 1)
|
||||||
if self._ValueList[2] == '':
|
if self._ValueList[2] == '':
|
||||||
#
|
#
|
||||||
# The PCD values are optional for FIXEDATBUILD and PATCHABLEINMODULE
|
# The PCD values are optional for FIXEDATBUILD, PATCHABLEINMODULE, Dynamic/DynamicEx default
|
||||||
#
|
#
|
||||||
if self._SectionType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):
|
if self._SectionType in (MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT):
|
||||||
return
|
return
|
||||||
EdkLogger.error('Parser', FORMAT_INVALID, "No PCD value given",
|
EdkLogger.error('Parser', FORMAT_INVALID, "No PCD value given",
|
||||||
ExtraData=self._CurrentLine + " (<TokenSpaceGuidCName>.<TokenCName>|<PcdValue>)",
|
ExtraData=self._CurrentLine + " (<TokenSpaceGuidCName>.<TokenCName>|<PcdValue>)",
|
||||||
|
@ -37,19 +37,14 @@ from Common.InfClassObject import gComponentType2ModuleType
|
|||||||
from Common.BuildToolError import FILE_WRITE_FAILURE
|
from Common.BuildToolError import FILE_WRITE_FAILURE
|
||||||
from Common.BuildToolError import CODE_ERROR
|
from Common.BuildToolError import CODE_ERROR
|
||||||
from Common.BuildToolError import COMMAND_FAILURE
|
from Common.BuildToolError import COMMAND_FAILURE
|
||||||
from Common.DataType import TAB_LINE_BREAK
|
|
||||||
from Common.DataType import TAB_DEPEX
|
|
||||||
from Common.DataType import TAB_SLASH
|
|
||||||
from Common.DataType import TAB_SPACE_SPLIT
|
|
||||||
from Common.DataType import TAB_BRG_PCD
|
|
||||||
from Common.DataType import TAB_BRG_LIBRARY
|
|
||||||
from Common.DataType import TAB_BACK_SLASH
|
|
||||||
from Common.LongFilePathSupport import OpenLongFilePath as open
|
from Common.LongFilePathSupport import OpenLongFilePath as open
|
||||||
from Common.MultipleWorkspace import MultipleWorkspace as mws
|
from Common.MultipleWorkspace import MultipleWorkspace as mws
|
||||||
import Common.GlobalData as GlobalData
|
import Common.GlobalData as GlobalData
|
||||||
from AutoGen.AutoGen import ModuleAutoGen
|
from AutoGen.AutoGen import ModuleAutoGen
|
||||||
from Common.Misc import PathClass
|
from Common.Misc import PathClass
|
||||||
from Common.String import NormPath
|
from Common.String import NormPath
|
||||||
|
from Common.DataType import *
|
||||||
|
import collections
|
||||||
|
|
||||||
## Pattern to extract contents in EDK DXS files
|
## Pattern to extract contents in EDK DXS files
|
||||||
gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", re.DOTALL)
|
gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", re.DOTALL)
|
||||||
@ -145,6 +140,37 @@ def FileWrite(File, String, Wrapper=False):
|
|||||||
String = textwrap.fill(String, 120)
|
String = textwrap.fill(String, 120)
|
||||||
File.write(String + gEndOfLine)
|
File.write(String + gEndOfLine)
|
||||||
|
|
||||||
|
def ByteArrayForamt(Value):
|
||||||
|
IsByteArray = False
|
||||||
|
SplitNum = 16
|
||||||
|
ArrayList = []
|
||||||
|
if Value.startswith('{') and Value.endswith('}'):
|
||||||
|
Value = Value[1:-1]
|
||||||
|
ValueList = Value.split(',')
|
||||||
|
if len(ValueList) >= SplitNum:
|
||||||
|
IsByteArray = True
|
||||||
|
if IsByteArray:
|
||||||
|
if ValueList:
|
||||||
|
Len = len(ValueList)/SplitNum
|
||||||
|
for i, element in enumerate(ValueList):
|
||||||
|
ValueList[i] = '0x%02X' % int(element.strip(), 16)
|
||||||
|
if Len:
|
||||||
|
Id = 0
|
||||||
|
while (Id <= Len):
|
||||||
|
End = min(SplitNum*(Id+1), len(ValueList))
|
||||||
|
Str = ','.join(ValueList[SplitNum*Id : End])
|
||||||
|
if End == len(ValueList):
|
||||||
|
Str += '}'
|
||||||
|
ArrayList.append(Str)
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
Str += ','
|
||||||
|
ArrayList.append(Str)
|
||||||
|
Id += 1
|
||||||
|
else:
|
||||||
|
ArrayList = [Value + '}']
|
||||||
|
return IsByteArray, ArrayList
|
||||||
|
|
||||||
##
|
##
|
||||||
# Find all the header file that the module source directly includes.
|
# Find all the header file that the module source directly includes.
|
||||||
#
|
#
|
||||||
@ -723,6 +749,7 @@ class PcdReport(object):
|
|||||||
self.UnusedPcds = {}
|
self.UnusedPcds = {}
|
||||||
self.ConditionalPcds = {}
|
self.ConditionalPcds = {}
|
||||||
self.MaxLen = 0
|
self.MaxLen = 0
|
||||||
|
self.Arch = None
|
||||||
if Wa.FdfProfile:
|
if Wa.FdfProfile:
|
||||||
self.FdfPcdSet = Wa.FdfProfile.PcdDict
|
self.FdfPcdSet = Wa.FdfProfile.PcdDict
|
||||||
else:
|
else:
|
||||||
@ -730,6 +757,7 @@ class PcdReport(object):
|
|||||||
|
|
||||||
self.ModulePcdOverride = {}
|
self.ModulePcdOverride = {}
|
||||||
for Pa in Wa.AutoGenObjectList:
|
for Pa in Wa.AutoGenObjectList:
|
||||||
|
self.Arch = Pa.Arch
|
||||||
#
|
#
|
||||||
# Collect all platform referenced PCDs and grouped them by PCD token space
|
# Collect all platform referenced PCDs and grouped them by PCD token space
|
||||||
# GUID C Names
|
# GUID C Names
|
||||||
@ -830,10 +858,9 @@ class PcdReport(object):
|
|||||||
# Collect PCDs defined in DSC common section
|
# Collect PCDs defined in DSC common section
|
||||||
#
|
#
|
||||||
self.DscPcdDefault = {}
|
self.DscPcdDefault = {}
|
||||||
for Arch in Wa.ArchList:
|
for Pa in Wa.AutoGenObjectList:
|
||||||
Platform = Wa.BuildDatabase[Wa.MetaFile, Arch, Wa.BuildTarget, Wa.ToolChain]
|
for (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds:
|
||||||
for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds:
|
DscDefaultValue = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue
|
||||||
DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DscDefaultValue
|
|
||||||
if DscDefaultValue:
|
if DscDefaultValue:
|
||||||
self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue
|
self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue
|
||||||
|
|
||||||
@ -978,39 +1005,39 @@ class PcdReport(object):
|
|||||||
else:
|
else:
|
||||||
DscMatch = (DscDefaultValue.strip() == PcdValue.strip())
|
DscMatch = (DscDefaultValue.strip() == PcdValue.strip())
|
||||||
|
|
||||||
|
IsStructure = False
|
||||||
|
if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd.keys()) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):
|
||||||
|
IsStructure = True
|
||||||
|
if TypeName in ('DYNVPD', 'DEXVPD'):
|
||||||
|
SkuInfoList = Pcd.SkuInfoList
|
||||||
|
Pcd = GlobalData.gStructurePcd[self.Arch][(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)]
|
||||||
|
Pcd.DatumType = Pcd.StructName
|
||||||
|
if TypeName in ('DYNVPD', 'DEXVPD'):
|
||||||
|
Pcd.SkuInfoList = SkuInfoList
|
||||||
|
if Pcd.OverrideValues:
|
||||||
|
DscMatch = True
|
||||||
|
DecMatch = False
|
||||||
#
|
#
|
||||||
# Report PCD item according to their override relationship
|
# Report PCD item according to their override relationship
|
||||||
#
|
#
|
||||||
if DecMatch and InfMatch:
|
if DecMatch and InfMatch:
|
||||||
FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, ' ')
|
||||||
elif BuildOptionMatch:
|
elif BuildOptionMatch:
|
||||||
FileWrite(File, ' *B %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*B')
|
||||||
else:
|
else:
|
||||||
if DscMatch:
|
if DscMatch:
|
||||||
if (Pcd.TokenCName, Key) in self.FdfPcdSet:
|
if (Pcd.TokenCName, Key) in self.FdfPcdSet:
|
||||||
FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*F')
|
||||||
else:
|
else:
|
||||||
FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*P')
|
||||||
else:
|
else:
|
||||||
FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', PcdValue.strip()))
|
self.PrintPcdValue(File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, '*M')
|
||||||
|
|
||||||
if TypeName in ('DYNHII', 'DEXHII', 'DYNVPD', 'DEXVPD'):
|
|
||||||
for SkuInfo in Pcd.SkuInfoList.values():
|
|
||||||
if TypeName in ('DYNHII', 'DEXHII'):
|
|
||||||
FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))
|
|
||||||
else:
|
|
||||||
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))
|
|
||||||
|
|
||||||
if not DscMatch and DscDefaultValBak != None:
|
|
||||||
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValBak.strip()))
|
|
||||||
|
|
||||||
if not InfMatch and InfDefaultValue != None:
|
|
||||||
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue.strip()))
|
|
||||||
|
|
||||||
if not DecMatch and DecDefaultValue != None:
|
|
||||||
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue.strip()))
|
|
||||||
|
|
||||||
if ModulePcdSet == None:
|
if ModulePcdSet == None:
|
||||||
|
if IsStructure:
|
||||||
|
continue
|
||||||
|
if not TypeName in ('PATCH', 'FLAG', 'FIXED'):
|
||||||
|
continue
|
||||||
if not BuildOptionMatch:
|
if not BuildOptionMatch:
|
||||||
ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})
|
ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {})
|
||||||
for ModulePath in ModuleOverride:
|
for ModulePath in ModuleOverride:
|
||||||
@ -1022,7 +1049,13 @@ class PcdReport(object):
|
|||||||
Match = (ModuleDefault.strip() == PcdValue.strip())
|
Match = (ModuleDefault.strip() == PcdValue.strip())
|
||||||
if Match:
|
if Match:
|
||||||
continue
|
continue
|
||||||
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))
|
IsByteArray, ArrayList = ByteArrayForamt(ModuleDefault.strip())
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, '{'))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))
|
||||||
|
|
||||||
if ModulePcdSet == None:
|
if ModulePcdSet == None:
|
||||||
FileWrite(File, gSectionEnd)
|
FileWrite(File, gSectionEnd)
|
||||||
@ -1031,6 +1064,181 @@ class PcdReport(object):
|
|||||||
FileWrite(File, gSubSectionEnd)
|
FileWrite(File, gSubSectionEnd)
|
||||||
|
|
||||||
|
|
||||||
|
def PrintPcdDefault(self, File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue):
|
||||||
|
if not DscMatch and DscDefaultValue != None:
|
||||||
|
Value = DscDefaultValue.strip()
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', "{"))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', Value))
|
||||||
|
if not InfMatch and InfDefaultValue != None:
|
||||||
|
Value = InfDefaultValue.strip()
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', "{"))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', Value))
|
||||||
|
|
||||||
|
if not DecMatch and DecDefaultValue != None:
|
||||||
|
Value = DecDefaultValue.strip()
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', "{"))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))
|
||||||
|
if IsStructure:
|
||||||
|
self.PrintStructureInfo(File, Pcd.DefaultValues)
|
||||||
|
|
||||||
|
def PrintPcdValue(self, File, Pcd, PcdTokenCName, TypeName, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue, Flag = ' '):
|
||||||
|
if not Pcd.SkuInfoList:
|
||||||
|
Value = Pcd.DefaultValue
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '{'))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))
|
||||||
|
if IsStructure:
|
||||||
|
OverrideValues = Pcd.OverrideValues
|
||||||
|
if OverrideValues:
|
||||||
|
Keys = OverrideValues.keys()
|
||||||
|
Data = OverrideValues[Keys[0]]
|
||||||
|
Struct = Data.values()[0]
|
||||||
|
self.PrintStructureInfo(File, Struct)
|
||||||
|
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
||||||
|
else:
|
||||||
|
FirstPrint = True
|
||||||
|
SkuList = sorted(Pcd.SkuInfoList.keys())
|
||||||
|
for Sku in SkuList:
|
||||||
|
SkuInfo = Pcd.SkuInfoList[Sku]
|
||||||
|
if TypeName in ('DYNHII', 'DEXHII'):
|
||||||
|
if SkuInfo.DefaultStoreDict:
|
||||||
|
DefaultStoreList = sorted(SkuInfo.DefaultStoreDict.keys())
|
||||||
|
for DefaultStore in DefaultStoreList:
|
||||||
|
Value = SkuInfo.DefaultStoreDict[DefaultStore]
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if FirstPrint:
|
||||||
|
FirstPrint = False
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', '{'))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', Value))
|
||||||
|
else:
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', '{'))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '(' + DefaultStore + ')', Value))
|
||||||
|
FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset))
|
||||||
|
if IsStructure:
|
||||||
|
OverrideValues = Pcd.OverrideValues[Sku]
|
||||||
|
Struct = OverrideValues[DefaultStore]
|
||||||
|
self.PrintStructureInfo(File, Struct)
|
||||||
|
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
||||||
|
elif TypeName in ('DYNVPD', 'DEXVPD'):
|
||||||
|
Value = SkuInfo.DefaultValue
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if FirstPrint:
|
||||||
|
FirstPrint = False
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', "{"))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))
|
||||||
|
else:
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', "{"))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))
|
||||||
|
FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset))
|
||||||
|
if IsStructure:
|
||||||
|
OverrideValues = Pcd.OverrideValues[Sku]
|
||||||
|
if OverrideValues:
|
||||||
|
Keys = OverrideValues.keys()
|
||||||
|
Struct = OverrideValues[Keys[0]]
|
||||||
|
self.PrintStructureInfo(File, Struct)
|
||||||
|
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
||||||
|
else:
|
||||||
|
Value = SkuInfo.DefaultValue
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if FirstPrint:
|
||||||
|
FirstPrint = False
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '{'))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))
|
||||||
|
else:
|
||||||
|
if IsByteArray:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', '{'))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, ' %-*s : %6s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuInfo.SkuIdName + ')', Value))
|
||||||
|
if IsStructure:
|
||||||
|
OverrideValues = Pcd.OverrideValues[Sku]
|
||||||
|
if OverrideValues:
|
||||||
|
Keys = OverrideValues.keys()
|
||||||
|
Struct = OverrideValues[Keys[0]]
|
||||||
|
self.PrintStructureInfo(File, Struct)
|
||||||
|
self.PrintPcdDefault(File, Pcd, IsStructure, DscMatch, DscDefaultValue, InfMatch, InfDefaultValue, DecMatch, DecDefaultValue)
|
||||||
|
|
||||||
|
def PrintStructureInfo(self, File, Struct):
|
||||||
|
NewInfo = collections.OrderedDict()
|
||||||
|
for Key, Value in Struct.items():
|
||||||
|
if Key not in NewInfo:
|
||||||
|
NewInfo[Key] = Value[0]
|
||||||
|
else:
|
||||||
|
del NewInfo[Key]
|
||||||
|
NewInfo[Key] = Value[0]
|
||||||
|
if NewInfo:
|
||||||
|
for item in NewInfo:
|
||||||
|
FileWrite(File, ' %-*s = %s' % (self.MaxLen + 4, '.' + item, NewInfo[item]))
|
||||||
|
|
||||||
|
def StrtoHex(self, value):
|
||||||
|
try:
|
||||||
|
value = hex(int(value))
|
||||||
|
return value
|
||||||
|
except:
|
||||||
|
if value.startswith("L\"") and value.endswith("\""):
|
||||||
|
valuelist = []
|
||||||
|
for ch in value[2:-1]:
|
||||||
|
valuelist.append(hex(ord(ch)))
|
||||||
|
valuelist.append('0x00')
|
||||||
|
return valuelist
|
||||||
|
elif value.startswith("\"") and value.endswith("\""):
|
||||||
|
return hex(ord(value[1:-1]))
|
||||||
|
elif value.startswith("{") and value.endswith("}"):
|
||||||
|
valuelist = []
|
||||||
|
if ',' not in value:
|
||||||
|
return value[1:-1]
|
||||||
|
for ch in value[1:-1].split(','):
|
||||||
|
ch = ch.strip()
|
||||||
|
if ch.startswith('0x') or ch.startswith('0X'):
|
||||||
|
valuelist.append(ch)
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
valuelist.append(hex(int(ch.strip())))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return valuelist
|
||||||
|
else:
|
||||||
|
return value
|
||||||
|
|
||||||
##
|
##
|
||||||
# Reports platform and module Prediction information
|
# Reports platform and module Prediction information
|
||||||
@ -1413,10 +1621,9 @@ class FdRegionReport(object):
|
|||||||
#
|
#
|
||||||
# Collect PCDs defined in DSC file
|
# Collect PCDs defined in DSC file
|
||||||
#
|
#
|
||||||
for arch in Wa.ArchList:
|
for Pa in Wa.AutoGenObjectList:
|
||||||
Platform = Wa.BuildDatabase[Wa.MetaFile, arch]
|
for (TokenCName, TokenSpaceGuidCName) in Pa.Platform.Pcds:
|
||||||
for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds:
|
DscDefaultValue = Pa.Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue
|
||||||
DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue
|
|
||||||
PlatformPcds[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue
|
PlatformPcds[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1620,7 +1827,16 @@ class FdReport(object):
|
|||||||
FileWrite(File, "Size: 0x%X (%.0fK)" % (self.VPDSize, self.VPDSize / 1024.0))
|
FileWrite(File, "Size: 0x%X (%.0fK)" % (self.VPDSize, self.VPDSize / 1024.0))
|
||||||
FileWrite(File, gSubSectionSep)
|
FileWrite(File, gSubSectionSep)
|
||||||
for item in self.VPDInfoList:
|
for item in self.VPDInfoList:
|
||||||
FileWrite(File, item)
|
ValueList = item.split('|')
|
||||||
|
Value = ValueList[-1].strip()
|
||||||
|
IsByteArray, ArrayList = ByteArrayForamt(Value)
|
||||||
|
if IsByteArray:
|
||||||
|
ValueList[-1] = ' {'
|
||||||
|
FileWrite(File, '|'.join(ValueList))
|
||||||
|
for Array in ArrayList:
|
||||||
|
FileWrite(File, '%s' % (Array))
|
||||||
|
else:
|
||||||
|
FileWrite(File, item)
|
||||||
FileWrite(File, gSubSectionEnd)
|
FileWrite(File, gSubSectionEnd)
|
||||||
FileWrite(File, gSectionEnd)
|
FileWrite(File, gSectionEnd)
|
||||||
|
|
||||||
@ -1718,6 +1934,10 @@ class PlatformReport(object):
|
|||||||
FileWrite(File, "Architectures: %s" % self.Architectures)
|
FileWrite(File, "Architectures: %s" % self.Architectures)
|
||||||
FileWrite(File, "Tool Chain: %s" % self.ToolChain)
|
FileWrite(File, "Tool Chain: %s" % self.ToolChain)
|
||||||
FileWrite(File, "Target: %s" % self.Target)
|
FileWrite(File, "Target: %s" % self.Target)
|
||||||
|
if GlobalData.gSkuids:
|
||||||
|
FileWrite(File, "SKUID: %s" % " ".join(GlobalData.gSkuids))
|
||||||
|
if GlobalData.gDefaultStores:
|
||||||
|
FileWrite(File, "DefaultStore: %s" % " ".join(GlobalData.gDefaultStores))
|
||||||
FileWrite(File, "Output Path: %s" % self.OutputPath)
|
FileWrite(File, "Output Path: %s" % self.OutputPath)
|
||||||
FileWrite(File, "Build Environment: %s" % self.BuildEnvironment)
|
FileWrite(File, "Build Environment: %s" % self.BuildEnvironment)
|
||||||
FileWrite(File, "Build Duration: %s" % BuildDuration)
|
FileWrite(File, "Build Duration: %s" % BuildDuration)
|
||||||
|
@ -761,6 +761,8 @@ class Build():
|
|||||||
self.SkipAutoGen = BuildOptions.SkipAutoGen
|
self.SkipAutoGen = BuildOptions.SkipAutoGen
|
||||||
self.Reparse = BuildOptions.Reparse
|
self.Reparse = BuildOptions.Reparse
|
||||||
self.SkuId = BuildOptions.SkuId
|
self.SkuId = BuildOptions.SkuId
|
||||||
|
if self.SkuId:
|
||||||
|
GlobalData.gSKUID_CMD = self.SkuId
|
||||||
self.ConfDirectory = BuildOptions.ConfDirectory
|
self.ConfDirectory = BuildOptions.ConfDirectory
|
||||||
self.SpawnMode = True
|
self.SpawnMode = True
|
||||||
self.BuildReport = BuildReport(BuildOptions.ReportFile, BuildOptions.ReportType)
|
self.BuildReport = BuildReport(BuildOptions.ReportFile, BuildOptions.ReportType)
|
||||||
|
Reference in New Issue
Block a user