X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FWorkspace%2FBuildClassObject.py;h=7e96370d955024a15144b3b12059e8cf1b9219e1;hp=258905e80f25a4bfa6e2879847dfedd22aad92d1;hb=71127ce88392d2a0392cb0cb90eaa0245da14f05;hpb=88252a90d1ca7846731cd2e4e8e860454f7d97a3 diff --git a/BaseTools/Source/Python/Workspace/BuildClassObject.py b/BaseTools/Source/Python/Workspace/BuildClassObject.py index 258905e80f..7e96370d95 100644 --- a/BaseTools/Source/Python/Workspace/BuildClassObject.py +++ b/BaseTools/Source/Python/Workspace/BuildClassObject.py @@ -11,11 +11,6 @@ # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # -import Common.LongFilePathOs as os - -from collections import OrderedDict -from Common.Misc import RealPath2 -from Common.BuildToolError import * from Common.DataType import * import collections @@ -66,12 +61,54 @@ class PcdClassObject(object): self.validlists = validlists self.expressions = expressions self.DscDefaultValue = None - self.DscRawValue = None + self.DscRawValue = {} if IsDsc: self.DscDefaultValue = Value self.PcdValueFromComm = "" + self.PcdValueFromFdf = "" self.DefinitionPosition = ("","") + ## Get the maximum number of bytes + def GetPcdMaxSize(self): + if self.DatumType in TAB_PCD_NUMERIC_TYPES: + 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]) + elif self.PcdValueFromComm.startswith("\"") or self.PcdValueFromComm.startswith("\'"): + return max([len(self.PcdValueFromComm)-2+1, MaxSize]) + elif self.PcdValueFromComm.startswith("L\""): + return max([2*(len(self.PcdValueFromComm)-3+1), MaxSize]) + else: + return max([len(self.PcdValueFromComm), MaxSize]) + return MaxSize + + ## Get the number of bytes + def GetPcdSize(self): + if self.DatumType in TAB_PCD_NUMERIC_TYPES: + return MAX_SIZE_TYPE[self.DatumType] + if not self.DefaultValue: + return 1 + elif self.DefaultValue[0] == 'L': + return (len(self.DefaultValue) - 2) * 2 + elif self.DefaultValue[0] == '{': + return len(self.DefaultValue.split(',')) + else: + return len(self.DefaultValue) - 1 + + ## Convert the class to a string # # Convert each member of the class to string @@ -138,6 +175,7 @@ class StructurePcd(PcdClassObject): self.DefaultValueFromDec = "" self.ValueChain = set() self.PcdFieldValueFromComm = collections.OrderedDict() + self.PcdFieldValueFromFdf = collections.OrderedDict() def __repr__(self): return self.TypeName @@ -147,7 +185,7 @@ class StructurePcd(PcdClassObject): self.DefaultValues[FieldName] = [Value.strip(), FileName, LineNo] return self.DefaultValues[FieldName] - def SetDecDefaultValue(self,DefaultValue): + def SetDecDefaultValue(self, DefaultValue): self.DefaultValueFromDec = DefaultValue def AddOverrideValue (self, FieldName, Value, SkuName, DefaultStoreName, FileName="", LineNo=0): if SkuName not in self.SkuOverrideValues: @@ -185,8 +223,9 @@ 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 type(PcdObject) is StructurePcd: + if isinstance(PcdObject, StructurePcd): self.StructuredPcdIncludeFile = PcdObject.StructuredPcdIncludeFile if PcdObject.StructuredPcdIncludeFile else self.StructuredPcdIncludeFile self.PackageDecs = PcdObject.PackageDecs if PcdObject.PackageDecs else self.PackageDecs self.DefaultValues = PcdObject.DefaultValues if PcdObject.DefaultValues else self.DefaultValues @@ -200,6 +239,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 # @@ -208,18 +248,14 @@ class StructurePcd(PcdClassObject): # @param object: Inherited from object class # @param Name: Input value for LibraryClassName, default is None # @param SupModList: Input value for SupModList, default is [] -# @param Type: Input value for Type, default is None # # @var LibraryClass: To store value for LibraryClass # @var SupModList: To store value for SupModList -# @var Type: To store value for Type # class LibraryClassObject(object): - def __init__(self, Name = None, SupModList = [], Type = None): + def __init__(self, Name = None, SupModList = []): self.LibraryClass = Name self.SupModList = SupModList - if Type is not None: - self.SupModList = CleanString(Type).split(DataType.TAB_SPACE_SPLIT) ## ModuleBuildClassObject # @@ -287,7 +323,7 @@ class ModuleBuildClassObject(object): self.Binaries = [] self.Sources = [] - self.LibraryClasses = OrderedDict() + self.LibraryClasses = collections.OrderedDict() self.Libraries = [] self.Protocols = [] self.Ppis = []