]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/Workspace/BuildClassObject.py
BaseTools: Optimize string concatenation
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / BuildClassObject.py
CommitLineData
30fdf114
LG
1## @file\r
2# This file is used to define each component of the build database\r
3#\r
c33081c9 4# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
40d841f6 5# This program and the accompanying materials\r
30fdf114
LG
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12#\r
13\r
b0a26451 14from collections import OrderedDict, namedtuple\r
8518bf0b 15from Common.DataType import *\r
57ee97c0
B
16import collections\r
17import re\r
18from collections import OrderedDict\r
19StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')\r
20ArrayIndex = re.compile("\[\s*\d{0,1}\s*\]")\r
30fdf114
LG
21## PcdClassObject\r
22#\r
23# This Class is used for PcdObject\r
24#\r
25# @param object: Inherited from object class\r
26# @param Name: Input value for Name of Pcd, default is None\r
27# @param Guid: Input value for Guid of Pcd, default is None\r
28# @param Type: Input value for Type of Pcd, default is None\r
29# @param DatumType: Input value for DatumType of Pcd, default is None\r
30# @param Value: Input value for Value of Pcd, default is None\r
31# @param Token: Input value for Token of Pcd, default is None\r
32# @param MaxDatumSize: Input value for MaxDatumSize of Pcd, default is None\r
33# @param SkuInfoList: Input value for SkuInfoList of Pcd, default is {}\r
34# @param IsOverrided: Input value for IsOverrided of Pcd, default is False\r
e56468c0 35# @param GuidValue: Input value for TokenSpaceGuidValue of Pcd, default is None\r
30fdf114
LG
36#\r
37# @var TokenCName: To store value for TokenCName\r
38# @var TokenSpaceGuidCName: To store value for TokenSpaceGuidCName\r
39# @var Type: To store value for Type\r
40# @var DatumType: To store value for DatumType\r
41# @var TokenValue: To store value for TokenValue\r
42# @var MaxDatumSize: To store value for MaxDatumSize\r
43# @var SkuInfoList: To store value for SkuInfoList\r
44# @var IsOverrided: To store value for IsOverrided\r
45# @var Phase: To store value for Phase, default is "DXE"\r
46#\r
47class PcdClassObject(object):\r
57ee97c0 48 def __init__(self, Name = None, Guid = None, Type = None, DatumType = None, Value = None, Token = None, MaxDatumSize = None, SkuInfoList = None, IsOverrided = False, GuidValue = None, validateranges = None, validlists = None, expressions = None, IsDsc = False, UserDefinedDefaultStoresFlag = False):\r
30fdf114
LG
49 self.TokenCName = Name\r
50 self.TokenSpaceGuidCName = Guid\r
51 self.TokenSpaceGuidValue = GuidValue\r
52 self.Type = Type\r
72a1d776 53 self._DatumType = DatumType\r
30fdf114
LG
54 self.DefaultValue = Value\r
55 self.TokenValue = Token\r
56 self.MaxDatumSize = MaxDatumSize\r
c33081c9 57 self.MaxSizeUserSet = None\r
57ee97c0 58 self.SkuInfoList = SkuInfoList if SkuInfoList is not None else OrderedDict()\r
30fdf114
LG
59 self.Phase = "DXE"\r
60 self.Pending = False\r
e56468c0 61 self.IsOverrided = IsOverrided\r
a0a2cd1e
FB
62 self.IsFromBinaryInf = False\r
63 self.IsFromDsc = False\r
57ee97c0
B
64 self.validateranges = validateranges if validateranges is not None else []\r
65 self.validlists = validlists if validlists is not None else []\r
66 self.expressions = expressions if expressions is not None else []\r
cc71d8b7 67 self.DscDefaultValue = None\r
71127ce8 68 self.DscRawValue = {}\r
cc71d8b7
YZ
69 if IsDsc:\r
70 self.DscDefaultValue = Value\r
0f228f19 71 self.PcdValueFromComm = ""\r
543f5ac3 72 self.PcdValueFromFdf = ""\r
6a147d6d 73 self.CustomAttribute = {}\r
ced86858 74 self.UserDefinedDefaultStoresFlag = UserDefinedDefaultStoresFlag\r
72a1d776 75 self._Capacity = None\r
76\r
77 @property\r
78 def Capacity(self):\r
79 self._Capacity = []\r
80 dimension = ArrayIndex.findall(self._DatumType)\r
81 for item in dimension:\r
82 maxsize = item.lstrip("[").rstrip("]").strip()\r
83 if not maxsize:\r
84 maxsize = "-1"\r
85 self._Capacity.append(maxsize)\r
86 if hasattr(self, "SkuOverrideValues"):\r
87 for sku in self.SkuOverrideValues:\r
88 for defaultstore in self.SkuOverrideValues[sku]:\r
89 fields = self.SkuOverrideValues[sku][defaultstore]\r
90 for demesionattr in fields:\r
91 deme = ArrayIndex.findall(demesionattr)\r
92 for i in range(len(deme)-1):\r
93 if int(deme[i].lstrip("[").rstrip("]").strip()) > int(self._Capacity[i]):\r
94 print "error"\r
95 if hasattr(self,"DefaultValues"):\r
96 for demesionattr in self.DefaultValues:\r
97 deme = ArrayIndex.findall(demesionattr)\r
98 for i in range(len(deme)-1):\r
99 if int(deme[i].lstrip("[").rstrip("]").strip()) > int(self._Capacity[i]):\r
100 print "error"\r
101 self._Capacity = [str(int(d) + 1) for d in self._Capacity]\r
102 return self._Capacity\r
103 @property\r
104 def DatumType(self):\r
105 return self._DatumType\r
106\r
107 @DatumType.setter\r
108 def DatumType(self,DataType):\r
109 self._DatumType = DataType\r
110 self._Capacity = None\r
111\r
112 @property\r
113 def BaseDatumType(self):\r
114 if self.IsArray():\r
115 return self._DatumType[:self._DatumType.index("[")]\r
116 else:\r
117 return self._DatumType\r
118 def IsArray(self):\r
119 return True if len(self.Capacity) else False\r
120\r
121 def IsAggregateDatumType(self):\r
122 if self.DatumType in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, TAB_VOID, "BOOLEAN"]:\r
123 return False\r
124 if self.IsArray() or StructPattern.match(self.DatumType):\r
125 return True\r
126 return False\r
127\r
128 def IsSimpleTypeArray(self):\r
129 if self.IsArray() and self.BaseDatumType in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, "BOOLEAN"]:\r
130 return True\r
131 return False\r
9904222d 132\r
cfed8a37
FB
133 @staticmethod\r
134 def GetPcdMaxSizeWorker(PcdString, MaxSize):\r
135 if PcdString.startswith("{") and PcdString.endswith("}"):\r
136 return max([len(PcdString.split(",")),MaxSize])\r
137\r
138 if PcdString.startswith("\"") or PcdString.startswith("\'"):\r
139 return max([len(PcdString)-2+1,MaxSize])\r
140\r
141 if PcdString.startswith("L\""):\r
142 return max([2*(len(PcdString)-3+1),MaxSize])\r
143\r
144 return max([len(PcdString),MaxSize])\r
145\r
5565a8c4
CJ
146 ## Get the maximum number of bytes\r
147 def GetPcdMaxSize(self):\r
148 if self.DatumType in TAB_PCD_NUMERIC_TYPES:\r
149 return MAX_SIZE_TYPE[self.DatumType]\r
150\r
ccaa7754 151 MaxSize = int(self.MaxDatumSize, 10) if self.MaxDatumSize else 0\r
543f5ac3 152 if self.PcdValueFromFdf:\r
cfed8a37 153 MaxSize = self.GetPcdMaxSizeWorker(self.PcdValueFromFdf,MaxSize)\r
5565a8c4 154 if self.PcdValueFromComm:\r
cfed8a37
FB
155 MaxSize = self.GetPcdMaxSizeWorker(self.PcdValueFromComm,MaxSize)\r
156 if hasattr(self, "DefaultValueFromDec"):\r
157 MaxSize = self.GetPcdMaxSizeWorker(self.DefaultValueFromDec,MaxSize)\r
5565a8c4
CJ
158 return MaxSize\r
159\r
160 ## Get the number of bytes\r
161 def GetPcdSize(self):\r
162 if self.DatumType in TAB_PCD_NUMERIC_TYPES:\r
163 return MAX_SIZE_TYPE[self.DatumType]\r
164 if not self.DefaultValue:\r
165 return 1\r
166 elif self.DefaultValue[0] == 'L':\r
167 return (len(self.DefaultValue) - 2) * 2\r
168 elif self.DefaultValue[0] == '{':\r
169 return len(self.DefaultValue.split(','))\r
170 else:\r
171 return len(self.DefaultValue) - 1\r
172\r
173\r
30fdf114
LG
174 ## Convert the class to a string\r
175 #\r
176 # Convert each member of the class to string\r
177 # Organize to a signle line format string\r
178 #\r
179 # @retval Rtn Formatted String\r
180 #\r
181 def __str__(self):\r
182 Rtn = '\tTokenCName=' + str(self.TokenCName) + ', ' + \\r
183 'TokenSpaceGuidCName=' + str(self.TokenSpaceGuidCName) + ', ' + \\r
184 'Type=' + str(self.Type) + ', ' + \\r
185 'DatumType=' + str(self.DatumType) + ', ' + \\r
186 'DefaultValue=' + str(self.DefaultValue) + ', ' + \\r
187 'TokenValue=' + str(self.TokenValue) + ', ' + \\r
188 'MaxDatumSize=' + str(self.MaxDatumSize) + ', '\r
189 for Item in self.SkuInfoList.values():\r
190 Rtn = Rtn + 'SkuId=' + Item.SkuId + ', ' + 'SkuIdName=' + Item.SkuIdName\r
e56468c0 191 Rtn = Rtn + ', IsOverrided=' + str(self.IsOverrided)\r
30fdf114
LG
192\r
193 return Rtn\r
194\r
195 ## Override __eq__ function\r
196 #\r
197 # Check whether pcds are the same\r
198 #\r
199 # @retval False The two pcds are different\r
200 # @retval True The two pcds are the same\r
201 #\r
202 def __eq__(self, Other):\r
203 return Other and self.TokenCName == Other.TokenCName and self.TokenSpaceGuidCName == Other.TokenSpaceGuidCName\r
204\r
205 ## Override __hash__ function\r
206 #\r
207 # Use (TokenCName, TokenSpaceGuidCName) as key in hash table\r
208 #\r
209 # @retval truple() Key for hash table\r
210 #\r
211 def __hash__(self):\r
212 return hash((self.TokenCName, self.TokenSpaceGuidCName))\r
213\r
ae7b6df8 214class StructurePcd(PcdClassObject):\r
9904222d 215 def __init__(self, StructuredPcdIncludeFile=None, Packages=None, Name=None, Guid=None, Type=None, DatumType=None, Value=None, Token=None, MaxDatumSize=None, SkuInfoList=None, IsOverrided=False, GuidValue=None, validateranges=None, validlists=None, expressions=None,default_store = TAB_DEFAULT_STORES_DEFAULT):\r
8ac64c5b
CJ
216 if SkuInfoList is None:\r
217 SkuInfoList = {}\r
218 if validateranges is None:\r
219 validateranges = []\r
220 if validlists is None:\r
221 validlists = []\r
222 if expressions is None:\r
223 expressions = []\r
224 if Packages is None:\r
225 Packages = []\r
1ccc4d89 226 super(StructurePcd, self).__init__(Name, Guid, Type, DatumType, Value, Token, MaxDatumSize, SkuInfoList, IsOverrided, GuidValue, validateranges, validlists, expressions)\r
81add864 227 self.StructuredPcdIncludeFile = [] if StructuredPcdIncludeFile is None else StructuredPcdIncludeFile\r
ae7b6df8 228 self.PackageDecs = Packages\r
8518bf0b 229 self.DefaultStoreName = [default_store]\r
b0a26451 230 self.DefaultValues = OrderedDict()\r
ae7b6df8 231 self.PcdMode = None\r
b0a26451 232 self.SkuOverrideValues = OrderedDict()\r
e651d06c 233 self.StructName = None\r
6a103440
FB
234 self.PcdDefineLineNo = 0\r
235 self.PkgPath = ""\r
06140766 236 self.DefaultValueFromDec = ""\r
88252a90 237 self.ValueChain = set()\r
b0a26451
CJ
238 self.PcdFieldValueFromComm = OrderedDict()\r
239 self.PcdFieldValueFromFdf = OrderedDict()\r
ae7b6df8
LG
240 def __repr__(self):\r
241 return self.TypeName\r
242\r
72a1d776 243 def AddDefaultValue (self, FieldName, Value, FileName="", LineNo=0,DimensionAttr ="-1"):\r
244 if DimensionAttr not in self.DefaultValues:\r
245 self.DefaultValues[DimensionAttr] = collections.OrderedDict()\r
246 if FieldName in self.DefaultValues[DimensionAttr]:\r
247 del self.DefaultValues[DimensionAttr][FieldName]\r
248 self.DefaultValues[DimensionAttr][FieldName] = [Value.strip(), FileName, LineNo]\r
249 return self.DefaultValues[DimensionAttr][FieldName]\r
ae7b6df8 250\r
ccaa7754 251 def SetDecDefaultValue(self, DefaultValue):\r
06140766 252 self.DefaultValueFromDec = DefaultValue\r
72a1d776 253 def AddOverrideValue (self, FieldName, Value, SkuName, DefaultStoreName, FileName="", LineNo=0, DimensionAttr = '-1'):\r
ae7b6df8 254 if SkuName not in self.SkuOverrideValues:\r
b0a26451 255 self.SkuOverrideValues[SkuName] = OrderedDict()\r
8518bf0b 256 if DefaultStoreName not in self.SkuOverrideValues[SkuName]:\r
b0a26451 257 self.SkuOverrideValues[SkuName][DefaultStoreName] = OrderedDict()\r
72a1d776 258 if DimensionAttr not in self.SkuOverrideValues[SkuName][DefaultStoreName]:\r
259 self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr] = collections.OrderedDict()\r
260 if FieldName in self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr]:\r
261 del self.SkuOverrideValues[SkuName][DefaultStoreName][FieldName][DimensionAttr]\r
262 self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr][FieldName] = [Value.strip(), FileName, LineNo]\r
263 return self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr][FieldName]\r
ae7b6df8
LG
264\r
265 def SetPcdMode (self, PcdMode):\r
266 self.PcdMode = PcdMode\r
267\r
ae7b6df8
LG
268 def copy(self, PcdObject):\r
269 self.TokenCName = PcdObject.TokenCName if PcdObject.TokenCName else self.TokenCName\r
270 self.TokenSpaceGuidCName = PcdObject.TokenSpaceGuidCName if PcdObject.TokenSpaceGuidCName else PcdObject.TokenSpaceGuidCName\r
271 self.TokenSpaceGuidValue = PcdObject.TokenSpaceGuidValue if PcdObject.TokenSpaceGuidValue else self.TokenSpaceGuidValue\r
272 self.Type = PcdObject.Type if PcdObject.Type else self.Type\r
72a1d776 273 self._DatumType = PcdObject.DatumType if PcdObject.DatumType else self.DatumType\r
ae7b6df8
LG
274 self.DefaultValue = PcdObject.DefaultValue if PcdObject.DefaultValue else self.DefaultValue\r
275 self.TokenValue = PcdObject.TokenValue if PcdObject.TokenValue else self.TokenValue\r
276 self.MaxDatumSize = PcdObject.MaxDatumSize if PcdObject.MaxDatumSize else self.MaxDatumSize\r
277 self.SkuInfoList = PcdObject.SkuInfoList if PcdObject.SkuInfoList else self.SkuInfoList\r
278 self.Phase = PcdObject.Phase if PcdObject.Phase else self.Phase\r
279 self.Pending = PcdObject.Pending if PcdObject.Pending else self.Pending\r
280 self.IsOverrided = PcdObject.IsOverrided if PcdObject.IsOverrided else self.IsOverrided\r
281 self.IsFromBinaryInf = PcdObject.IsFromBinaryInf if PcdObject.IsFromBinaryInf else self.IsFromBinaryInf\r
282 self.IsFromDsc = PcdObject.IsFromDsc if PcdObject.IsFromDsc else self.IsFromDsc\r
283 self.validateranges = PcdObject.validateranges if PcdObject.validateranges else self.validateranges\r
284 self.validlists = PcdObject.validlists if PcdObject.validlists else self.validlists\r
285 self.expressions = PcdObject.expressions if PcdObject.expressions else self.expressions\r
f3b31433 286 self.DscRawValue = PcdObject.DscRawValue if PcdObject.DscRawValue else self.DscRawValue\r
0f228f19 287 self.PcdValueFromComm = PcdObject.PcdValueFromComm if PcdObject.PcdValueFromComm else self.PcdValueFromComm\r
543f5ac3 288 self.PcdValueFromFdf = PcdObject.PcdValueFromFdf if PcdObject.PcdValueFromFdf else self.PcdValueFromFdf\r
6a147d6d 289 self.CustomAttribute = PcdObject.CustomAttribute if PcdObject.CustomAttribute else self.CustomAttribute\r
ced86858 290 self.UserDefinedDefaultStoresFlag = PcdObject.UserDefinedDefaultStoresFlag if PcdObject.UserDefinedDefaultStoresFlag else self.UserDefinedDefaultStoresFlag\r
0d1f5b2b 291 if isinstance(PcdObject, StructurePcd):\r
ae7b6df8
LG
292 self.StructuredPcdIncludeFile = PcdObject.StructuredPcdIncludeFile if PcdObject.StructuredPcdIncludeFile else self.StructuredPcdIncludeFile\r
293 self.PackageDecs = PcdObject.PackageDecs if PcdObject.PackageDecs else self.PackageDecs\r
294 self.DefaultValues = PcdObject.DefaultValues if PcdObject.DefaultValues else self.DefaultValues\r
295 self.PcdMode = PcdObject.PcdMode if PcdObject.PcdMode else self.PcdMode\r
296 self.DefaultFromDSC=None\r
06140766 297 self.DefaultValueFromDec = PcdObject.DefaultValueFromDec if PcdObject.DefaultValueFromDec else self.DefaultValueFromDec\r
65eff519 298 self.SkuOverrideValues = PcdObject.SkuOverrideValues if PcdObject.SkuOverrideValues else self.SkuOverrideValues\r
e651d06c 299 self.StructName = PcdObject.DatumType if PcdObject.DatumType else self.StructName\r
6a103440
FB
300 self.PcdDefineLineNo = PcdObject.PcdDefineLineNo if PcdObject.PcdDefineLineNo else self.PcdDefineLineNo\r
301 self.PkgPath = PcdObject.PkgPath if PcdObject.PkgPath else self.PkgPath\r
f3b31433 302 self.ValueChain = PcdObject.ValueChain if PcdObject.ValueChain else self.ValueChain\r
b854e2bf 303 self.PcdFieldValueFromComm = PcdObject.PcdFieldValueFromComm if PcdObject.PcdFieldValueFromComm else self.PcdFieldValueFromComm\r
543f5ac3 304 self.PcdFieldValueFromFdf = PcdObject.PcdFieldValueFromFdf if PcdObject.PcdFieldValueFromFdf else self.PcdFieldValueFromFdf\r
ae7b6df8 305\r
1ccc4d89 306LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList'], verbose=False)\r
30fdf114
LG
307\r
308## ModuleBuildClassObject\r
309#\r
310# This Class defines ModuleBuildClass\r
311#\r
312# @param object: Inherited from object class\r
313#\r
314# @var MetaFile: To store value for module meta file path\r
315# @var BaseName: To store value for BaseName\r
316# @var ModuleType: To store value for ModuleType\r
317# @var Guid: To store value for Guid\r
318# @var Version: To store value for Version\r
319# @var PcdIsDriver: To store value for PcdIsDriver\r
320# @var BinaryModule: To store value for BinaryModule\r
321# @var CustomMakefile: To store value for CustomMakefile\r
322# @var Specification: To store value for Specification\r
323# @var Shadow To store value for Shadow\r
324# @var LibraryClass: To store value for LibraryClass, it is a list structure as\r
325# [ LibraryClassObject, ...]\r
326# @var ModuleEntryPointList: To store value for ModuleEntryPointList\r
327# @var ModuleUnloadImageList: To store value for ModuleUnloadImageList\r
328# @var ConstructorList: To store value for ConstructorList\r
329# @var DestructorList: To store value for DestructorList\r
330# @var Binaries: To store value for Binaries, it is a list structure as\r
331# [ ModuleBinaryClassObject, ...]\r
332# @var Sources: To store value for Sources, it is a list structure as\r
333# [ ModuleSourceFilesClassObject, ... ]\r
334# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
335# { [LibraryClassName, ModuleType] : LibraryClassInfFile }\r
336# @var Protocols: To store value for Protocols, it is a list structure as\r
337# [ ProtocolName, ... ]\r
338# @var Ppis: To store value for Ppis, it is a list structure as\r
339# [ PpiName, ... ]\r
340# @var Guids: To store value for Guids, it is a list structure as\r
341# [ GuidName, ... ]\r
342# @var Includes: To store value for Includes, it is a list structure as\r
343# [ IncludePath, ... ]\r
344# @var Packages: To store value for Packages, it is a list structure as\r
345# [ DecFileName, ... ]\r
346# @var Pcds: To store value for Pcds, it is a set structure as\r
347# { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
348# @var BuildOptions: To store value for BuildOptions, it is a set structure as\r
349# { [BuildOptionKey] : BuildOptionValue}\r
350# @var Depex: To store value for Depex\r
351#\r
352class ModuleBuildClassObject(object):\r
353 def __init__(self):\r
354 self.AutoGenVersion = 0\r
355 self.MetaFile = ''\r
356 self.BaseName = ''\r
357 self.ModuleType = ''\r
358 self.Guid = ''\r
359 self.Version = ''\r
360 self.PcdIsDriver = ''\r
361 self.BinaryModule = ''\r
362 self.Shadow = ''\r
363 self.SourceOverridePath = ''\r
364 self.CustomMakefile = {}\r
365 self.Specification = {}\r
366 self.LibraryClass = []\r
367 self.ModuleEntryPointList = []\r
368 self.ModuleUnloadImageList = []\r
369 self.ConstructorList = []\r
370 self.DestructorList = []\r
371\r
372 self.Binaries = []\r
373 self.Sources = []\r
b0a26451 374 self.LibraryClasses = OrderedDict()\r
30fdf114
LG
375 self.Libraries = []\r
376 self.Protocols = []\r
377 self.Ppis = []\r
378 self.Guids = []\r
379 self.Includes = []\r
380 self.Packages = []\r
381 self.Pcds = {}\r
382 self.BuildOptions = {}\r
383 self.Depex = {}\r
384\r
385 ## Convert the class to a string\r
386 #\r
387 # Convert member MetaFile of the class to a string\r
388 #\r
389 # @retval string Formatted String\r
390 #\r
391 def __str__(self):\r
392 return str(self.MetaFile)\r
393\r
394 ## Override __eq__ function\r
395 #\r
396 # Check whether ModuleBuildClassObjects are the same\r
397 #\r
398 # @retval False The two ModuleBuildClassObjects are different\r
399 # @retval True The two ModuleBuildClassObjects are the same\r
400 #\r
401 def __eq__(self, Other):\r
402 return self.MetaFile == Other\r
403\r
404 ## Override __hash__ function\r
405 #\r
406 # Use MetaFile as key in hash table\r
407 #\r
408 # @retval string Key for hash table\r
409 #\r
410 def __hash__(self):\r
411 return hash(self.MetaFile)\r
412\r
413## PackageBuildClassObject\r
414#\r
415# This Class defines PackageBuildClass\r
416#\r
417# @param object: Inherited from object class\r
418#\r
419# @var MetaFile: To store value for package meta file path\r
420# @var PackageName: To store value for PackageName\r
421# @var Guid: To store value for Guid\r
422# @var Version: To store value for Version\r
423# @var Protocols: To store value for Protocols, it is a set structure as\r
424# { [ProtocolName] : Protocol Guid, ... }\r
425# @var Ppis: To store value for Ppis, it is a set structure as\r
426# { [PpiName] : Ppi Guid, ... }\r
427# @var Guids: To store value for Guids, it is a set structure as\r
428# { [GuidName] : Guid, ... }\r
429# @var Includes: To store value for Includes, it is a list structure as\r
430# [ IncludePath, ... ]\r
431# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
432# { [LibraryClassName] : LibraryClassInfFile }\r
433# @var Pcds: To store value for Pcds, it is a set structure as\r
434# { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
435#\r
436class PackageBuildClassObject(object):\r
437 def __init__(self):\r
438 self.MetaFile = ''\r
439 self.PackageName = ''\r
440 self.Guid = ''\r
441 self.Version = ''\r
442\r
443 self.Protocols = {}\r
444 self.Ppis = {}\r
445 self.Guids = {}\r
446 self.Includes = []\r
447 self.LibraryClasses = {}\r
448 self.Pcds = {}\r
449\r
450 ## Convert the class to a string\r
451 #\r
452 # Convert member MetaFile of the class to a string\r
453 #\r
454 # @retval string Formatted String\r
455 #\r
456 def __str__(self):\r
457 return str(self.MetaFile)\r
458\r
459 ## Override __eq__ function\r
460 #\r
461 # Check whether PackageBuildClassObjects are the same\r
462 #\r
463 # @retval False The two PackageBuildClassObjects are different\r
464 # @retval True The two PackageBuildClassObjects are the same\r
465 #\r
466 def __eq__(self, Other):\r
467 return self.MetaFile == Other\r
468\r
469 ## Override __hash__ function\r
470 #\r
471 # Use MetaFile as key in hash table\r
472 #\r
473 # @retval string Key for hash table\r
474 #\r
475 def __hash__(self):\r
476 return hash(self.MetaFile)\r
477\r
478## PlatformBuildClassObject\r
479#\r
480# This Class defines PlatformBuildClass\r
481#\r
482# @param object: Inherited from object class\r
483#\r
484# @var MetaFile: To store value for platform meta-file path\r
485# @var PlatformName: To store value for PlatformName\r
486# @var Guid: To store value for Guid\r
487# @var Version: To store value for Version\r
488# @var DscSpecification: To store value for DscSpecification\r
489# @var OutputDirectory: To store value for OutputDirectory\r
490# @var FlashDefinition: To store value for FlashDefinition\r
491# @var BuildNumber: To store value for BuildNumber\r
492# @var MakefileName: To store value for MakefileName\r
493# @var SkuIds: To store value for SkuIds, it is a set structure as\r
494# { 'SkuName' : SkuId, '!include' : includefilename, ...}\r
495# @var Modules: To store value for Modules, it is a list structure as\r
496# [ InfFileName, ... ]\r
497# @var Libraries: To store value for Libraries, it is a list structure as\r
498# [ InfFileName, ... ]\r
499# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
500# { (LibraryClassName, ModuleType) : LibraryClassInfFile }\r
501# @var Pcds: To store value for Pcds, it is a set structure as\r
502# { [(PcdCName, PcdGuidCName)] : PcdClassObject }\r
503# @var BuildOptions: To store value for BuildOptions, it is a set structure as\r
504# { [BuildOptionKey] : BuildOptionValue }\r
505#\r
506class PlatformBuildClassObject(object):\r
507 def __init__(self):\r
508 self.MetaFile = ''\r
509 self.PlatformName = ''\r
510 self.Guid = ''\r
511 self.Version = ''\r
512 self.DscSpecification = ''\r
513 self.OutputDirectory = ''\r
514 self.FlashDefinition = ''\r
515 self.BuildNumber = ''\r
516 self.MakefileName = ''\r
517\r
518 self.SkuIds = {}\r
519 self.Modules = []\r
520 self.LibraryInstances = []\r
521 self.LibraryClasses = {}\r
522 self.Libraries = {}\r
523 self.Pcds = {}\r
524 self.BuildOptions = {}\r
525\r
526 ## Convert the class to a string\r
527 #\r
528 # Convert member MetaFile of the class to a string\r
529 #\r
530 # @retval string Formatted String\r
531 #\r
532 def __str__(self):\r
533 return str(self.MetaFile)\r
534\r
535 ## Override __eq__ function\r
536 #\r
537 # Check whether PlatformBuildClassObjects are the same\r
538 #\r
539 # @retval False The two PlatformBuildClassObjects are different\r
540 # @retval True The two PlatformBuildClassObjects are the same\r
541 #\r
542 def __eq__(self, Other):\r
543 return self.MetaFile == Other\r
544\r
545 ## Override __hash__ function\r
546 #\r
547 # Use MetaFile as key in hash table\r
548 #\r
549 # @retval string Key for hash table\r
550 #\r
551 def __hash__(self):\r
552 return hash(self.MetaFile)\r