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:
@ -118,7 +118,7 @@ class StructurePcd(PcdClassObject):
|
||||
self.PcdMode = None
|
||||
self.SkuOverrideValues = collections.OrderedDict({})
|
||||
self.FlexibleFieldName = None
|
||||
|
||||
self.StructName = None
|
||||
def __repr__(self):
|
||||
return self.TypeName
|
||||
|
||||
@ -170,6 +170,7 @@ class StructurePcd(PcdClassObject):
|
||||
self.DefaultFromDSC=None
|
||||
self.OverrideValues = PcdObject.SkuOverrideValues if PcdObject.SkuOverrideValues else self.SkuOverrideValues
|
||||
self.FlexibleFieldName = PcdObject.FlexibleFieldName if PcdObject.FlexibleFieldName else self.FlexibleFieldName
|
||||
self.StructName = PcdObject.DatumType if PcdObject.DatumType else self.StructName
|
||||
|
||||
## LibraryClassObject
|
||||
#
|
||||
|
@ -401,14 +401,15 @@ class DecBuildData(PackageBuildClassObject):
|
||||
#
|
||||
PcdDict = tdict(True, 3)
|
||||
# for summarizing PCD
|
||||
PcdSet = set()
|
||||
PcdSet = []
|
||||
# find out all PCDs of the 'type'
|
||||
|
||||
StrPcdSet = []
|
||||
RecordList = self._RawData[Type, self._Arch]
|
||||
for TokenSpaceGuid, PcdCName, Setting, Arch, PrivateFlag, Dummy1, Dummy2 in RecordList:
|
||||
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:
|
||||
#
|
||||
|
@ -159,7 +159,7 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
else:
|
||||
self.OutputPath = os.path.dirname(self.DscFile)
|
||||
self.DefaultStores = None
|
||||
self.SkuIdMgr = SkuClass(self.SkuIdentifier, self.SkuIds)
|
||||
self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)
|
||||
arraystr = self.SkuIdMgr.DumpSkuIdArrary()
|
||||
|
||||
## XXX[key] = value
|
||||
@ -185,8 +185,6 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
self._SupArchList = None
|
||||
self._BuildTargets = None
|
||||
self._SkuName = None
|
||||
self._SkuIdentifier = None
|
||||
self._AvilableSkuIds = None
|
||||
self._PcdInfoFlag = None
|
||||
self._VarCheckFlag = None
|
||||
self._FlashDefinition = None
|
||||
@ -306,8 +304,8 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER:
|
||||
if self._SkuName == None:
|
||||
self._SkuName = Record[2]
|
||||
self._SkuIdentifier = Record[2]
|
||||
self._AvilableSkuIds = Record[2]
|
||||
if GlobalData.gSKUID_CMD:
|
||||
self._SkuName = GlobalData.gSKUID_CMD
|
||||
elif Name == TAB_DSC_DEFINES_PCD_INFO_GENERATION:
|
||||
self._PcdInfoFlag = Record[2]
|
||||
elif Name == TAB_DSC_DEFINES_PCD_VAR_CHECK_GENERATION:
|
||||
@ -438,23 +436,13 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
def _GetAviableSkuIds(self):
|
||||
if self._AvilableSkuIds:
|
||||
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
|
||||
|
||||
# # Retrieve SKUID_IDENTIFIER
|
||||
def _GetSkuName(self):
|
||||
if self._SkuName == None:
|
||||
if self._Header == None:
|
||||
self._GetHeaderInfo()
|
||||
if (self._SkuName == None or self._SkuName not in self.SkuIds):
|
||||
if self._SkuName == None:
|
||||
self._SkuName = 'DEFAULT'
|
||||
return self._SkuName
|
||||
|
||||
@ -620,6 +608,9 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
self.DefaultStores[Record[1].upper()] = (self.ToInt(Record[0]),Record[1].upper())
|
||||
if TAB_DEFAULT_STORES_DEFAULT not in self.DefaultStores:
|
||||
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
|
||||
|
||||
## Retrieve [Components] section information
|
||||
@ -854,10 +845,14 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
for pcdname in Pcds:
|
||||
pcd = Pcds[pcdname]
|
||||
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:
|
||||
for pcdname in Pcds:
|
||||
pcd = Pcds[pcdname]
|
||||
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
|
||||
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]]]
|
||||
@ -1574,6 +1569,10 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
|
||||
for pcd in Pcds.values():
|
||||
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():
|
||||
valuefromDec = pcdDecObject.DefaultValue
|
||||
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', '', valuefromDec)
|
||||
@ -1872,6 +1871,10 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
for pcd in Pcds.values():
|
||||
SkuInfoObj = pcd.SkuInfoList.values()[0]
|
||||
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():
|
||||
valuefromDec = pcdDecObject.DefaultValue
|
||||
SkuInfo = SkuInfoClass('DEFAULT', '0', '', '', '', '', SkuInfoObj.VpdOffset, valuefromDec)
|
||||
@ -1927,8 +1930,6 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
SupArchList = property(_GetSupArch)
|
||||
BuildTargets = property(_GetBuildTarget)
|
||||
SkuName = property(_GetSkuName, _SetSkuName)
|
||||
SkuIdentifier = property(_GetSkuIdentifier)
|
||||
AvilableSkuIds = property(_GetAviableSkuIds)
|
||||
PcdInfoFlag = property(_GetPcdInfoFlag)
|
||||
VarCheckFlag = property(_GetVarCheckFlag)
|
||||
FlashDefinition = property(_GetFdfFile)
|
||||
|
@ -1144,9 +1144,9 @@ class DscParser(MetaFileParser):
|
||||
File=self.MetaFile, Line=self._LineIndex + 1)
|
||||
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
|
||||
EdkLogger.error('Parser', FORMAT_INVALID, "No PCD value given",
|
||||
ExtraData=self._CurrentLine + " (<TokenSpaceGuidCName>.<TokenCName>|<PcdValue>)",
|
||||
|
Reference in New Issue
Block a user