BaseTools: Enable structure pcd in FDF file

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
BobCF
2018-06-22 17:14:13 +08:00
committed by Liming Gao
parent e550f259a9
commit 543f5ac30f
6 changed files with 258 additions and 21 deletions

View File

@ -70,7 +70,8 @@ class PcdClassObject(object):
if IsDsc:
self.DscDefaultValue = Value
self.PcdValueFromComm = ""
self.DefinitionPosition = ("", "")
self.PcdValueFromFdf = ""
self.DefinitionPosition = ("","")
## Get the maximum number of bytes
def GetPcdMaxSize(self):
@ -78,6 +79,16 @@ class PcdClassObject(object):
return MAX_SIZE_TYPE[self.DatumType]
MaxSize = int(self.MaxDatumSize, 10) if self.MaxDatumSize else 0
if self.PcdValueFromFdf:
if self.PcdValueFromFdf.startswith("{") and self.PcdValueFromFdf.endswith("}"):
MaxSize = max([len(self.PcdValueFromFdf.split(",")),MaxSize])
elif self.PcdValueFromFdf.startswith("\"") or self.PcdValueFromFdf.startswith("\'"):
MaxSize = max([len(self.PcdValueFromFdf)-2+1,MaxSize])
elif self.PcdValueFromFdf.startswith("L\""):
MaxSize = max([2*(len(self.PcdValueFromFdf)-3+1),MaxSize])
else:
MaxSize = max([len(self.PcdValueFromFdf),MaxSize])
if self.PcdValueFromComm:
if self.PcdValueFromComm.startswith("{") and self.PcdValueFromComm.endswith("}"):
return max([len(self.PcdValueFromComm.split(",")), MaxSize])
@ -169,6 +180,7 @@ class StructurePcd(PcdClassObject):
self.DefaultValueFromDec = ""
self.ValueChain = set()
self.PcdFieldValueFromComm = collections.OrderedDict()
self.PcdFieldValueFromFdf = collections.OrderedDict()
def __repr__(self):
return self.TypeName
@ -216,6 +228,7 @@ class StructurePcd(PcdClassObject):
self.expressions = PcdObject.expressions if PcdObject.expressions else self.expressions
self.DscRawValue = PcdObject.DscRawValue if PcdObject.DscRawValue else self.DscRawValue
self.PcdValueFromComm = PcdObject.PcdValueFromComm if PcdObject.PcdValueFromComm else self.PcdValueFromComm
self.PcdValueFromFdf = PcdObject.PcdValueFromFdf if PcdObject.PcdValueFromFdf else self.PcdValueFromFdf
self.DefinitionPosition = PcdObject.DefinitionPosition if PcdObject.DefinitionPosition else self.DefinitionPosition
if isinstance(PcdObject, StructurePcd):
self.StructuredPcdIncludeFile = PcdObject.StructuredPcdIncludeFile if PcdObject.StructuredPcdIncludeFile else self.StructuredPcdIncludeFile
@ -231,6 +244,7 @@ class StructurePcd(PcdClassObject):
self.PkgPath = PcdObject.PkgPath if PcdObject.PkgPath else self.PkgPath
self.ValueChain = PcdObject.ValueChain if PcdObject.ValueChain else self.ValueChain
self.PcdFieldValueFromComm = PcdObject.PcdFieldValueFromComm if PcdObject.PcdFieldValueFromComm else self.PcdFieldValueFromComm
self.PcdFieldValueFromFdf = PcdObject.PcdFieldValueFromFdf if PcdObject.PcdFieldValueFromFdf else self.PcdFieldValueFromFdf
## LibraryClassObject
#